我一直在Google上搜索几天,我所得到的只是相同的答案,但不是我想要的(我将描述我以后不想要的东西)。MFC:如何避免在子控件更新中闪烁?
我要的是:
- 说我有了一些静态控件的子控件父对话框。
- 父对话框在对焦时使用黑色作为背景,而在未对焦时使用灰色。
- 孩子静态控件只显示文本,但它的背景需要遵循父母的背景色
问题:
- 我能得到孩子的控件始终跟踪父的颜色但是更新颜色的过程很慢并且会导致闪烁。
- 当我将对话框放在焦点上时,我可以看到对话框的颜色从灰色变为黑色,然后每个文本控件也从灰色变为黑色。
- 这很慢,因为它在嵌入式设备上。
双缓冲将不起作用,因为父母和孩子有自己的绘画例程,所以我认为不可能共享相同的缓冲区。我已经读过WS_EX_COMPOSITE或其他一些适用于Vista的东西,但我在低端操作系统上。
我不需要什么:
- 我已经知道如何重写背景擦除程序(这就是为什么我已经得到控制,以更新)
- 我知道如何普遍使用CMemDC类,但正如所述,它不适用于我的情况。
任何想法,家伙?我确信处理速度是其中的一部分,但我坚信这只是一种技术或设置,我没有做到这一点。我记得我的第一台PC是133MHz,但当他们的父母失去焦点时,我不记得Windows 95更新控制 - 他们几乎立即更新。那时我甚至没有一张好的视频卡。
请帮忙。
增加: - 我试图使控件的BkMode是透明的,甚至使用NULL_BRUSH。所有这些与ON_WM_CTLCOLOR一起。我得到的只是一个带孔的对话框,在这些孔中是控制文本。换句话说,不是控件的背景,而是简单地没有绘制(如NULL_BRUSH所预期的那样),但是该区域没有被对话框的绘画作业覆盖。 - 我正在考虑删除WS_CLIPCHILDREN,但是我相信这会导致控件无论如何被拖动,所以再次闪烁。
我不知道任何关于MFC的,所以请问如果这不是一个相关的问题,但它是不可能的只是设置子控件有一个透明的背景? –
啊,是的,我也想到了这一点。我会更新我的初始文章,以反映我曾经遇到的问题。 – Ryuu
您使用的是哪个版本的MFC和Visual Studio? – ChrisBD