]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed wxFrame::SetClientSize() with toolbar bug
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 30 May 2001 21:05:23 +0000 (21:05 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 30 May 2001 21:05:23 +0000 (21:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10384 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/frame.cpp

index 9a699cfebc7b61649e10447055705ef20e0700cb..9eb14a0f07c0a321df6029fafa67c8d6e70eb773 100644 (file)
@@ -219,42 +219,43 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
 // to wxWindows)
 void wxFrame::DoSetClientSize(int width, int height)
 {
-  HWND hWnd = GetHwnd();
+    HWND hWnd = GetHwnd();
 
-  RECT rect;
-  ::GetClientRect(hWnd, &rect);
+    RECT rectClient;
+    ::GetClientRect(hWnd, &rectClient);
 
-  RECT rect2;
-  GetWindowRect(hWnd, &rect2);
+    RECT rectTotal;
+    ::GetWindowRect(hWnd, &rectTotal);
 
-  // Find the difference between the entire window (title bar and all)
-  // and the client area; add this to the new client size to move the
-  // window
-  int actual_width = rect2.right - rect2.left - rect.right + width;
-  int actual_height = rect2.bottom - rect2.top - rect.bottom + height;
+    // Find the difference between the entire window (title bar and all)
+    // and the client area; add this to the new client size to move the
+    // window
+    width += rectTotal.right - rectTotal.left - rectClient.right;
+    height += rectTotal.bottom - rectTotal.top - rectClient.bottom;
 
 #if wxUSE_STATUSBAR
-  if ( GetStatusBar() && GetStatusBar()->IsShown())
-  {
-    int statusX, statusY;
-    GetStatusBar()->GetClientSize(&statusX, &statusY);
-    actual_height += statusY;
-  }
+    wxStatusBar *statbar = GetStatusBar();
+    if ( statbar && statbar->IsShown() )
+    {
+        // leave enough space for the status bar
+        height += statbar->GetSize().y;
+    }
 #endif // wxUSE_STATUSBAR
 
-  wxPoint pt(GetClientAreaOrigin());
-  actual_width += pt.y;
-  actual_height += pt.x;
-
-  POINT point;
-  point.x = rect2.left;
-  point.y = rect2.top;
+    // note that this takes the toolbar into account
+    wxPoint pt = GetClientAreaOrigin();
+    width += pt.x;
+    height += pt.y;
 
-  MoveWindow(hWnd, point.x, point.y, actual_width, actual_height, (BOOL)TRUE);
+    if ( !::MoveWindow(hWnd, rectTotal.left, rectTotal.top,
+                       width, height, TRUE /* redraw */) )
+    {
+        wxLogLastError(_T("MoveWindow"));
+    }
 
-  wxSizeEvent event(wxSize(width, height), m_windowId);
-  event.SetEventObject( this );
-  GetEventHandler()->ProcessEvent(event);
+    wxSizeEvent event(wxSize(width, height), m_windowId);
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
 }
 
 void wxFrame::DoGetSize(int *width, int *height) const