Authors: Chris Morgan <cmorgan@wpi.edu>, James Abbatiello <abbeyj@wpi.edu>
[wine] / documentation / gui
1 My tests show that Windows window management events behave like described
2 in this file, at least under Win98.
3 The (16/32) or (16) or (32) at the end shows whether the sequence has been
4 confirmed for win16, win32, or both.
5
6 Window 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
13 CreateWindow (for overlapped window, not initially visible) (16/32)
14 Messages sent:
15  WM_GETMINMAXINFO
16  WM_NCCREATE
17  WM_NCCALCSIZE (wParam=0)
18  WM_CREATE
19
20 ShowWindow (for overlapped window) (16/32)
21 Messages 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
44 DestroyWindow (for overlapped window) (32)
45 Messages 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
55 CreateWindow (for child window, not initially visible)
56 Messages sent:
57  WM_NCCREATE (Note that win->parent->child will not contain win. link is done after sucessfull 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
64 ShowWindow (for child window)
65 Messages sent:
66  WM_SHOWWINDOW (wParam=1)
67  WM_WINDOWPOSCHANGING (wParam=0)
68  (to parent window) WM_ERASEBKGND
69  WM_WINDOWPOSCHANGED (wParam=0)
70
71 DestroyWindow (for child window)
72 Messages 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
81 Moving the mouse:
82 Messages sent:
83  WM_NCHITTEST
84  WM_SETCURSOR
85 Messages posted:
86  WM_MOUSEMOVE, if WM_NCHITTEST returns HTCLIENT
87  WM_NCMOUSEMOVE, if WM_NCHITTEST returns somewhere in nonclient area (not HTNOWHERE)
88
89 Moving 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
102 Sizing 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
124 Resizing 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
133 Clicking on inactive button:
134 Messages 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
143 Messages 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
155 Reparenting 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)
166 The last child (button) reparented gets topmost for its new parent.
167
168 Creation 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
200 Destruction 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
223 Creation 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