// check if a native double-buffering applies for this window
virtual bool IsDoubleBuffered() const;
-
+
+ void SetDoubleBuffered(bool on);
+
// synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false
void GenerateMouseLeave();
bool wxWindowMSW::IsDoubleBuffered() const
{
- for ( const wxWindowMSW *wnd = this;
- wnd && !wnd->IsTopLevel(); wnd =
- wnd->GetParent() )
- {
- if ( ::GetWindowLong(GetHwndOf(wnd), GWL_EXSTYLE) & WS_EX_COMPOSITED )
+ const wxWindowMSW *wnd = this;
+ do {
+ long style = ::GetWindowLong(GetHwndOf(wnd), GWL_EXSTYLE);
+ if ( (style & WS_EX_COMPOSITED) != 0 )
return true;
- }
-
+ wnd = wnd->GetParent();
+ } while ( wnd && !wnd->IsTopLevel() );
+
return false;
}
+void wxWindowMSW::SetDoubleBuffered(bool on)
+{
+ // Get the current extended style bits
+ long exstyle = ::GetWindowLong(GetHwnd(), GWL_EXSTYLE);
+
+ // Twiddle the bit as needed
+ if ( on )
+ exstyle |= WS_EX_COMPOSITED;
+ else
+ exstyle &= ~WS_EX_COMPOSITED;
+
+ // put it back
+ ::SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle);
+}
+
// ---------------------------------------------------------------------------
// owner drawn stuff
// ---------------------------------------------------------------------------