Ove Kaaven | e9b568c | 1999-02-28 11:27:26 +0000 | [diff] [blame] | 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 |
| 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 |