Add a SetDoubleBuffered method for wxMSW (XP+)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@53929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2008-06-02 18:27:16 +00:00
parent a31d0ae84c
commit 1736ea5474
2 changed files with 27 additions and 8 deletions

View File

@@ -428,7 +428,11 @@ public:
// check if a native double-buffering applies for this window
virtual bool IsDoubleBuffered() const;
#if wxABI_VERSION >= 20808
void SetDoubleBuffered(bool on);
#endif
// synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false
void GenerateMouseLeave();

View File

@@ -4176,17 +4176,32 @@ bool wxWindowMSW::HandlePower(WXWPARAM WXUNUSED_IN_WINCE(wParam),
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
// ---------------------------------------------------------------------------