Win32 API
Window berichten
Zoeken…
Syntaxis
- # 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
Er wordt een WM_CREATE-bericht verzonden naar uw vensterprocedure tijdens de CreateWindowEx
aanroep van het venster. Het argument lp
bevat een pointer naar een CREATESTRUCT
die de argumenten bevat die zijn doorgegeven aan CreateWindowEx
. Als een toepassing 0 retourneert van WM_CREATE, wordt het venster gemaakt. Als een toepassing -1 retourneert, wordt het maken geannuleerd.
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
Dit bericht wordt naar uw vensterprocedure verzonden wanneer een venster wordt vernietigd. Het wordt verzonden nadat het venster van het scherm is verwijderd. De meeste applicaties bevrijden alle bronnen, zoals geheugen of grepen, verkregen in WM_CREATE. Retourneer 0 als u dit bericht verwerkt.
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
Wordt verzonden wanneer op de knop Sluiten van een toepassing wordt geklikt. Verwar dit niet met WM_DESTROY
dat wordt verzonden wanneer een venster wordt vernietigd. Het belangrijkste verschil ligt in het feit dat het sluiten kan worden geannuleerd in WM_CLOSE (denk aan Microsoft Word die vraagt om uw wijzigingen op te slaan), versus dat vernietigen is wanneer het venster al is gesloten (denk aan Microsoft Word die geheugen vrijmaakt).
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
Dit bericht wordt verzonden naar de vensterprocedure van het venster nadat de grootte is gewijzigd. De meest voorkomende reden voor het verwerken van dit bericht is het aanpassen van de positie van onderliggende vensters. In Kladblok wordt bijvoorbeeld het formaat van het onderliggende venster (bewerkingsbesturing) gewijzigd wanneer het formaat van het venster wordt gewijzigd. Retourneer 0 als u dit bericht verwerkt.
Argument | Waarde |
---|---|
wp | Een van de vensterconstanten . |
lp | LOWORD (lp) is de nieuwe breedte van het clientgebied HIWORD (lp) is de nieuwe hoogte van het clientgebied. |
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
Verzonden naar een vensterprocedure wanneer:
- de gebruiker selecteert een item uit een menu
- een besturingselement verzendt een melding naar het bovenliggende venster
- een sneltoets wordt vertaald
Bron bericht | HIWORD (wp) | LOWORD (wp) | lp |
---|---|---|---|
Menu | 0 | Menu-ID (IDM_ *) | 0 |
Versneller | 1 | Accel ID (IDM_ *) | 0 |
Controle | meldingscode | Controle ID | HWND van controlevenster |
Wanneer in Kladblok bijvoorbeeld een gebruiker op "Bestand-> Openen" klikt, wordt een dialoogvenster weergegeven waarin de gebruiker een bestand kan openen. Menu-items worden verwerkt in het WM_CREATE-bericht van de vensterprocedure als volgt:
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);
}