问候。
我必须创建一个可拖动的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()后实际调用它,因此,当我按下按钮时,所有内容都会正确刷新。
如何改善这些解决方案?我需要快速和正确。我可能没有提供一些必要的信息,我会补充说是需要的。
提前致谢。
答案 0 :(得分:0)
通过修改第二种方式解决了这个问题。我在OnPaint()中添加了一个完全重绘,并且为了消除闪烁,我只使用标志变量重新绘制了durng拖动。