禁用桌面组合会导致选项卡控件闪烁

Disabling desktop composition causes flickering on Tab Control

当我禁用桌面组合时,每当我将鼠标悬停在选项卡上时,我都会得到 flickering/blinking。这仅在禁用桌面组合时发生。我试图取消 WM_ERASEBKGND 消息,但它并没有解决问题。这个问题的解决方案是什么?

这是我尝试用于 MASM 选项卡控件的示例。

http://www.dreamincode.net/forums/index.php?app=core&module=attach&section=attach&attach_id=28600

bin 已经编译。

编辑:启用WS_EX_COMPOSITED标志并添加列表视图控件后,不绘制列表视图的框架。仅当 ListView 类型设置为报告时才会发生这种情况。

问题图片:

将列表视图类型更改为报表以外的类型并绘制框架

删除 WS_EX_COMPOSITED 标志修复了问题,但闪烁又回来了

问题已通过在对话框扩展样式中使用 WS_EX_COMPOSITED 解决。

编辑: 修复我的问题的编辑是通过在列表视图上使用 SetParent 并将其附加到主 window 作为父对话框而不是子对话框。现在它正确地显示了它的框架。

所以我认为这个有问题

另一个对话框上的列表视图 -> 使用 CreateDialogParam 将其附加到主对话框(选项卡控件上方)。 WS_EX_COMPOSITED 在选项卡控件上设置

结果: 有 XP 绘图问题。非常迟钝。报表类型中列表视图的隐藏框架。如问题编辑中所示。

新方法 另一个对话框上的列表视图 -> 使用 CreateDialogParam 将其附加到主对话框(选项卡控件上方)。 WS_EX_COMPOSITED 在选项卡控件和主对话框上设置。调用 SetParent 将列表视图与其父对话框关联起来。

结果: 画的很流畅。 XP也没有问题。即使禁用桌面组合也完全没有闪烁。并保留 WM_ERASEBKGND 作为主对话框的默认值,并且没有自定义 WM_PRINT 处理。但是 WM_ERASEBKGND 禁用只需要在子对话框 DialogProc 上将 return 设置为 1.