2

问候。

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

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

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

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

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

我应该怎么做才能改进这些解决方案中的任何一个?我需要它既快速又正确。我可能没有提供一些必需的信息,我会在需要时补充。

提前致谢。

4

1 回答 1

0

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

于 2010-12-21T02:02:02.947 回答