Suche…


Syntax

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

Während des CreateWindowEx Aufrufs des Fensters wird eine WM_CREATE-Nachricht an Ihre Fensterprozedur CreateWindowEx . Das Argument lp enthält einen Zeiger auf ein CREATESTRUCT das die an CreateWindowEx Argumente enthält. Wenn eine Anwendung von WM_CREATE 0 zurückgibt, wird das Fenster erstellt. Wenn eine Anwendung -1 zurückgibt, wird die Erstellung abgebrochen.

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

Diese Nachricht wird an Ihre Fensterprozedur gesendet, wenn ein Fenster zerstört wird. Es wird gesendet, nachdem das Fenster vom Bildschirm entfernt wurde. In den meisten Anwendungen werden alle in WM_CREATE enthaltenen Ressourcen wie Speicher oder Handles freigegeben. Wenn Sie mit dieser Nachricht umgehen, geben Sie 0 zurück.

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

Wird gesendet, wenn auf die Schaltfläche Schließen einer Anwendung geklickt wird. Verwechseln Sie dies nicht mit WM_DESTROY das gesendet wird, wenn ein Fenster zerstört wird. Der Hauptunterschied liegt in der Tatsache, dass das Schließen in WM_CLOSE möglicherweise abgebrochen wird (denken Sie an Microsoft Word, dass Sie Ihre Änderungen speichern müssen), statt zu zerstören, wenn das Fenster bereits geschlossen wurde.

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

Diese Nachricht wird an die Fensterprozedur gesendet, nachdem sich ihre Größe geändert hat. Der häufigste Grund für die Behandlung dieser Nachricht besteht darin, die Position aller untergeordneten Fenster anzupassen. Wenn Sie beispielsweise in Notepad die Größe des Fensters ändern, wird auch die Größe des untergeordneten Fensters (Bearbeitungssteuerelement) geändert. Geben Sie 0 zurück, wenn Sie diese Nachricht bearbeiten.

Streit Wert
wp Eine der Fenstergrößenkonstanten .
lp LOWORD (lp) ist die neue Breite des Kundenbereichs
HIWORD (lp) ist die neue Höhe des Kundenbereichs.
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

Wird an ein Fenster gesendet, wenn:

  • Der Benutzer wählt ein Element aus einem Menü aus
  • Ein Steuerelement sendet eine Benachrichtigung an sein übergeordnetes Fenster
  • Ein Gaspedal-Tastendruck wird übersetzt
Nachrichtenquelle HIWORD (wp) LOWORD (wp) lp
Speisekarte 0 Menü-ID (IDM_ *) 0
Beschleuniger 1 Accel-ID (IDM_ *) 0
Steuerung Benachrichtigungscode Steuer-ID HWND des Kontrollfensters

Wenn ein Benutzer beispielsweise im Editor auf "Datei-> Öffnen" klickt, wird ein Dialogfeld angezeigt, in dem der Benutzer eine Datei öffnen kann. Menüelemente werden in der WM_CREATE-Nachricht der Fensterprozedur wie folgt verarbeitet:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow