WM_NCCREATE
es en realidad el very first message your window will receive, que llegará antes de WM_CREATE
. Está relacionado con la creación del área no cliente (por ejemplo, barra de título, menú del sistema, etc.), de ahí el prefijo NC
.
WM_GETMINMAXINFO
se envía before the window size/position is changed, y puede llegar antes de WM_CREATE
(consulte a continuación para obtener más información).
El mensaje WM_CREATE
se envía antes de CreateWindow()
devuelve, por lo que puede garantizar que la inicialización por ventana se haya realizado en ese punto. Su proceso de ventana recibirá WM_CREATE
después de que se cree la ventana, pero antes de que la ventana se vuelva visible (WM_SHOWWINDOW
).
En realidad, hay una inconsistencia interesante en la documentación de MSDN: los mensajes de creación parecen depender de si llama a CreateWindow()
o CreateWindowEx()
, sin embargo, no especifica que los mensajes se enumeran necesariamente en orden de envío.
CreateWindow()
: WM_CREATE
, WM_GETMINMAXINFO
y WM_NCCREATE
CreateWindowEx()
: WM_NCCREATE
, WM_NCCALCSIZE
y WM_CREATE
sospecho fuertemente que el orden de los mensajes se describe en CreateWindow()
debe tener WM_NCCREATE
primero, y la regularidad WM_CREATE
última , que es coherente con la documentación de notificación y la referencia CreateWindowEx()
(y también de acuerdo con lo que describir).
Raymond Chen también tiene algunos interesantes information on window creation/destruction.
Todo parece indicar que incluso las cosas aparentemente simples pueden volverse más complejas cuanto más las mires.
Esta pregunta no tiene sentido. Como ha notado, los primeros mensajes no son siempre lo mismo. Dependiendo de si la ventana se crea visible o no, una gran cantidad de mensajes pueden llegar a WindowPRoc antes de que CreateWindow vuelva a aparecer. qué mensajes y su orden ha cambiado entre las versiones de Windows. Todo lo que tienes garantizado es que WM_CREATE - y ahora WM_NCREATE - se enviará antes de que CreateWindow regrese (suponiendo que la creación de una ventana sea exitosa). –
Chris, ¿por qué un comentario en lugar de una respuesta? Además, ¿no tiene ningún sentido? Apuesto a que el 90% de los desarrolladores de Win32 juraría que WM_CREATE es el primer msg recibido (y yo fui uno de ellos hasta hace 30 segundos). Después de todo, eso es lo que todos leemos en nuestros libros de texto. –
De acuerdo Serge Wautier, pensé esto también hasta que hice una pequeña prueba. Este es el orden de todos mis mensajes WM hasta WM_CREATE: WM_GETMINMAXINFO, WM_NCCREATE, WM_NCCALCSIZE, WM_CREATE. – Kit10