// Explicitly call default scroll behaviour
void OnScroll(wxScrollEvent& event);
+ virtual void DoSetSize(int x, int y,
+ int width, int height,
+ int sizeFlags = wxSIZE_AUTO);
protected:
void Init() { m_scrollX = m_scrollY = 0; }
event.Skip();
}
+void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+{
+ // Try to fix a problem whereby if you show an MDI child frame, then reposition the
+ // client area, you can end up with a non-refreshed portion in the client window
+ // (see OGL studio sample). So check if the position is changed and if so,
+ // redraw the MDI child frames.
+
+ wxPoint oldPos = GetPosition();
+
+ wxWindow::DoSetSize(x, y, width, height, sizeFlags);
+
+ wxPoint newPos = GetPosition();
+
+ if ((newPos.x != oldPos.x) || (newPos.y != oldPos.y))
+ {
+ if (GetParent())
+ {
+ wxNode* node = GetParent()->GetChildren().First();
+ while (node)
+ {
+ wxWindow* child = (wxWindow*) node->Data();
+ if (child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
+ {
+ HWND hWnd = (HWND) child->GetHWND();
+ ::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
+ }
+ node = node->Next();
+ }
+ }
+ }
+}
+
// ---------------------------------------------------------------------------
// non member functions
// ---------------------------------------------------------------------------
// window doesn't cause the proper refresh. Just refreshing the
// client doesn't work (presumably because it's clipping the
// children).
- // TODO: how to put this fix in wxWindows, and not the app.
- // How about at least having a wxWindow::RedrawWindow?
+ // FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
+ // and checking if the position has changed, before redrawing the
+ // child windows.
+#if 0
wxMDIChildFrame* childFrame = GetActiveChild();
if (childFrame)
{
::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
}
+#endif
#endif
}
}