Ricerca…


Sintassi

  • #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

Un messaggio WM_CREATE viene inviato alla procedura della finestra CreateWindowEx chiamata CreateWindowEx della finestra. L'argomento lp contiene un puntatore a un CREATESTRUCT che contiene gli argomenti passati a CreateWindowEx . Se un'applicazione restituisce 0 da WM_CREATE, viene creata la finestra. Se un'applicazione restituisce -1, la creazione viene annullata.

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

Questo messaggio viene inviato alla procedura della finestra quando una finestra viene distrutta. Viene inviato dopo che la finestra è stata rimossa dallo schermo. La maggior parte delle applicazioni libera risorse, come memoria o maniglie, ottenute in WM_CREATE. Se gestisci questo messaggio, restituisci 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

Inviato quando si fa clic sul pulsante di chiusura di un'applicazione. Non confondere questo con WM_DESTROY che viene inviato quando una finestra verrà distrutta. La differenza principale risiede nel fatto che la chiusura può essere annullata in WM_CLOSE (si pensi a Microsoft Word che richiede di salvare le modifiche), invece che distruggere è quando la finestra è già stata chiusa (si pensi a Microsoft Word che libera memoria).

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

Questo messaggio viene inviato alla finestra della finestra dopo che la sua dimensione è cambiata. Il motivo più comune per la gestione di questo messaggio è la regolazione della posizione di qualsiasi finestra secondaria. Ad esempio, nel Blocco note, quando la finestra viene ridimensionata, viene ridimensionata anche la finestra secondaria (controllo di modifica). Restituisce 0 se gestisci questo messaggio.

Discussione Valore
wp Una delle costanti di dimensionamento della finestra .
lp LOWORD (lp) è la nuova larghezza dell'area client
HIWORD (lp) è la nuova altezza dell'area client.
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

Inviato a una finestra di dialogo quando:

  • l'utente seleziona una voce da un menu
  • un controllo invia una notifica alla sua finestra genitore
  • un tasto di scelta rapida viene tradotto
Fonte del messaggio HIWORD (wp) LOWORD (wp) lp
Menu 0 ID menu (IDM_ *) 0
Acceleratore 1 ID Accel (IDM_ *) 0
Controllo codice di notifica ID di controllo HWND della finestra di controllo

Ad esempio, nel Blocco note, quando un utente fa clic su "File-> Apri" viene visualizzata una finestra di dialogo per consentire all'utente di aprire un file. Le voci di menu vengono elaborate nel messaggio WM_CREATE della procedura della finestra in questo modo:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow