/ / ¿Tienes que registrar un cuadro de diálogo? - c ++, winapi

¿Tienes que registrar un cuadro de diálogo? - c ++, winapi

Por lo tanto, 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 regular (abrevié algo 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 hay un beneficio al registrar la clase de ventana y luego crear el cuadro de diálogo (si es posible).

Respuestas

2 para la respuesta № 1

No es necesario registrar un cuadro de diálogo.

Los cuadros de diálogo están predefinidos para (como usted anotó)no hay referencia a una clase de ventana cuando creas 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 crear una subclase del cuadro de diálogo, que es un método por el cual reemplaza el procedimiento de la ventana de diálogo con el suyo. Cuando se llama a su procedimiento, modifica el comportamiento de la ventana de diálogo; entonces puede o no puede llamar al procedimiento de ventana original dependiendo de lo que está tratando de hacer.


1 para la respuesta № 2

Ha pasado un tiempo desde que hice esto, pero IIRC,el primer caso es para crear un diálogo dinámicamente, desde una plantilla en memoria. El segundo ejemplo es para el caso mucho más común de crear un diálogo usando 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 con la agrupación de recursos con DLL.

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


0 para la respuesta № 3

Esto solo está relacionado tangencialmente con elpregunta, pero si eres nuevo en la programación de Windows, ¿por qué usas Win32? A menos que haya un montón de código de gama baja (que debería estar separado de la GUI de todos modos), probablemente tenga más sentido usar .NET, que también debería causar mucho menos daño a la cabeza.