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);
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow