Only use double buffering for MSW wxListCtrl when using themes
LVS_EX_DOUBLEBUFFER doesn't seem to work correctly with comctl32.dll v5, and results in artefacts when the control is resized, so don't enable it for it. Closes #18441.
This commit is contained in:
@@ -322,22 +322,28 @@ void wxListCtrl::MSWSetExListStyles()
|
|||||||
{
|
{
|
||||||
// we want to have some non default extended
|
// we want to have some non default extended
|
||||||
// styles because it's prettier (and also because wxGTK does it like this)
|
// styles because it's prettier (and also because wxGTK does it like this)
|
||||||
::SendMessage
|
int exStyle =
|
||||||
(
|
|
||||||
GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
|
|
||||||
LVS_EX_LABELTIP |
|
LVS_EX_LABELTIP |
|
||||||
LVS_EX_FULLROWSELECT |
|
LVS_EX_FULLROWSELECT |
|
||||||
LVS_EX_SUBITEMIMAGES |
|
LVS_EX_SUBITEMIMAGES |
|
||||||
LVS_EX_DOUBLEBUFFER |
|
|
||||||
// normally this should be governed by a style as it's probably not
|
// normally this should be governed by a style as it's probably not
|
||||||
// always appropriate, but we don't have any free styles left and
|
// always appropriate, but we don't have any free styles left and
|
||||||
// it seems better to enable it by default than disable
|
// it seems better to enable it by default than disable
|
||||||
LVS_EX_HEADERDRAGDROP
|
LVS_EX_HEADERDRAGDROP;
|
||||||
);
|
|
||||||
|
|
||||||
// As we use LVS_EX_DOUBLEBUFFER above, we don't need to erase our
|
if ( wxApp::GetComCtl32Version() >= 600 )
|
||||||
// background and doing it only results in flicker.
|
{
|
||||||
SetBackgroundStyle(wxBG_STYLE_PAINT);
|
// We must enable double buffering when using the system theme to avoid
|
||||||
|
// various display glitches and it should be harmless to just always do
|
||||||
|
// it when using comctl32.dll v6.
|
||||||
|
exStyle |= LVS_EX_DOUBLEBUFFER;
|
||||||
|
|
||||||
|
// When using LVS_EX_DOUBLEBUFFER, we don't need to erase our
|
||||||
|
// background and doing it only results in flicker.
|
||||||
|
SetBackgroundStyle(wxBG_STYLE_PAINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
::SendMessage(GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, exStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
WXDWORD wxListCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
|
WXDWORD wxListCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
|
||||||
|
Reference in New Issue
Block a user