Win32 API
Fönstermeddelanden
Sök…
Syntax
- #include <windows.h>
- BOOL WINAPI DestroyWindow (HWND hwnd);
- VOID WINAPI PostQuitMessage (int exit code);
- BOOL WINAPI MoveWindow (HWND hwnd, int x, int y, int cx, int cy, BOOL bRepaint);
WM_CREATE
Ett WM_CREATE-meddelande skickas till din fönsterprocedur under fönstret CreateWindowEx
samtal. lp
argumentet innehåller en pekare till en CREATESTRUCT
som innehåller argumenten som skickas till CreateWindowEx
. Om en applikation returnerar 0 från WM_CREATE skapas fönstret. Om en applikation returnerar -1 avbryts skapelsen.
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
Det här meddelandet skickas till din fönsterprocedur när ett fönster förstörs. Det skickas efter att fönstret har tagits bort från skärmen. De flesta applikationer frigör resurser, som minne eller handtag, erhållna i WM_CREATE. Om du hanterar det här meddelandet, returnera 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
Skickas när en applikations stängningsknapp klickas. Förväxla inte detta med WM_DESTROY
som skickas när ett fönster kommer att förstöras. Den största skillnaden ligger i det faktum att stängning kan avbrytas i WM_CLOSE (tänk på Microsoft Word som ber om att spara dina ändringar), jämfört med att förstörande är när fönstret redan har stängts (tänk på Microsoft Word-frigörande minne).
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
Det här meddelandet skickas till fönstret när fönstret har ändrats. Det vanligaste skälet för att hantera det här meddelandet är att justera positionen för alla fönster för barn. Till exempel, i Notepad, när fönstret ändras i storlek, ändras även storleken på barnfönstret (redigeringskontroll). Returnera 0 om du hanterar det här meddelandet.
Argument | Värde |
---|---|
wp | En av fönsterstorlekskonstanterna . |
lp | LOWORD (lp) är den nya bredden på klientområdet HIWORD (lp) är den nya höjden på klientområdet. |
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
Skickas till en fönsterprocedur när:
- användaren väljer ett objekt från en meny
- en kontroll skickar ett meddelande till dess överordnade fönster
- ett accelerator tangenttryck översätts
Meddelandekälla | HIWORD (wp) | LoWord (wp) | lp |
---|---|---|---|
Meny | 0 | Meny-ID (IDM_ *) | 0 |
Accelerator | 1 | Accel ID (IDM_ *) | 0 |
Kontrollera | anmälningskod | Kontroll-ID | HWND för kontrollfönstret |
Till exempel, i Notepad, när en användare klickar på "File-> Open", visas en dialogruta för att låta användaren öppna en fil. Menyalternativ behandlas i fönsterprocedurens WM_CREATE-meddelande så här:
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);
}