Do nothing in wxListCtrl::SetDoubleBuffered() in wxMSW

Setting WS_EX_COMPOSITED, as the base class version does, just results
in visual artefacts and is useless, as we turn on LVS_EX_DOUBLEBUFFER
already, if it's supported, anyhow.

So don't break the display if people call SetDoubleBuffered() in the
mistaken belief that it does something useful in this case.
This commit is contained in:
Vadim Zeitlin
2019-10-11 15:34:49 +02:00
parent 18e05aeeee
commit a668db8b64
2 changed files with 16 additions and 0 deletions

View File

@@ -360,6 +360,11 @@ public:
// Necessary for drawing hrules and vrules, if specified
void OnPaint(wxPaintEvent& event);
// Override SetDoubleBuffered() to do nothing, its implementation in the
// base class is incompatible with the double buffering done by this native
// control.
virtual bool IsDoubleBuffered() const;
virtual void SetDoubleBuffered(bool on);
virtual bool ShouldInheritColours() const wxOVERRIDE { return false; }

View File

@@ -466,6 +466,17 @@ void wxListCtrl::OnDPIChanged(wxDPIChangedEvent &event)
}
}
bool wxListCtrl::IsDoubleBuffered() const
{
// LVS_EX_DOUBLEBUFFER is turned on for comctl32 v6+.
return wxApp::GetComCtl32Version() >= 600;
}
void wxListCtrl::SetDoubleBuffered(bool WXUNUSED(on))
{
// Nothing to do, it's always enabled if supported.
}
#if WXWIN_COMPATIBILITY_3_0
// Deprecated
void wxListCtrl::UpdateStyle()