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));
}

Esta página es el resultado del esfuerzo de los siguientes autores. El número entre paréntesis corresponde a la cantidad de versiones con las que cada usuario ha contribuido:

iq (3), trace (1)