禁用桌面合成会导致Tab Control闪烁

时间:2017-10-15 22:51:26

标签: assembly tabs masm masm32 windows-messages

当我禁用桌面合成时,每当我将鼠标悬停在标签上时,我都会闪烁/闪烁。仅当禁用桌面合成时才会发生这种情况。我试图取消WM_ERASEBKGND消息,但它没有解决问题。这个问题的解决方案是什么?

这是我尝试用于MASM标签控件的示例。

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

bin已经编译完毕。

编辑:启用 WS_EX_COMPOSITED 标志并添加listview控件后,不会绘制listview的帧。仅当ListView类型设置为report时才会发生这种情况。

关于此问题的图片: enter image description here

将Listview类型更改为除报告和框架之外的其他类型 enter image description here

删除 WS_EX_COMPOSITED 标志可修复此问题,但闪烁会恢复 enter image description here

1 个答案:

答案 0 :(得分:2)

使用扩展样式对话框中的 WS_EX_COMPOSITED 修复问题。

编辑: 编辑我的问题的修复方法是在Listview上使用 SetParent ,并将其作为父级而不是子对话框附加到主窗口。现在它正确显示了它的框架。

所以我觉得这个有问题

另一个对话框上的Listview - >使用 CreateDialogParam 将其附加到主对话框(Over选项卡控件)。 WS_EX_COMPOSITED 在标签控件

上设置

<强>结果: 有XP绘图问题。非常迟钝。报告类型中listview的隐藏帧。正如问题编辑所见。

新方法 列表视图在另一个对话框上 - &gt;使用 CreateDialogParam 将其附加到主对话框(Over选项卡控件)。 WS_EX_COMPOSITED 也在选项卡控件和主对话框上设置。调用 SetParent 将列表视图与主对话框关联,作为其父级。

<强>结果: 非常顺利的绘图。 XP也没有问题。即使在禁用桌面组合时也没有闪烁。并将 WM_ERASEBKGND 保留为主对话框的默认值,并且不会自定义 WM_PRINT 处理。但只有子对话框DialogProc才需要 WM_ERASEBKGND 禁用,以便将返回设置为1。