WM_NCCREATE
è in realtà il very first message your window will receive, che arriverà prima di WM_CREATE
. È legato alla creazione dell'area non client (ad esempio barra del titolo, menu di sistema, ecc.), Quindi il prefisso NC
.
WM_GETMINMAXINFO
viene inviato before the window size/position is changed e può arrivare prima di WM_CREATE
(vedere sotto per ulteriori informazioni).
Il messaggio WM_CREATE
viene inviato prima dei ritorni CreateWindow()
, pertanto è possibile garantire che l'inizializzazione per finestra sia stata eseguita da quel punto. La finestra proc riceverà WM_CREATE
dopo la creazione della finestra, ma prima che la finestra diventi visibile (WM_SHOWWINDOW
).
In realtà, c'è un'interessante incoerenza nella documentazione MSDN - i messaggi di creazione sembrano dipendere dal fatto che si chiami CreateWindow()
o CreateWindowEx()
, tuttavia non specifica che i messaggi siano necessariamente elencati in ordine di dispacciamento.
CreateWindow()
: WM_CREATE
, WM_GETMINMAXINFO
e WM_NCCREATE
CreateWindowEx()
: WM_NCCREATE
, WM_NCCALCSIZE
, e WM_CREATE
ho il forte sospetto che l'ordine messaggio descritto nella CreateWindow()
dovrebbe avere WM_NCCREATE
prima, e il regolare WM_CREATE
ultima , che è coerente con la documentazione di notifica e il riferimento CreateWindowEx()
(e anche coerente con ciò che descrivere).
Raymond Chen ha anche qualche interessante information on window creation/destruction.
Solo per mostrare, anche le cose apparentemente semplici possono diventare complesse più le guardi.
Questa domanda non ha senso. Come hai notato, i primi messaggi non sono sempre gli stessi. A seconda che la finestra sia stata creata o meno, potrebbe venire un'intera serie di messaggi a WindowPRoc prima che CreateWindow ritorni. quali messaggi e il loro ordine è cambiato tra le versioni di Windows. Tutto ciò che è garantito è che WM_CREATE - e ora WM_NCREATE - sarà inviato prima che venga restituito CreateWindow (presupponendo che sia stata creata una finestra di successo). –
Chris, perché un commento invece di una risposta? Inoltre, non ha senso? Scommetto che il 90% degli sviluppatori Win32 giurerebbe che WM_CREATE è il primo messaggio ricevuto (e io ero uno di loro fino a 30 secondi fa). Dopotutto, questo è ciò che leggiamo tutti nei nostri libri di testo. –
D'accordo Serge Wautier, ho pensato anche a questo finché non ho fatto un piccolo test. Questo è l'ordine di tutti i miei messaggi WM fino a WM_CREATE: WM_GETMINMAXINFO, WM_NCCREATE, WM_NCCALCSIZE, WM_CREATE. – Kit10