WM_NCCREATE
на самом деле very first message your window will receive, который поступит до WM_CREATE
. Это связано с созданием неклиентской области (например, строка заголовка, системное меню и т. Д.), Следовательно, префикс NC
.
WM_GETMINMAXINFO
выслан before the window size/position is changed и может прибыть до WM_CREATE
(см. Ниже).
Сообщение WM_CREATE
отправлено до того, как возвращается CreateWindow()
, поэтому вы можете гарантировать, что инициализация каждого окна была выполнена этой точкой. Ваше окно proc получит WM_CREATE
после создания окна, но перед тем, как окно станет видимым (WM_SHOWWINDOW
).
Фактически, в документации MSDN есть интересная несогласованность - сообщения о создании, похоже, зависят от того, вы вызываете ли вы CreateWindow()
или CreateWindowEx()
, однако он не указывает, что сообщения обязательно перечислены в порядке отправки.
CreateWindow()
: WM_CREATE
, WM_GETMINMAXINFO
и WM_NCCREATE
CreateWindowEx()
: WM_NCCREATE
, WM_NCCALCSIZE
и WM_CREATE
Я сильно подозреваю, что порядок сообщения описано в CreateWindow()
должны иметь WM_NCCREATE
первый, и регулярный WM_CREATE
последний , что согласуется с документацией уведомления и ссылкой CreateWindowEx()
(а также в соответствии с тем, что вы описать).
Раймонд Чен также имеет некоторые интересные information on window creation/destruction.
Это просто показывает, даже простые вещи могут стать сложнее, чем больше вы смотрите на них.
Этот вопрос не имеет смысла. Как вы отметили, первые сообщения не всегда одинаковы. В зависимости от того, создано ли окно видимым или нет, в WindowProoc может появиться целое количество сообщений, прежде чем CreateWindow вернется. какие сообщения и их порядок изменились между версиями окон. Все, что вам гарантировано, заключается в том, что WM_CREATE - и теперь WM_NCREATE - будет отправлен до возврата CreateWindow (Предполагая успешное создание окна). –
Крис, почему комментарий вместо ответа? Кроме того, разве это не имеет никакого смысла? Я уверен, что 90% разработчиков Win32 поклялись, что WM_CREATE является первым полученным msg (и я был одним из них до 30 секунд назад). В конце концов, это то, что мы все читаем в наших учебниках. –
Согласен Серж Вотье, я тоже думал об этом, пока не сделал небольшой тест. Это порядок всех моих сообщений WM до WM_CREATE: WM_GETMINMAXINFO, WM_NCCREATE, WM_NCCALCSIZE, WM_CREATE. – Kit10