Un programa para Windows que use Allegro s�lo tiene que inclu�r uno o m�s ficheros del �rbol include/allegro, o allegro.h; no obstante, si tambi�n necesita llamar directamente a funciones no portables del API Win32, deber� inclu�r el fichero de cabecera espec�fico de Windows winalleg.h justo tras allegro.h, y antes de cualquier otro fichero de cabecera del API Win32. Por defecto winalleg.h incluye el fichero de cabecera principal windows.h del API Win32. Si por el contrario desea usar la interfaz C++ del API Win32 (es decir, las Microsoft Foundation Classes), defina el s�mbolo de preprocesador ALLEGRO_AND_MFC antes de inclu�r cualquier fichero de cabecera de Allegro para que afxwin.h sea inclu�do. Tenga en cuenta que en este �ltimo caso, las macros de depuraci�n ASSERT() y TRACE() ser�n renombradas a AL_ASSERT() y AL_TRACE() respectivamente.
Las aplicaciones GUI de Windows empiezan con un punto de entrada WinMain(), en vez del punto de entrada est�ndar main(). Allegro est� configurado para crear aplicaciones GUI por defecto y hacer unos trucos de magia para que la funci�n regular main() funcione sin problemas, pero para esto necesita que escriba END_OF_MAIN() justo tras su funci�n main(). Si no quiere hacer esto, puede inclu�r winalleg.h y escribir una funci�n WinMain(). Note que estos trucos de magia pueden tener conflictos con algunos programas que hagan llamadas directas al API Win32; para estos programas, es imprescindible la funci�n WinMain() y que los trucos de magia sean desactivados definiendo el s�mbolo de preprocesador ALLEGRO_NO_MAGIC_MAIN antes de inclu�r los ficheros de cabecera de Allegro.
Si quiere crear una aplicaci�n de consola con Allegro, debe definir el s�mbolo de preprocesador USE_CONSOLE antes de incluir los ficheros de cabecera de Allegro; esto indicar� a la librer�a que use caracter�sticas del modo consola y que desactive el procesado especial de la funci�n main() descrito arriba.
Cuando crea la ventana principal, Allegro busca en el ejecutable un recurso de icono nombrado "allegro_icon". Si est� presente, Allegro lo cargar� y usar� autom�ticamente como icono de aplicaci�n. En caso contrario, Allegro usar� el icono por defecto IDI_APPLICATION.
DirectX requiere que los bitmaps de v�deo y sistema est�n bloqueados en memoria (locked) antes de que pueda dibujar en ellos. Esto se har� autom�ticamente, pero podr� conseguir habitualmente una ejecuc�on m�s �ptima haci�ndolo usted mismo: mire la funci�n acquire_bitmap() para m�s detalles.
Debido a un gran descuido en el dise�o de DirectX, no hay manera de preservar los contenidos de la memoria de v�deo cuando el usuario cambia a otra ventana desde su programa. Necesita estar preparado para el hecho de que el contenido de su pantalla, y el contenido de cualquier bitmap en memoria de v�deo, puede ser destruido en cualquier momento. Puede usar la funci�n set_display_switch_callback() para arregl�rselas cuando ocurra esto.
En la plataforma Windows, los �nicos valores de retorno de desktop_color_depth() son 8, 16, 24 y 32. Esto significa que no puede diferenciar escritorios de 15 o 16 bits, dado que ambos se muestran como escritorios de 16 bits. Lea abajo las consecuencias que tiene esto para los drivers en ventana y modos overlay.
Drivers: GFX_*/Windows
La biblioteca para Windows soporta los siguientes par�metros de tarjeta
para la funci�n set_gfx_mode():
if (desktop_color_depth() == 16) { set_color_depth(16); if (set_gfx_mode(GFX_DIRECTX_WIN, 640, 480, 0, 0) != 0) { set_color_depth(15); if (set_gfx_mode(GFX_DIRECTX_WIN, 640, 480, 0, 0) != 0) { /* modo dibujado directo en 640x480 no soportado */ goto Error; } } /* ok, estamos en un modo de dibujado directo */ }
if (desktop_color_depth() == 16) { set_color_depth(16); if (set_gfx_mode(GFX_DIRECTX_OVL, 640, 480, 0, 0) != 0) { set_color_depth(15); if (set_gfx_mode(GFX_DIRECTX_OVL, 640, 480, 0, 0) != 0) { /* driver overlay en 640x480 no soportado */ goto Error; } } /* ok, estamos en modo overlay a 640x480 */ }
Relacionado con: set_gfx_mode.Drivers: DIGI_*/Windows
DIGI_AUTODETECT - Allegro elige un controlador de sonido digital. DIGI_NONE - sin sonido digital. DIGI_DIRECTX(n) - usa el dispositivo DirectSound #n (siendo 'n' mayor o igual que cero) con mezclado directo DIGI_DIRECTAMX(n) - usa el dispositivo DirectSound #n (siendo 'n' mayor o igual que cero) con el mezclador de Allegro DIGI_WAVOUTID(n) - alta (n=0) o baja (n=1) calidad del dispositivo WaveOut
Relacionado con: detect_digi_driver, install_sound, install_sound_input.Drivers: MIDI_*/Windows
MIDI_AUTODETECT - Allegro escoge un controlador de sonido MIDI. MIDI_NONE - sin sonido MIDI MIDI_WIN32MAPPER - usa el mapeador MIDI win32 MIDI_WIN32(n) - usa el dispositivo win32 #n (siendo 'n' mayor o igual que cero) MIDI_DIGMID - reproductor wavetable basado en samples
Las siguientes funciones proveen una interfaz espec�fica de la plataforma para integrar Allegro sin problemas con cualquier programa Win32 de prop�sito general. Para usar estas rutinas, debe incluir winalleg.h tras otros ficheros de cabecera de Allegro.
Relacionado con: detect_midi_driver, install_sound, install_sound_input.HWND win_get_window(void);
void win_set_window(HWND wnd);
Hace que Allegro use una ventana creada por el usuario. Esta funci�n debe
ser llamada *antes* de iniciar la librer�a con allegro_init() o
instalando el driver de sistema con autodetecci�n (SYSTEM_AUTODETECT). Le
permite enganchar Allegro a una ventana ya existente y evita que la
librer�a cr�e la suya, dej�ndole el control total de la ventana; en
particular, usted ser� responsable de manejar los eventos como siempre
(Allegro monitorizar� autom�ticamente algunos de ellos, pero no los
filtrar�). Puede usar cualquier componente de la librer�a (rat�n, teclado,
sonido, temporizaci�n, etc) excepto el subsistema gr�fico.
void win_set_wnd_create_proc(HWND (*proc)(WNDPROC));
Hace que Allegro use una funci�n definida por el usuario para crear su
ventana. Esta funci�n debe ser llamada *antes* de iniciar la librer�a
con allegro_init() o instalando el driver de sistema con autodetecci�n
(SYSTEM_AUTODETECT). Le permite personalizar la ventana de Allegro pero
s�lo en su creaci�n: a diferencia de win_set_window(), no tendr� control
sobre la ventana una vez sea creada (en particular, no ser� responsable
de procesar los eventos). A la funci�n registrada se le pasar� un
procedimiento de ventana (objeto WNDPROC) que debe hacer el procedimiento
de la nueva ventana y debe devolver el hadle a la nueva ventana. Puede
usar la librer�a sin restricciones de la forma habitual.
HDC win_get_dc(BITMAP *bmp);
Recupera el handle del dispositivo de contexto del v�deo DirectX o un
bitmap de sistema.
void win_release_dc(BITMAP *bmp, HDC dc);
Libera el handle del dispositivo de contexto del bitmap que fue
previamente recuperado por win_get_dc().
Estas rutinas GDI son algo muy espec�fico de la plataforma, para permitir dibujar mapas de bits en memoria de Allegro sobre un contexto de un dispositivo de Windows. Cuando usted quiera usarlas, necesitar� instalar el driver de sistema neutral (SYSTEM_NONE) si llama a install_allegro() o enganchar Allegro a una ventana externa con win_set_window() si llama a allegro_init().
Existen dos formas de dibujar sus mapas de bits de Allegro sobre la GDI de Windows. Cuando usted est� usando mapas de bits est�ticos (por ejemplo unos pocos dibujos cargados de un archivo de datos), usted puede convertirlos a DDB (bitmaps dependientes del dispositivo) con convert_bitmap_to_hbitmap() y luego usar simplemente el BitBlt() de Win32 para dibujarlos.
Cuando usted usa mapas de bits din�micos (por ejemplo elementos que reaccionan seg�n la entrada del usuario), es mejor usar las funciones set_pallette_to_hdc y blit_to_hdc(), que funcionan con DIB (mapas de bits independientes del dispositivo).
Existen adem�s funciones para hacer blit desde un contexto de dispositivo en un BITMAP de Allegro, as� que usted puede realizar cosas como captura la pantalla.
Todas las funciones de dibujo y conversi�n usan la paleta actual como una tabla de conversi�n de colores. Usted puede alterar la paleta actual con las funciones set_palette_to_hdc() o select_palette(). Advertencia: cuando la paleta de colores del sistema es cambiada expl�citamente, (por ejemplo, por otra aplicaci�n) �la paleta actual de Allegro no es actualizada con ello!
Para usar estas rutinas debe incluir winalleg.h tras los dem�s ficheros de cabecera de Allegro.
void set_gdi_color_format(void);
Le dice a Allegro que use el mapa de colores del GDI para im�genes de
color verdadero. Esto es opcional, pero har� que las conversiones
funcionen m�s r�pido. Si usted va a llamar a �sta funci�n, deber�a hacerlo
despu�s de iniciar Allegro y �ntes de crear gr�ficos.
void set_palette_to_hdc(HDC dc, PALETTE pal);
Selecciona y realiza una paleta de Allegro sobre el contexto de
dispositivo espec�fico.
HPALETTE convert_palette_to_hpalette(PALETTE pal);
Convierte una paleta de Allegro a una paleta de Windows y devuelve su
manejador. Usted deber�a llamar a DeleteObject() cuando no la necesite
m�s.
Relacionado con: convert_hpalette_to_palette.void convert_hpalette_to_palette(HPALETTE hpal, PALETTE pal);
Relacionado con: convert_palette_to_hpalette.HBITMAP convert_bitmap_to_hbitmap(BITMAP *bitmap);
Relacionado con: convert_hbitmap_to_bitmap.BITMAP *convert_hbitmap_to_bitmap(HBITMAP bitmap);
Relacionado con: convert_bitmap_to_hbitmap.void draw_to_hdc(HDC dc, BITMAP *bitmap, int x, int y);
Relacionado con: blit_to_hdc, stretch_blit_to_hdc, draw_sprite.void blit_to_hdc(BITMAP *bitmap, HDC dc, int sx, sy, dx, dy, w, h);
Relacionado con: draw_to_hdc, stretch_blit_to_hdc, blit_from_hdc, blit.void stretch_blit_to_hdc(BITMAP *bitmap, HDC dc, int sx, sy, sw, sh, int dx, dy, dw, dh);
Relacionado con: draw_to_hdc, blit_to_hdc, stretch_blit_from_hdc, stretch_blit.void blit_from_hdc(HDC hdc, BITMAP *bitmap, int sx, sy, dx, dy, w, h);
Relacionado con: stretch_blit_from_hdc, blit_to_hdc, blit.void stretch_blit_from_hdc(HDC hcd, BITMAP *bitmap, int sx, sy, sw, sh, int dx, dy, dw, dh);
Relacionado con: blit_from_hdc, stretch_blit_to_hdc, stretch_blit.