From 838ab05edec888a92d7f8979499c1e19fde19f99 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 25 Jan 2009 11:40:41 +0000 Subject: [PATCH] allow using wxBG_STYLE_CUSTOM even with the native controls and use it in wxTreeCtrl (see #9832) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58380 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/treectrl.cpp | 4 ++++ src/msw/window.cpp | 16 ++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index d358be2f32..df434131aa 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -734,6 +734,10 @@ bool wxTreeCtrl::Create(wxWindow *parent, if ( !MSWCreateControl(WC_TREEVIEW, wstyle, pos, size) ) return false; + // this significantly reduces flicker when refreshing the control, for some + // reason the native control itself doesn't avoid background repainting + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + #if wxUSE_COMCTL32_SAFELY wxWindow::SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); wxWindow::SetForegroundColour(wxWindow::GetParent()->GetForegroundColour()); diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 3707a1bad7..e808841ca4 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -4722,6 +4722,14 @@ bool wxWindowMSW::HandleEraseBkgnd(WXHDC hdc) void wxWindowMSW::OnEraseBackground(wxEraseEvent& event) { + if ( GetBackgroundStyle() == wxBG_STYLE_CUSTOM ) + { + // don't skip the event here, custom background means that the app + // is drawing it itself in its OnPaint(), so don't draw it at all + // now to avoid flicker + return; + } + // standard non top level controls (i.e. except the dialogs) always erase // their background themselves in HandleCtlColor() or have some control- // specific ways to set the colours (common controls) @@ -4731,14 +4739,6 @@ void wxWindowMSW::OnEraseBackground(wxEraseEvent& event) return; } - if ( GetBackgroundStyle() == wxBG_STYLE_CUSTOM ) - { - // don't skip the event here, custom background means that the app - // is drawing it itself in its OnPaint(), so don't draw it at all - // now to avoid flicker - return; - } - wxDC *dc = event.GetDC(); if (!dc) return; wxMSWDCImpl *impl = (wxMSWDCImpl*) dc->GetImpl(); -- 2.45.2