Pregunta

Entonces, soy un principiante total en cualquier tipo de Windows programación relacionada.He estado jugando con el Windows API y encontré un par de ejemplos sobre cómo inicializar, crear ventanas y demás.

Un ejemplo crea una ventana normal (abrevié parte del código):

int WINAPI WinMain( [...] )
{

    [...]

    // Windows Class setup
    wndClass.cbSize = sizeof( wndClass );
    wndClass.style  = CS_HREDRAW | CS_VREDRAW;
    [...]    

    // Register class
    RegisterClassEx( &wndClass );

    // Create window
    hWnd = CreateWindow( szAppName, "Win32 App",
                         WS_OVERLAPPEDWINDOW,
                         0, 0, 512, 384,
                         NULL, NULL, hInstance, NULL );
    [...]
}

El segundo ejemplo crea un cuadro de diálogo (sin abreviaturas excepto los argumentos de WinMain):

int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}

El segundo ejemplo no contiene ninguna llamada a la función de registro.Simplemente crea el DialogBox con su proceso DialogProc adjunto.

Esto funciona bien, pero me pregunto si existe algún beneficio al registrar la clase de ventana y luego crear el cuadro de diálogo (si es que esto es posible).

¿Fue útil?

Solución

No es necesario registrar un cuadro de diálogo.

Los cuadros de diálogo están predefinidos, por lo que (como notó) no hay referencia a una clase de ventana cuando crea un diálogo.Si desea tener más control sobre un cuadro de diálogo (como el que obtiene cuando crea su propia clase de ventana), debe subclasificar el cuadro de diálogo, que es un método mediante el cual reemplaza el procedimiento de la ventana del cuadro de diálogo con el suyo propio.Cuando se llama a su procedimiento, modifica el comportamiento de la ventana de diálogo;entonces es posible que llame o no al procedimiento de ventana original dependiendo de lo que esté intentando hacer.

Otros consejos

Ha pasado un tiempo desde que hice esto, pero IIRC, el primer caso es para crear un diálogo dinámicamente, a partir de una plantilla en memoria.El segundo ejemplo es para el caso mucho más común de crear un diálogo utilizando un recurso.El diálogo dinámico en Win32 era bastante complejo, pero le permitía crear una verdadera interfaz basada en datos y evitar problemas al agrupar recursos con archivos DLL.

En cuanto a por qué usar Win32, si necesita una aplicación de Windows y no quiere depender de MFC o del tiempo de ejecución de .NET, entonces eso es lo que debe usar.

Esto sólo está relacionado tangencialmente con la pregunta, pero si es nuevo en la programación de Windows, ¿por qué utiliza Win32?A menos que haya una gran cantidad de código de bajo nivel (que de todos modos debería estar separado de la GUI), probablemente tenga más sentido usar .NET, que también debería causar muchas menos lesiones en la cabeza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top