Szukaj…


Składnia

  • #include <windows.h>
  • BOOL WINAPI DestroyWindow (HWND hwnd);
  • VOID WINAPI PostQuitMessage (int kod wyjścia);
  • BOOL WINAPI MoveWindow (HWND hwnd, int x, int y, int cx, int cy, BOOL bRepaint);

WM_CREATE

Komunikat WM_CREATE jest wysyłany do procedury okna podczas wywołania okna CreateWindowEx . Argument lp zawiera wskaźnik do CREATESTRUCT który zawiera argumenty przekazane do CreateWindowEx . Jeśli aplikacja zwróci 0 z WM_CREATE, okno zostanie utworzone. Jeśli aplikacja zwróci -1, tworzenie zostanie anulowane.

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

Ta wiadomość jest wysyłana do procedury okna, gdy okno jest niszczone. Jest wysyłany po usunięciu okna z ekranu. Większość aplikacji zwalnia wszelkie zasoby, takie jak pamięć lub uchwyty, uzyskane w WM_CREATE. Jeśli poradzisz sobie z tą wiadomością, zwróć 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

Wysyłane po kliknięciu przycisku zamykania aplikacji. Nie myl tego z WM_DESTROY który jest wysyłany, gdy okno zostanie zniszczone. Główna różnica polega na tym, że zamykanie może być anulowane w WM_CLOSE (pomyśl o Microsoft Word proszącym o zapisanie twoich zmian), w przeciwieństwie do tego, że niszczenie następuje, gdy okno zostało już zamknięte (pomyśl o zwolnieniu pamięci przez 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

Ta wiadomość jest wysyłana do procedury okna po zmianie jego rozmiaru. Najczęstszym powodem obsługi tego komunikatu jest dostosowanie położenia dowolnego okna potomnego. Na przykład w Notatniku po zmianie rozmiaru okna zmienia się również okno potomne (kontrola edycji). Zwróć 0, jeśli obsłużysz tę wiadomość.

Argument Wartość
wp Jedna ze stałych zmiany rozmiaru okna .
lp LOWORD (lp) to nowa szerokość obszaru roboczego
HIWORD (lp) to nowa wysokość obszaru roboczego.
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

Wysłano do procedury okna, gdy:

  • użytkownik wybiera element z menu
  • formant wysyła powiadomienie do swojego okna nadrzędnego
  • naciśnięcie klawisza skrótu jest tłumaczone
Źródło wiadomości HIWORD (wp) LOWORD (wp) lp
Menu 0 Identyfikator menu (IDM_ *) 0
Akcelerator 1 Accel ID (IDM_ *) 0
Kontrola kod powiadomienia Identyfikator kontroli HWND okna kontrolnego

Na przykład w Notatniku, gdy użytkownik kliknie „Plik-> Otwórz”, pojawi się okno dialogowe umożliwiające użytkownikowi otwarcie pliku. Pozycje menu są przetwarzane w komunikacie WM_CREATE procedury okna w następujący sposób:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow