From d181e0532987ae568eca8b1965f84b953cfb4a13 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 26 Mar 2005 16:32:48 +0000 Subject: [PATCH] changed wxWindow::Refresh() to refresh the window children as well (as wxGTK already did); documented this as correct behaviour git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33076 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + docs/latex/wx/window.tex | 8 +++++--- src/msw/window.cpp | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 54471363aa..8de5a61572 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -36,6 +36,7 @@ wxMSW: - Added "orient" parameter to wxMDIParentFrame::Tile() - wxTextCtrl with wxTE_RICH2 style now uses RichEdit 4.1 if available - fix handling Alt-key events in wxComboBox (reported by Joakim Roubert) +- wxWindow::Refresh() refreshes the window children as well wxGTK: diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex index 09f2f5d37b..d7d90fd9f2 100644 --- a/docs/latex/wx/window.tex +++ b/docs/latex/wx/window.tex @@ -2225,8 +2225,10 @@ or frame). \func{virtual void}{Refresh}{\param{bool}{ eraseBackground = {\tt true}}, \param{const wxRect* }{rect = NULL}} -Causes an event to be generated to repaint the -window. +Causes this window, and all of its children recursively, to be repainted. Note +that repainting doesn't happen immediately but only during the next event loop +iteration, if you need to update the window immediately you should use +\helpref{Update}{wxwindowupdate} instead. \wxheading{Parameters} @@ -3490,7 +3492,7 @@ This function is currently only implemented under MSW. Calling this method immediately repaints the invalidated area of the window while this would usually only happen when the flow of control returns to the event loop. Notice that this function doesn't refresh the window and does -nothing if the window hadn't been already repainted. Use +nothing if the window hadn't been already repainted. Use \helpref{Refresh}{wxwindowrefresh} first if you want to immediately redraw the window unconditionally. diff --git a/src/msw/window.cpp b/src/msw/window.cpp index a2b52faf7a..a17b0401d2 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1324,18 +1324,27 @@ void wxWindowMSW::Refresh(bool eraseBack, const wxRect *rect) HWND hWnd = GetHwnd(); if ( hWnd ) { + RECT mswRect; + const RECT *pRect; if ( rect ) { - RECT mswRect; mswRect.left = rect->x; mswRect.top = rect->y; mswRect.right = rect->x + rect->width; mswRect.bottom = rect->y + rect->height; - ::InvalidateRect(hWnd, &mswRect, eraseBack); + pRect = &mswRect; } else - ::InvalidateRect(hWnd, NULL, eraseBack); + { + pRect = NULL; + } + + UINT flags = RDW_INVALIDATE | RDW_ALLCHILDREN; + if ( eraseBack ) + flags |= RDW_ERASE; + + ::RedrawWindow(hWnd, pRect, NULL, flags); } } -- 2.45.2