Recherche…


Syntaxe

  • #include <windows.h>
  • BOOL WINAPI DestroyWindow (HWND hwnd);
  • VOID WINAPI PostQuitMessage (int code de sortie);
  • BOOL WINAPI MoveWindow (HWND hwnd, int x, int y, int cx, int cy, BOOL bRepaint);

WM_CREATE

Un message WM_CREATE est envoyé à votre procédure de fenêtre lors de l'appel CreateWindowEx la fenêtre. L'argument lp contient un pointeur sur un CREATESTRUCT qui contient les arguments transmis à CreateWindowEx . Si une application renvoie 0 à partir de WM_CREATE, la fenêtre est créée. Si une application renvoie -1, la création est annulée.

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

Ce message est envoyé à votre procédure de fenêtre lorsqu'une fenêtre est détruite. Il est envoyé après la suppression de la fenêtre de l'écran. La plupart des applications libèrent des ressources, telles que la mémoire ou les descripteurs, obtenues dans WM_CREATE. Si vous gérez ce message, retournez 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

Envoyé lorsque l'utilisateur clique sur le bouton de fermeture d'une application. Ne confondez pas ceci avec WM_DESTROY qui est envoyé quand une fenêtre sera détruite. La principale différence réside dans le fait que la fermeture peut être annulée dans WM_CLOSE (pensez à Microsoft Word pour enregistrer vos modifications), alors que cette destruction se produit lorsque la fenêtre a déjà été fermée (pensez à libérer de la mémoire 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

Ce message est envoyé à la procédure de fenêtre de la fenêtre après modification de sa taille. La raison la plus courante pour gérer ce message est de régler la position de toutes les fenêtres enfants. Par exemple, dans le Bloc-notes, lorsque la fenêtre est redimensionnée, la fenêtre enfant (contrôle de saisie) est également redimensionnée. Renvoie 0 si vous gérez ce message.

Argument Valeur
wp Une des constantes de dimensionnement de la fenêtre .
lp LOWORD (lp) est la nouvelle largeur de la zone client
HIWORD (lp) est la nouvelle hauteur de la zone 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

Envoyé à une procédure de fenêtre lorsque:

  • l'utilisateur sélectionne un élément dans un menu
  • un contrôle envoie une notification à sa fenêtre parente
  • une frappe sur l'accélérateur est traduite
Source du message HIWORD (wp) LOWORD (wp) lp
Menu 0 ID du menu (IDM_ *) 0
Accélérateur 1 Accel ID (IDM_ *) 0
Contrôle code de notification Identifiant de contrôle HWND de la fenêtre de contrôle

Par exemple, dans le Bloc-notes, lorsqu'un utilisateur clique sur "Fichier-> Ouvrir", une boîte de dialogue s'affiche pour permettre à l'utilisateur d'ouvrir un fichier. Les éléments de menu sont traités dans le message WM_CREATE de la procédure de fenêtre comme ceci:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow