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
