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