我已经搜索了几天,但一直得到的是相同的答案,而不是我想要的(稍后会描述我不想要的内容)。
我想要的是:
假设有一个包含几个CStatic子控件的父对话框。 当焦点在对话框中时,父对话框使用黑色作为背景颜色;当焦点不在对话框中时,使用灰色作为背景颜色。 子静态控件只是显示文本,但其背景需要跟随父控件的背景颜色。
问题:
我可以让子控件始终跟踪父控件的颜色,但更新颜色的过程很慢,会导致闪烁。 当我使对话框获得焦点时,我可以看到对话框从灰色变成黑色,然后每个文本控件也从灰色变成黑色。 这很慢,因为它在嵌入式设备上运行。 双重缓冲不起作用,因为父控件和子控件都有自己的绘图例程,所以我认为无法共享相同的缓冲区。我读到了 WS_EX_COMPOSITE 可以在Vista上工作,但我的操作系统版本较低。
我不需要的是:
我已经了解了如何覆盖背景擦除例程(这就是我已经能够更新控件的原因)。 我知道如何使用CMemDC,但是正如所述,它在我的情况下无法工作。
有什么想法吗?我确定处理速度起了作用,但我强烈相信这只是一种我没有做对的技术或设置。我记得我的第一台PC是133MHz,但我不记得Windows 95在它们的父级失去焦点时逐个更新控件——它们几乎立即更新。当时我甚至没有一张好的显卡。
请帮忙。
附加内容: - 我尝试将控件的BkMode设置为TRANSPARENT,并甚至使用NULL_BRUSH。所有这些都与ON_WM_CTLCOLOR一起使用。我得到的只是一个有孔洞的对话框,在这些孔洞中是控件文本。换句话说,控件的背景不会被绘制(如NULL_BRUSH所预期),但该区域也未被对话框的绘图任务覆盖。 - 我正在考虑删除WS_CLIPCHILDREN,但我认为这将导致控件被绘制在上面,从而导致闪烁。
我想要的是:
假设有一个包含几个CStatic子控件的父对话框。 当焦点在对话框中时,父对话框使用黑色作为背景颜色;当焦点不在对话框中时,使用灰色作为背景颜色。 子静态控件只是显示文本,但其背景需要跟随父控件的背景颜色。
问题:
我可以让子控件始终跟踪父控件的颜色,但更新颜色的过程很慢,会导致闪烁。 当我使对话框获得焦点时,我可以看到对话框从灰色变成黑色,然后每个文本控件也从灰色变成黑色。 这很慢,因为它在嵌入式设备上运行。 双重缓冲不起作用,因为父控件和子控件都有自己的绘图例程,所以我认为无法共享相同的缓冲区。我读到了 WS_EX_COMPOSITE 可以在Vista上工作,但我的操作系统版本较低。
我不需要的是:
我已经了解了如何覆盖背景擦除例程(这就是我已经能够更新控件的原因)。 我知道如何使用CMemDC,但是正如所述,它在我的情况下无法工作。
有什么想法吗?我确定处理速度起了作用,但我强烈相信这只是一种我没有做对的技术或设置。我记得我的第一台PC是133MHz,但我不记得Windows 95在它们的父级失去焦点时逐个更新控件——它们几乎立即更新。当时我甚至没有一张好的显卡。
请帮忙。
附加内容: - 我尝试将控件的BkMode设置为TRANSPARENT,并甚至使用NULL_BRUSH。所有这些都与ON_WM_CTLCOLOR一起使用。我得到的只是一个有孔洞的对话框,在这些孔洞中是控件文本。换句话说,控件的背景不会被绘制(如NULL_BRUSH所预期),但该区域也未被对话框的绘图任务覆盖。 - 我正在考虑删除WS_CLIPCHILDREN,但我认为这将导致控件被绘制在上面,从而导致闪烁。