253 lines
6.8 KiB
Plaintext
253 lines
6.8 KiB
Plaintext
My tests show that Windows window management events behave like described
|
|
in this file, at least under Win98.
|
|
The (16/32) or (16) or (32) at the end shows whether the sequence has been
|
|
confirmed for win16, win32, or both.
|
|
|
|
Window Edge Styles (Win95/98 look):
|
|
WS_EX_DLGMODALFRAME: double border, WS_CAPTION allowed
|
|
WS_DLGFRAME: double border, WS_CAPTION not allowed (but possibly shown anyway)
|
|
WS_THICKFRAME: thick border
|
|
WS_BORDER (default for top-level windows): single black border
|
|
none (default for child windows): no border
|
|
|
|
CreateWindow (for overlapped window, not initially visible) (16/32)
|
|
Messages sent:
|
|
WM_GETMINMAXINFO
|
|
WM_NCCREATE
|
|
WM_NCCALCSIZE (wParam=0)
|
|
WM_CREATE
|
|
|
|
ShowWindow (for overlapped window) (16/32)
|
|
Messages sent:
|
|
WM_SHOWWINDOW (wParam=1)
|
|
WM_WINDOWPOSCHANGING (NOMOVE|NOSIZE|SHOWWINDOW)
|
|
WM_QUERYNEWPALETTE, if in 256-color mode
|
|
WM_WINDOWPOSCHANGING (NOMOVE|NOSIZE)
|
|
WM_ACTIVATEAPP (wParam=1)
|
|
WM_NCACTIVATE (wParam=1)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
WM_ACTIVATE (wParam=1)
|
|
DefWindowProc:
|
|
WM_SETFOCUS (wParam=0)
|
|
WM_NCPAINT (wParam=1)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED (NOMOVE|NOSIZE|NOZORDER|SHOWWINDOW)
|
|
WM_SIZE (NOT from DefWindowProc)
|
|
WM_MOVE (NOT from DefWindowProc)
|
|
|
|
(WM_NCHITTEST and WM_SETCURSOR will tend to follow immediately after the
|
|
ShowWindow if the mouse is inside the window)
|
|
|
|
DestroyWindow (for overlapped window) (32)
|
|
Messages sent:
|
|
WM_WINDOWPOSCHANGING (wParam=0)
|
|
WM_WINDOWPOSCHANGED (wParam=0)
|
|
WM_NCACTIVATE (wParam=0)
|
|
WM_ACTIVATE (wParam=0)
|
|
WM_ACTIVATEAPP (wParam=0)
|
|
WM_KILLFOCUS (wParam=0)
|
|
WM_DESTROY
|
|
WM_NCDESTROY
|
|
|
|
CreateWindow (for child window, not initially visible)
|
|
Messages sent:
|
|
WM_NCCREATE (Note that win->parent->child will not contain win. link is done after sucessfull WM_NCCREATE)
|
|
WM_NCCALCSIZE (wParam=0)
|
|
WM_CREATE
|
|
WM_SIZE
|
|
WM_MOVE
|
|
(to parent window) WM_PARENTNOTIFY (wParam=1)
|
|
|
|
ShowWindow (for child window)
|
|
Messages sent:
|
|
WM_SHOWWINDOW (wParam=1)
|
|
WM_WINDOWPOSCHANGING (wParam=0)
|
|
(to parent window) WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED (wParam=0)
|
|
|
|
DestroyWindow (for child window)
|
|
Messages sent:
|
|
(to parent window) WM_PARENTNOTIFY (wParam=2)
|
|
WM_SHOWWINDOW (wParam=0)
|
|
WM_WINDOWPOSCHANGING (wParam=0)
|
|
(to parent window) WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED (wParam=0)
|
|
WM_DESTROY
|
|
WM_NCDESTROY
|
|
|
|
Moving the mouse:
|
|
Messages sent:
|
|
WM_NCHITTEST
|
|
WM_SETCURSOR
|
|
Messages posted:
|
|
WM_MOUSEMOVE, if WM_NCHITTEST returns HTCLIENT
|
|
WM_NCMOUSEMOVE, if WM_NCHITTEST returns somewhere in nonclient area (not HTNOWHERE)
|
|
|
|
Moving by dragging the title bar (after WM_NCHITTEST and WM_SETCURSOR) (outline move):
|
|
WM_NCLBUTTONDOWN (wParam=2=HTCAPTION)
|
|
DefWindowProc:
|
|
WM_SYSCOMMAND (wParam=0xf012=SC_MOVE+2)
|
|
DefWindowProc:
|
|
WM_GETMINMAXINFO
|
|
WM_ENTERSIZEMOVE
|
|
WM_WINDOWPOSCHANGING
|
|
WM_WINDOWPOSCHANGED
|
|
DefWindowProc:
|
|
WM_MOVE
|
|
WM_EXITSIZEMOVE
|
|
|
|
Sizing by dragging the thick borders (after WM_NCHITTEST and WM_SETCURSOR) (outline move):
|
|
WM_NCLBUTTONDOWN (wParam=0xd)
|
|
DefWindowProc:
|
|
WM_SYSCOMMAND (wParam=0xf004)
|
|
DefWindowProc:
|
|
WM_GETMINMAXINFO
|
|
WM_ENTERSIZEMOVE
|
|
WM_SIZING (wParam=4) (many times, probably one for each mouse movement)
|
|
WM_WINDOWPOSCHANGING
|
|
DefWindowProc:
|
|
WM_GETMINMAXINFO
|
|
WM_NCCALCSIZE (wParam=1)
|
|
WM_NCPAINT (wParam=1)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED
|
|
DefWindowProc:
|
|
WM_MOVE
|
|
WM_SIZE
|
|
WM_EXITSIZEMOVE
|
|
|
|
Resizing child window with MoveWindow (32):
|
|
WM_WINDOWPOSCHANGING
|
|
WM_NCCALCSIZE (wParam=1)
|
|
WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED
|
|
DefWindowProc:
|
|
WM_MOVE
|
|
WM_SIZE
|
|
|
|
Clicking on inactive button:
|
|
Messages sent:
|
|
WM_NCHITTEST
|
|
(to parent window) WM_PARENTNOTIFY (wParam=0x201=WM_LBUTTONDOWN)
|
|
WM_MOUSEACTIVATE
|
|
ButtonProc->DefWindowProc:
|
|
(to parent window) WM_MOUSEACTIVATE
|
|
WM_SETCURSOR
|
|
ButtonProc->DefWindowProc:
|
|
(to parent window) WM_SETCURSOR
|
|
Messages posted:
|
|
WM_LBUTTONDOWN
|
|
(to parent window) WM_KILLFOCUS
|
|
WM_SETFOCUS
|
|
(to parent window) WM_CTLCOLORBTN
|
|
BM_SETSTATE32
|
|
(to parent window) WM_CTLCOLORBTN
|
|
WM_LBUTTONUP
|
|
BM_SETSTATE32
|
|
(to parent window) WM_CTLCOLORBTN
|
|
(to parent window) WM_COMMAND
|
|
|
|
Reparenting a button (16/32):
|
|
WM_SHOWWINDOW (wParam=0)
|
|
WM_WINDOWPOSCHANGING (HIDEWINDOW|NOACTIVATE|NOMOVE|NOSIZE|NOZORDER)
|
|
(to parent window) WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED (HIDEWINDOW|NOACTIVATE|NOMOVE|NOSIZE|NOZORDER)
|
|
WM_WINDOWPOSCHANGING (NOSIZE|NOZORDER)
|
|
WM_CHILDACTIVATE
|
|
WM_WINDOWPOSCHANGED (NOSIZE|NOREDRAW|NOZORDER)
|
|
DefWindowProc:
|
|
WM_MOVE
|
|
WM_SHOWWINDOW (wParam=1)
|
|
The last child (button) reparented gets topmost for its new parent.
|
|
|
|
Creation of a modal dialog (32):
|
|
(to parent window) WM_CANCELMODE
|
|
(to parent window) WM_KILLFOCUS
|
|
(to parent window) WM_ENABLE (wParam=0)
|
|
(window proc creation messages not tracked yet, because...)
|
|
(dlgproc) WM_SETFONT
|
|
(dlgproc) WM_INITDIALOG
|
|
(...the window proc message hook was installed here, IsVisible still FALSE)
|
|
(to parent window) WM_NCACTIVATE (wParam=0)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
(to parent window) WM_ACTIVATE (wParam=0)
|
|
WM_WINDOWPOSCHANGING
|
|
(to parent window) WM_WINDOWPOSCHANGING
|
|
WM_NCACTIVATE (wParam=1)
|
|
WM_ACTIVATE (wParam=1)
|
|
(setting focus)
|
|
WM_SHOWWINDOW (wParam=1)
|
|
WM_WINDOWPOSCHANGING
|
|
WM_NCPAINT
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
WM_ERASEBKGND
|
|
DialogWindowProc(?):
|
|
WM_CTLCOLORDLG
|
|
WM_WINDOWPOSCHANGED
|
|
WM_PAINT
|
|
(bunch of WM_CTLCOLOR* for each control)
|
|
(to parent window) WM_PAINT
|
|
(to parent window) WM_ENTERIDLE (wParam=0)
|
|
(to parent window) WM_SETCURSOR
|
|
|
|
Destruction of a modal dialog (32):
|
|
(inside dialog proc: EndDialog is called)
|
|
(to parent window) WM_ENABLE (wParam=1)
|
|
WM_SETFOCUS
|
|
WM_WINDOWPOSCHANGING
|
|
(to parent window) WM_NCPAINT
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
(to parent window) WM_ERASEBKGND
|
|
WM_WINDOWPOSCHANGED
|
|
WM_NCACTIVATE (wParam=0)
|
|
WM_ACTIVATE (wParam=0)
|
|
WM_WINDOWPOSCHANGING
|
|
(to parent window) WM_WINDOWPOSCHANGING
|
|
(to parent window) WM_NCACTIVATE (wParam=1)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
(to parent window) WM_ACTIVATE (wParam=1)
|
|
(to dialog) WM_KILLFOCUS
|
|
(to parent window) WM_SETFOCUS
|
|
WM_DESTROY
|
|
WM_NCDESTROY
|
|
|
|
Creation of a modal dialog that is resized inside WM_INITDIALOG (32):
|
|
(inside dialog proc, handling WM_INITDIALOG)
|
|
WM_WINDOWPOSCHANGING
|
|
WM_NCCALCSIZE
|
|
(to parent window) WM_NCACTIVATE (wParam=0)
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
(to parent window) WM_ACTIVATE (wParam=0)
|
|
WM_WINDOWPOSCHANGING
|
|
(to parent window) WM_WINDOWPOSCHANGING
|
|
WM_NCACTIVATE (wParam=1)
|
|
WM_ACTIVATE (wParam=1)
|
|
WM_WINDOWPOSCHANGED
|
|
DefWindowProc:
|
|
WM_SIZE
|
|
(setting focus)
|
|
WM_SHOWWINDOW (wParam=1)
|
|
WM_WINDOWPOSCHANGING
|
|
WM_NCPAINT
|
|
DefWindowProc:
|
|
WM_GETTEXT
|
|
WM_ERASEBKGND
|
|
DialogWindowProc(?):
|
|
WM_CTLCOLORDLG
|
|
WM_WINDOWPOSCHANGED
|
|
WM_PAINT
|
|
(bunch of WM_CTLCOLOR* for each control)
|
|
(to parent window) WM_PAINT
|
|
(to parent window) WM_ENTERIDLE (wParam=0)
|
|
(to parent window) WM_SETCURSOR
|