mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
e9b568c0c5
tester app gave under real Windows for various events. It was useful for some of my debugging at least, perhaps it could be of some use to other Wine GUI debuggers as well.
252 lines
6.7 KiB
Text
252 lines
6.7 KiB
Text
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
|
|
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
|