// this simply moves/resizes the given HWND which is supposed to be our
// sibling (this is useful for controls which are composite at MSW level
// and for which DoMoveWindow() is not enough)
- void DoMoveSibling(WXHWND hwnd, int x, int y, int width, int height);
+ //
+ // returns true if the window move was deferred, false if it was moved
+ // immediately (no error return)
+ bool DoMoveSibling(WXHWND hwnd, int x, int y, int width, int height);
// move the window to the specified location and resize it: this is called
// from both DoSetSize() and DoSetClientSize() and would usually just call
*y = pt.y;
}
-void
+bool
wxWindowMSW::DoMoveSibling(WXHWND hwnd, int x, int y, int width, int height)
{
#if USE_DEFERRED_SIZING
parent->m_hDWP = (WXHANDLE)hdwp;
}
+ if ( hdwp )
+ {
+ // did deferred move, remember new coordinates of the window as they're
+ // different from what Windows would return for it
+ return true;
+ }
+
// otherwise (or if deferring failed) move the window in place immediately
- if ( !hdwp )
#endif // USE_DEFERRED_SIZING
+ if ( !::MoveWindow((HWND)hwnd, x, y, width, height, IsShown()) )
{
- if ( !::MoveWindow((HWND)hwnd, x, y, width, height, IsShown()) )
- {
- wxLogLastError(wxT("MoveWindow"));
- }
+ wxLogLastError(wxT("MoveWindow"));
}
+
+ // if USE_DEFERRED_SIZING, indicates that we didn't use deferred move,
+ // ignored otherwise
+ return false;
}
void wxWindowMSW::DoMoveWindow(int x, int y, int width, int height)
if (height < 0)
height = 0;
- DoMoveSibling(m_hWnd, x, y, width, height);
+ if ( DoMoveSibling(m_hWnd, x, y, width, height) )
+ {
+#if USE_DEFERRED_SIZING
+ m_pendingPosition = wxPoint(x, y);
+ m_pendingSize = wxSize(width, height);
+#endif // USE_DEFERRED_SIZING
+ }
}
// set the size of the window: if the dimensions are positive, just use them,
}
}
- m_pendingPosition = wxPoint(x, y);
- m_pendingSize = wxSize(width, height);
DoMoveWindow(x, y, width, height);
}