Цель сообщения WM_CREATE? - PullRequest
       12

Цель сообщения WM_CREATE?

0 голосов
/ 21 апреля 2020

Какой смысл иметь сообщение WM_CREATE, когда вы можете создать windows без него.

Вызов void CreateWindowA вне WM_CREATE работает, так в чем же дело?

Ответы [ 3 ]

5 голосов
/ 21 апреля 2020

WM_CREATE сообщение получено оконной процедурой, когда окно создано и еще не показано. Вы можете подготовить начальное состояние. Например, вы можете создать элементы управления (дочерний windows), установить значения по умолчанию для элементов управления и т. Д. c. Если что-то не так, вы можете отменить создание окна, и оно не будет отображаться. Другими словами, в WM_CREATE вы можете добавить пользовательское расширение к CreateWindow API.

1 голос
/ 21 апреля 2020

Существует множество причин, по которым приложению может потребоваться / необходимо перехватить сообщение WM_CREATE. Например, вы можете проверить наличие определенного условия и предотвратить фактическое создание, если это условие неверно: вы можете сделать это, вернув -1 из WndProc, который обрабатывает сообщение ( см. В документации ):

Если приложение обрабатывает это сообщение, оно должно вернуть ноль, чтобы продолжить создание окна. Если приложение возвращает -1, окно уничтожается, а функция CreateWindowEx или CreateWindow возвращает дескриптор NULL .

0 голосов
/ 22 апреля 2020

Какой смысл иметь сообщение WM_CREATE, когда вы можете создать windows без него.

Если вы явно не обрабатываете сообщение WM_CREATE , он фактически обрабатывается системой через DefWindowProc(hwnd, uMsg, wParam, lParam); неявно. Таким образом, вы видите окно видимым.

WM_CREATE сообщение отправляется до возврата функции CreateWindowEx или CreateWindow, что дает вам возможность вмешаться в результат упомянутой функции. Вы можете разрешить (вернуть ноль для продолжения создания окна) или запретить (возвращает –1, окно уничтожено) окно, которое будет видно, и то, как оно будет выглядеть.

Сообщения WM_NCCREATE и WM_CREATE отправляются до того, как окно становится видимым. Это делает их хорошим местом для инициализации вашего пользовательского интерфейса - например, для определения первоначальной компоновки окна .

См. " Управление состоянием приложения"," WM_CREATE message".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...