【发布时间】:2011-08-05 07:46:26
【问题描述】:
我有一个弹出对话框(CDialog),它处理WM_CTLCOLOR 消息为自己着色。它有一些使用 OwnerDraw 绘制自己的控件(如位图按钮)。它还有一个控件,可以显示一个占对话框 70% 大小的图像。
当用户重新调整对话框大小时,对话框中的某些控件应该重新定位(而不是重新调整大小)。 它还涉及到对话框内图像的大小调整。由于图像大小的调整使整个过程变慢,控件的单独重新定位会导致视觉效果闪烁。 p>
我需要摆脱这些。一种想法是将控件作为中间对话框的子级,该中间对话框是原始弹出对话框的子级。因此,当重新调整大小时,我只能重新定位对话框,而不是单独移动每个控件。 (重新定位只发生在一个方向(x 或 y),所以移动中间对话框就足够了。
由于涉及到一些编码工作,因此在此之前,我需要回答以下问题:
- 这行得通吗?
- 如果是,这种方法涉及的复杂性是什么?
- 有没有更好的办法?
请帮忙!
【问题讨论】:
-
我对 mfc 没有任何经验,但闪烁通常表明存在线程安全问题。您的小部件不是线程安全的,因此您需要适当地处理它。有关我的意思的摇摆示例,请参阅stackoverflow.com/questions/4524786/…
-
没有 Dhruv,MFC 不是 Swing。 Windows 闪烁几乎总是因为 WM_* 标志的某些组合设置不正确。就我而言,我需要在父窗口上启用 WM_CLIPCHILDREN。