Win32 API
Mensajes de ventana
Buscar..
Sintaxis
- #include <windows.h>
- BOOL WINAPI DestroyWindow (HWND hwnd);
- VOID WINAPI PostQuitMessage (int exitcode);
- BOOL WINAPI MoveWindow (HWND hwnd, int x, int y, int cx, int cy, BOOL bRepaint);
WM_CREATE
Se envía un mensaje WM_CREATE a su procedimiento de ventana durante la llamada a CreateWindowEx
la ventana. El argumento lp
contiene un puntero a un CREATESTRUCT
que contiene los argumentos pasados a CreateWindowEx
. Si una aplicación devuelve 0 de WM_CREATE, se crea la ventana. Si una aplicación devuelve -1, la creación se cancela.
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_CREATE:
CREATESTRUCT *cs = (CREATESTRUCT *) lp;
if (MessageBox(hwnd,
"Do you want to continue creating the window?", "", MB_YESNO)
== IDYES) {
/* create window controls */
return 0;
}
/* cancel creation */
return -1;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_DESTROY
Este mensaje se envía a su procedimiento de ventana cuando se destruye una ventana. Se envía una vez que la ventana se elimina de la pantalla. La mayoría de las aplicaciones liberan todos los recursos, como la memoria o los controladores, obtenidos en WM_CREATE. Si maneja este mensaje, devuelva 0.
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
static char *text;
switch (wm) {
case WM_CREATE:
text = malloc(256);
/* use the allocated memory */
return 0;
case WM_CLOSE:
switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
case IDYES:
savedoc();
/* fall through */
case IDNO:
DestroyWindow(hwnd);
break;
}
return 0;
case WM_DESTROY:
/* free the memory */
free(text);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_CLOSE
Se envía cuando se hace clic en el botón de cierre de una aplicación. No confunda esto con WM_DESTROY
que se envía cuando se destruye una ventana. La principal diferencia radica en el hecho de que el cierre se puede cancelar en WM_CLOSE (piense en que Microsoft Word le pide que guarde sus cambios), en lugar de destruir cuando la ventana ya se ha cerrado (piense en la memoria liberadora de Microsoft Word).
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
static char *text;
switch (wm) {
case WM_CREATE:
text = malloc(256);
/* use the allocated memory */
return 0;
case WM_CLOSE:
switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
case IDYES:
savedoc();
/* fall through */
case IDNO:
DestroyWindow(hwnd);
break;
}
return 0;
case WM_DESTROY:
/* free the memory */
free(text);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_SIZE
Este mensaje se envía al procedimiento de la ventana de la ventana después de que su tamaño haya cambiado. La razón más común para manejar este mensaje es ajustar la posición de cualquier ventana secundaria. Por ejemplo, en el Bloc de notas, cuando se cambia el tamaño de la ventana, también se cambia el tamaño de la ventana secundaria (control de edición). Devuelve 0 si manejas este mensaje.
Argumento | Valor |
---|---|
wp | Una de las constantes de tamaño de ventana . |
lp | LOWORD (lp) es el nuevo ancho del área del cliente HIWORD (lp) es la nueva altura del área del cliente. |
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_SIZE:
/* hwndEdit is the handle of the edit control window */
MoveWindow(hwndEdit, 0, 0, LOWORD(lp), HIWORD(lp), TRUE);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_COMMAND
Enviado a un procedimiento de ventana cuando:
- El usuario selecciona un elemento de un menú.
- un control envía una notificación a su ventana principal
- una pulsación del acelerador se traduce
Fuente del mensaje | HIWORD (wp) | LOWORD (wp) | lp |
---|---|---|---|
Menú | 0 | ID de menú (IDM_ *) | 0 |
Acelerador | 1 | ID de aceleración (IDM_ *) | 0 |
Controlar | código de notificación | ID de control | HWND de ventana de control |
Por ejemplo, en el Bloc de notas, cuando un usuario hace clic en "Archivo-> Abrir", se muestra un cuadro de diálogo para permitirle al usuario abrir un archivo. Los ítems del menú se procesan en el mensaje WM_CREATE del procedimiento de la ventana de esta manera:
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_COMMAND:
switch (LOWORD(wp) {
case ID_FILE_OPEN:
/* show file open dialog */
break;
case ID_FILE_NEW:
/* create new instance */
break;
}
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}