blob: cbbcbfb1a351aa42c57e92fec26fc044dad1aee6 [file] [log] [blame]
Ove Kaavene9b568c1999-02-28 11:27:26 +00001My tests show that Windows window management events behave like described
2in this file, at least under Win98.
3The (16/32) or (16) or (32) at the end shows whether the sequence has been
4confirmed for win16, win32, or both.
5
6Window Edge Styles (Win95/98 look):
7 WS_EX_DLGMODALFRAME: double border, WS_CAPTION allowed
8 WS_DLGFRAME: double border, WS_CAPTION not allowed (but possibly shown anyway)
9 WS_THICKFRAME: thick border
10 WS_BORDER (default for top-level windows): single black border
11 none (default for child windows): no border
12
13CreateWindow (for overlapped window, not initially visible) (16/32)
14Messages sent:
15 WM_GETMINMAXINFO
16 WM_NCCREATE
17 WM_NCCALCSIZE (wParam=0)
18 WM_CREATE
19
20ShowWindow (for overlapped window) (16/32)
21Messages sent:
22 WM_SHOWWINDOW (wParam=1)
23 WM_WINDOWPOSCHANGING (NOMOVE|NOSIZE|SHOWWINDOW)
24 WM_QUERYNEWPALETTE, if in 256-color mode
25 WM_WINDOWPOSCHANGING (NOMOVE|NOSIZE)
26 WM_ACTIVATEAPP (wParam=1)
27 WM_NCACTIVATE (wParam=1)
28 DefWindowProc:
29 WM_GETTEXT
30 WM_ACTIVATE (wParam=1)
31 DefWindowProc:
32 WM_SETFOCUS (wParam=0)
33 WM_NCPAINT (wParam=1)
34 DefWindowProc:
35 WM_GETTEXT
36 WM_ERASEBKGND
37 WM_WINDOWPOSCHANGED (NOMOVE|NOSIZE|NOZORDER|SHOWWINDOW)
38 WM_SIZE (NOT from DefWindowProc)
39 WM_MOVE (NOT from DefWindowProc)
40
41(WM_NCHITTEST and WM_SETCURSOR will tend to follow immediately after the
42 ShowWindow if the mouse is inside the window)
43
44DestroyWindow (for overlapped window) (32)
45Messages sent:
46 WM_WINDOWPOSCHANGING (wParam=0)
47 WM_WINDOWPOSCHANGED (wParam=0)
48 WM_NCACTIVATE (wParam=0)
49 WM_ACTIVATE (wParam=0)
50 WM_ACTIVATEAPP (wParam=0)
51 WM_KILLFOCUS (wParam=0)
52 WM_DESTROY
53 WM_NCDESTROY
54
55CreateWindow (for child window, not initially visible)
56Messages sent:
57 WM_NCCREATE
58 WM_NCCALCSIZE (wParam=0)
59 WM_CREATE
60 WM_SIZE
61 WM_MOVE
62 (to parent window) WM_PARENTNOTIFY (wParam=1)
63
64ShowWindow (for child window)
65Messages sent:
66 WM_SHOWWINDOW (wParam=1)
67 WM_WINDOWPOSCHANGING (wParam=0)
68 (to parent window) WM_ERASEBKGND
69 WM_WINDOWPOSCHANGED (wParam=0)
70
71DestroyWindow (for child window)
72Messages sent:
73 (to parent window) WM_PARENTNOTIFY (wParam=2)
74 WM_SHOWWINDOW (wParam=0)
75 WM_WINDOWPOSCHANGING (wParam=0)
76 (to parent window) WM_ERASEBKGND
77 WM_WINDOWPOSCHANGED (wParam=0)
78 WM_DESTROY
79 WM_NCDESTROY
80
81Moving the mouse:
82Messages sent:
83 WM_NCHITTEST
84 WM_SETCURSOR
85Messages posted:
86 WM_MOUSEMOVE, if WM_NCHITTEST returns HTCLIENT
87 WM_NCMOUSEMOVE, if WM_NCHITTEST returns somewhere in nonclient area (not HTNOWHERE)
88
89Moving by dragging the title bar (after WM_NCHITTEST and WM_SETCURSOR) (outline move):
90 WM_NCLBUTTONDOWN (wParam=2=HTCAPTION)
91 DefWindowProc:
92 WM_SYSCOMMAND (wParam=0xf012=SC_MOVE+2)
93 DefWindowProc:
94 WM_GETMINMAXINFO
95 WM_ENTERSIZEMOVE
96 WM_WINDOWPOSCHANGING
97 WM_WINDOWPOSCHANGED
98 DefWindowProc:
99 WM_MOVE
100 WM_EXITSIZEMOVE
101
102Sizing by dragging the thick borders (after WM_NCHITTEST and WM_SETCURSOR) (outline move):
103 WM_NCLBUTTONDOWN (wParam=0xd)
104 DefWindowProc:
105 WM_SYSCOMMAND (wParam=0xf004)
106 DefWindowProc:
107 WM_GETMINMAXINFO
108 WM_ENTERSIZEMOVE
109 WM_SIZING (wParam=4) (many times, probably one for each mouse movement)
110 WM_WINDOWPOSCHANGING
111 DefWindowProc:
112 WM_GETMINMAXINFO
113 WM_NCCALCSIZE (wParam=1)
114 WM_NCPAINT (wParam=1)
115 DefWindowProc:
116 WM_GETTEXT
117 WM_ERASEBKGND
118 WM_WINDOWPOSCHANGED
119 DefWindowProc:
120 WM_MOVE
121 WM_SIZE
122 WM_EXITSIZEMOVE
123
124Resizing child window with MoveWindow (32):
125 WM_WINDOWPOSCHANGING
126 WM_NCCALCSIZE (wParam=1)
127 WM_ERASEBKGND
128 WM_WINDOWPOSCHANGED
129 DefWindowProc:
130 WM_MOVE
131 WM_SIZE
132
133Clicking on inactive button:
134Messages sent:
135 WM_NCHITTEST
136 (to parent window) WM_PARENTNOTIFY (wParam=0x201=WM_LBUTTONDOWN)
137 WM_MOUSEACTIVATE
138 ButtonProc->DefWindowProc:
139 (to parent window) WM_MOUSEACTIVATE
140 WM_SETCURSOR
141 ButtonProc->DefWindowProc:
142 (to parent window) WM_SETCURSOR
143Messages posted:
144 WM_LBUTTONDOWN
145 (to parent window) WM_KILLFOCUS
146 WM_SETFOCUS
147 (to parent window) WM_CTLCOLORBTN
148 BM_SETSTATE32
149 (to parent window) WM_CTLCOLORBTN
150 WM_LBUTTONUP
151 BM_SETSTATE32
152 (to parent window) WM_CTLCOLORBTN
153 (to parent window) WM_COMMAND
154
155Reparenting a button (16/32):
156 WM_SHOWWINDOW (wParam=0)
157 WM_WINDOWPOSCHANGING (HIDEWINDOW|NOACTIVATE|NOMOVE|NOSIZE|NOZORDER)
158 (to parent window) WM_ERASEBKGND
159 WM_WINDOWPOSCHANGED (HIDEWINDOW|NOACTIVATE|NOMOVE|NOSIZE|NOZORDER)
160 WM_WINDOWPOSCHANGING (NOSIZE|NOZORDER)
161 WM_CHILDACTIVATE
162 WM_WINDOWPOSCHANGED (NOSIZE|NOREDRAW|NOZORDER)
163 DefWindowProc:
164 WM_MOVE
165 WM_SHOWWINDOW (wParam=1)
166The last child (button) reparented gets topmost for its new parent.
167
168Creation of a modal dialog (32):
169 (to parent window) WM_CANCELMODE
170 (to parent window) WM_KILLFOCUS
171 (to parent window) WM_ENABLE (wParam=0)
172 (window proc creation messages not tracked yet, because...)
173 (dlgproc) WM_SETFONT
174 (dlgproc) WM_INITDIALOG
175 (...the window proc message hook was installed here, IsVisible still FALSE)
176 (to parent window) WM_NCACTIVATE (wParam=0)
177 DefWindowProc:
178 WM_GETTEXT
179 (to parent window) WM_ACTIVATE (wParam=0)
180 WM_WINDOWPOSCHANGING
181 (to parent window) WM_WINDOWPOSCHANGING
182 WM_NCACTIVATE (wParam=1)
183 WM_ACTIVATE (wParam=1)
184 (setting focus)
185 WM_SHOWWINDOW (wParam=1)
186 WM_WINDOWPOSCHANGING
187 WM_NCPAINT
188 DefWindowProc:
189 WM_GETTEXT
190 WM_ERASEBKGND
191 DialogWindowProc(?):
192 WM_CTLCOLORDLG
193 WM_WINDOWPOSCHANGED
194 WM_PAINT
195 (bunch of WM_CTLCOLOR* for each control)
196 (to parent window) WM_PAINT
197 (to parent window) WM_ENTERIDLE (wParam=0)
198 (to parent window) WM_SETCURSOR
199
200Destruction of a modal dialog (32):
201 (inside dialog proc: EndDialog is called)
202 (to parent window) WM_ENABLE (wParam=1)
203 WM_SETFOCUS
204 WM_WINDOWPOSCHANGING
205 (to parent window) WM_NCPAINT
206 DefWindowProc:
207 WM_GETTEXT
208 (to parent window) WM_ERASEBKGND
209 WM_WINDOWPOSCHANGED
210 WM_NCACTIVATE (wParam=0)
211 WM_ACTIVATE (wParam=0)
212 WM_WINDOWPOSCHANGING
213 (to parent window) WM_WINDOWPOSCHANGING
214 (to parent window) WM_NCACTIVATE (wParam=1)
215 DefWindowProc:
216 WM_GETTEXT
217 (to parent window) WM_ACTIVATE (wParam=1)
218 (to dialog) WM_KILLFOCUS
219 (to parent window) WM_SETFOCUS
220 WM_DESTROY
221 WM_NCDESTROY
222
223Creation of a modal dialog that is resized inside WM_INITDIALOG (32):
224 (inside dialog proc, handling WM_INITDIALOG)
225 WM_WINDOWPOSCHANGING
226 WM_NCCALCSIZE
227 (to parent window) WM_NCACTIVATE (wParam=0)
228 DefWindowProc:
229 WM_GETTEXT
230 (to parent window) WM_ACTIVATE (wParam=0)
231 WM_WINDOWPOSCHANGING
232 (to parent window) WM_WINDOWPOSCHANGING
233 WM_NCACTIVATE (wParam=1)
234 WM_ACTIVATE (wParam=1)
235 WM_WINDOWPOSCHANGED
236 DefWindowProc:
237 WM_SIZE
238 (setting focus)
239 WM_SHOWWINDOW (wParam=1)
240 WM_WINDOWPOSCHANGING
241 WM_NCPAINT
242 DefWindowProc:
243 WM_GETTEXT
244 WM_ERASEBKGND
245 DialogWindowProc(?):
246 WM_CTLCOLORDLG
247 WM_WINDOWPOSCHANGED
248 WM_PAINT
249 (bunch of WM_CTLCOLOR* for each control)
250 (to parent window) WM_PAINT
251 (to parent window) WM_ENTERIDLE (wParam=0)
252 (to parent window) WM_SETCURSOR