WM_NCCREATE
на самом деле самое первое сообщение, которое ваше окно получит , которое поступит до WM_CREATE
. Это связано с созданием не клиентской области (например, строки заголовка, системного меню и т. Д.), Следовательно, префикс NC
.
WM_GETMINMAXINFO
отправляется до изменения размера / позиции окна и может прибыть до WM_CREATE
(подробнее см. Ниже).
Сообщение WM_CREATE
отправляется до возврата CreateWindow()
, поэтому вы можете гарантировать, что инициализация для каждого окна была выполнена этой точкой. Ваша оконная процедура получит 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()
(а также с тем, что вы описать).
Раймонд Чен также имеет некоторую интересную информацию о создании / уничтожении окон .
Это просто говорит о том, что даже кажущиеся простыми вещи могут усложняться, чем больше на них смотришь.