Wiki
UnaVentanaDondePintar
Una Ventana Donde Pintar
Articulo escrito por iq
Alguna vez me han preguntado por que no uso SDL para hacer intros basados en pixels. Y siempre contesto que me es mas sencillo usar StretchDIBits() que aprender a usar una libreria... El siguiente ejemplo abre una ventana a pantalla completa, llama al codigo de la intro en si misma para ser inicializada y para que pinte y vuelca el frame a la ventana mientras no se pulse la tecla escape (ideal para intros de 4k).
#define XRES 800
#define YRES 600
#include <windows.h>
static BITMAPINFO bmi = { { sizeof(BITMAPINFOHEADER), XRES, -YRES, 1, 32, BI_RGB,
0, 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
static DEVMODE screenSettings = { {0}, 0,0,156,0,0x001c0000, {0}, 0,0,0,0,0, {0},
0,32,XRES,YRES, {0}, 0, 0,0,0,0,0,0, 0,0 };
static long buffer[XRES*YRES];
void intro_init( int xres, int yres );
void intro_render( long *buffer );
void entrypoint( void )
{
if( ChangeDisplaySettings(&screenSettings,CDS_FULLSCREEN) ) return;
ShowCursor( 0 );
HDC hDC = GetDC( CreateWindowEx( WS_EX_TOPMOST, "static", 0,
WS_VISIBLE|WS_POPUP|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, 0, 0,
XRES, YRES, 0, 0, 0, 0 ) );
intro_init( XRES, YRES );
do
{
intro_render( buffer );
StretchDIBits(hDC,0,0,XRES,YRES,0,0,XRES,YRES,buffer,&bmi,DIB_RGB_COLORS,SRCCOPY);
}while( !GetAsyncKeyState(VK_ESCAPE));
}
