]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
fingers crossed..
[wxWidgets.git] / src / msw / frame.cpp
index 9a699cfebc7b61649e10447055705ef20e0700cb..b37499c2fa5db2966af78b58c138e3458c240d1e 100644 (file)
@@ -219,62 +219,61 @@ 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
 {
-  RECT rect;
-  GetWindowRect(GetHwnd(), &rect);
-  *width = rect.right - rect.left;
-  *height = rect.bottom - rect.top;
+    RECT rect;
+    ::GetWindowRect(GetHwnd(), &rect);
+
+    *width = rect.right - rect.left;
+    *height = rect.bottom - rect.top;
 }
 
 void wxFrame::DoGetPosition(int *x, int *y) const
 {
-  RECT rect;
-  GetWindowRect(GetHwnd(), &rect);
-  POINT point;
-  point.x = rect.left;
-  point.y = rect.top;
+    RECT rect;
+    ::GetWindowRect(GetHwnd(), &rect);
 
-  *x = point.x;
-  *y = point.y;
+    *x = rect.left;
+    *y = rect.top;
 }
 
 // ----------------------------------------------------------------------------
@@ -975,6 +974,8 @@ bool wxFrame::HandleSize(int x, int y, WXUINT id)
             // restore all child frames too
             IconizeChildFrames(FALSE);
 
+            (void)SendIconizeEvent(FALSE);
+
             // fall through
 
         case SIZEFULLSCREEN:
@@ -985,6 +986,8 @@ bool wxFrame::HandleSize(int x, int y, WXUINT id)
             // iconize all child frames too
             IconizeChildFrames(TRUE);
 
+            (void)SendIconizeEvent();
+
             m_iconized = TRUE;
             break;
     }