Поиск…


Синтаксис

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

Сообщение WM_CREATE отправляется в вашу оконную процедуру во время вызова CreateWindowEx окна. Аргумент lp содержит указатель на CREATESTRUCT содержащий аргументы, переданные CreateWindowEx . Если приложение возвращает 0 из WM_CREATE, создается окно. Если приложение возвращает -1, создание отменяется.

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

Это сообщение отправляется в вашу оконную процедуру при уничтожении окна. Он отправляется после удаления окна с экрана. Большинство приложений освобождают любые ресурсы, такие как память или дескрипторы, полученные в WM_CREATE. Если вы обрабатываете это сообщение, верните 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

Отправляется, когда нажата кнопка закрытия приложения. Не путайте это с WM_DESTROY который отправляется, когда окно будет уничтожено. Основное различие заключается в том, что закрытие может быть отменено в WM_CLOSE (подумайте о том, что Microsoft Word просит сохранить ваши изменения), в отличие от этого уничтожения, когда окно уже закрыто (подумайте о освобождении памяти 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

Это сообщение отправляется в оконную процедуру окна после изменения размера. Наиболее распространенной причиной для обработки этого сообщения является настройка положения любых дочерних окон. Например, в «Блокноте» при изменении размера окна дочернее окно (редактирование) также изменяется. Верните 0, если вы обрабатываете это сообщение.

аргументация Значение
в.ч. Одна из констант размера окна .
Л.П. LOWORD (lp) - это новая ширина клиентской области
HIWORD (lp) - это новая высота клиентской области.
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

Отправляется в оконную процедуру, когда:

  • пользователь выбирает элемент из меню
  • элемент управления отправляет уведомление в родительское окно
  • переводится нажатие клавиши ускорителя
Источник сообщения HIWORD (в.ч.) LOWORD (в.ч.) Л.П.
Меню 0 Идентификатор меню (IDM_ *) 0
ускоритель 1 Accel ID (IDM_ *) 0
контроль код уведомления Контрольный идентификатор HWND окна управления

Например, в «Блокноте», когда пользователь нажимает «Файл-> Открыть», отображается диалоговое окно, позволяющее пользователю открыть файл. Элементы меню обрабатываются в сообщении WM_CREATE окна процедуры следующим образом:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow