Added fix to wxMDIClientWindow to redisplay contents when
window is repositioned git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6285 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
7c5c05ae65
commit
ec06b234d2
@ -197,6 +197,9 @@ public:
|
|||||||
// Explicitly call default scroll behaviour
|
// Explicitly call default scroll behaviour
|
||||||
void OnScroll(wxScrollEvent& event);
|
void OnScroll(wxScrollEvent& event);
|
||||||
|
|
||||||
|
virtual void DoSetSize(int x, int y,
|
||||||
|
int width, int height,
|
||||||
|
int sizeFlags = wxSIZE_AUTO);
|
||||||
protected:
|
protected:
|
||||||
void Init() { m_scrollX = m_scrollY = 0; }
|
void Init() { m_scrollX = m_scrollY = 0; }
|
||||||
|
|
||||||
|
@ -1155,6 +1155,38 @@ void wxMDIClientWindow::OnScroll(wxScrollEvent& event)
|
|||||||
event.Skip();
|
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
|
// non member functions
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
@ -187,8 +187,10 @@ void csFrame::OnIdle(wxIdleEvent& event)
|
|||||||
// window doesn't cause the proper refresh. Just refreshing the
|
// window doesn't cause the proper refresh. Just refreshing the
|
||||||
// client doesn't work (presumably because it's clipping the
|
// client doesn't work (presumably because it's clipping the
|
||||||
// children).
|
// children).
|
||||||
// TODO: how to put this fix in wxWindows, and not the app.
|
// FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
|
||||||
// How about at least having a wxWindow::RedrawWindow?
|
// and checking if the position has changed, before redrawing the
|
||||||
|
// child windows.
|
||||||
|
#if 0
|
||||||
wxMDIChildFrame* childFrame = GetActiveChild();
|
wxMDIChildFrame* childFrame = GetActiveChild();
|
||||||
if (childFrame)
|
if (childFrame)
|
||||||
{
|
{
|
||||||
@ -196,6 +198,7 @@ void csFrame::OnIdle(wxIdleEvent& event)
|
|||||||
::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
|
::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user