From: Vadim Zeitlin Date: Tue, 24 May 2005 19:18:15 +0000 (+0000) Subject: subclass all updown controls in notebooks, not just the first one X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/dfb47d834d8de400c2738f0c8b05bc7d7dd80206 subclass all updown controls in notebooks, not just the first one git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34320 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/notebook.h b/include/wx/msw/notebook.h index 90c0fc7b81..483eecbeb2 100644 --- a/include/wx/msw/notebook.h +++ b/include/wx/msw/notebook.h @@ -222,6 +222,16 @@ protected: bool DoDrawBackground(WXHDC hDC, wxWindow *child = NULL); #endif // wxUSE_UXTHEME + // these function are only used for reducing flicker on notebook resize and + // we don't need to do this for WinCE +#ifndef __WXWINCE__ + void OnEraseBackground(wxEraseEvent& event); + void OnPaint(wxPaintEvent& event); + + // true if we have already subclassed our updown control + bool m_hasSubclassedUpdown; +#endif // __WXWINCE__ + // the current selection (-1 if none) int m_nSelection; @@ -232,11 +242,6 @@ protected: WXHBRUSH m_hbrBackground; #endif // wxUSE_UXTHEME - // No need to optimize for WinCE -#ifndef __WXWINCE__ - void OnEraseBackground(wxEraseEvent& event); - void OnPaint(wxPaintEvent& event); -#endif DECLARE_DYNAMIC_CLASS_NO_COPY(wxNotebook) DECLARE_EVENT_TABLE() diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index f5aa19e983..8fb74d7e20 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -229,6 +229,10 @@ void wxNotebook::Init() #if wxUSE_UXTHEME m_hbrBackground = NULL; #endif // wxUSE_UXTHEME + +#if USE_NOTEBOOK_ANTIFLICKER + m_hasSubclassedUpdown = false; +#endif // USE_NOTEBOOK_ANTIFLICKER } // default for dynamic class @@ -921,7 +925,7 @@ void wxNotebook::OnSize(wxSizeEvent& event) #if USE_NOTEBOOK_ANTIFLICKER // subclass the spin control used by the notebook to scroll pages to // prevent it from flickering on resize - if ( !gs_wndprocNotebookSpinBtn ) + if ( !m_hasSubclassedUpdown ) { // iterate over all child windows to find spin button for ( HWND child = ::GetWindow(GetHwnd(), GW_CHILD); @@ -935,9 +939,11 @@ void wxNotebook::OnSize(wxSizeEvent& event) if ( !childWindow ) { // subclass the spin button to override WM_ERASEBKGND - gs_wndprocNotebookSpinBtn = (WXFARPROC)wxGetWindowProc(child); + if ( !gs_wndprocNotebookSpinBtn ) + gs_wndprocNotebookSpinBtn = (WXFARPROC)wxGetWindowProc(child); wxSetWindowProc(child, wxNotebookSpinBtnWndProc); + m_hasSubclassedUpdown = true; break; } }