- // the status bar wnd proc must be forwarded the WM_SIZE message whenever
- // the stat bar position/size is changed because it normally positions the
- // control itself along bottom or top side of the parent window - failing
- // to do so will result in nasty visual effects
- FORWARD_WM_SIZE(GetHwnd(), SIZE_RESTORED, x, y, SendMessage);
-
- // but now, when the standard status bar wnd proc did all it wanted to do,
- // move the status bar to its correct location - usually this call may be
- // omitted because for normal status bars (positioned along the bottom
- // edge) the position is already set correctly, but if the user wants to
- // position them in some exotic location, this is really needed
- wxWindowMSW::DoMoveWindow(x, y, width, height);
+ if ( GetParent()->IsSizeDeferred() )
+ {
+ wxWindowMSW::DoMoveWindow(x, y, width, height);
+ }
+ else
+ {
+ // parent pos/size isn't deferred so do it now but don't send
+ // WM_WINDOWPOSCHANGING since we don't want to change pos/size later
+ // we must use SWP_NOCOPYBITS here otherwise it paints incorrectly
+ // if other windows are size deferred
+ ::SetWindowPos(GetHwnd(), NULL, x, y, width, height,
+ SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE |
+ SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
+ }