刷新可拖动MFC窗口时出现问题

时间:2010-12-20 09:16:10

标签: visual-c++ mfc window drag flicker

问候。

我必须创建一个可拖动的MFC对话框窗口,它有一个背景 - 用于:http://www.codeproject.com/KB/graphics/picturewindow.aspx - 并且有几个图片框控件。我尝试了两种方法,虽然它们确实有效,但它们存在一些问题。

第一种方法是“手动” - 在LBUTTONDOWN消息上,我检查它是否; s在我窗口的干净区域,并设置一个标志变量。在MOUSEMOVE上,检查标志,如果已设置,则调用MoveWindow函数,然后调用Invalidate(1)。在LBUTTONUP上,标志未设置。 这种方法可以正常工作并根据需要重绘,但是在某种程度上非常慢 - 如果我移动光标的速度太快,窗口会掉落并且不会被拖动,因为光标不再在窗口上方。

第二种方法是“自动” - 我只是致电

DefWindowProc(WM_SYSCOMMAND,SC_MOVE + 2,MAKELPARAM(point.x,point.y));

在LBUTTONDOWN上,它处理其余部分,它很快而且永远不会落后,但是当我将它拖到屏幕边缘时(这样窗口的某些部分变得不可见),当我将其拖回时,所有控件都变得不可见而且没有刷新,背景还可以。我想这是因为Invalidate()在移动过程中没有被调用,因为我在调用DefWindowProc()后实际调用它,因此,当我按下按钮时,所有内容都会正确刷新。

如何改善这些解决方案?我需要快速和正确。我可能没有提供一些必要的信息,我会补充说是需要的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

通过修改第二种方式解决了这个问题。我在OnPaint()中添加了一个完全重绘,并且为了消除闪烁,我只使用标志变量重新绘制了durng拖动。