处理鼠标拖动的正确方法是什么?

时间:2011-05-26 16:52:50

标签: c++ windows

我需要实现类似这样的鼠标拖动事件:

class MouseDragEvent
{
public:
   uint m_btn;
   uint m_x, m_y;
   uint m_delta_x, m_delta_y;
};

我想我需要检查WM_LBUTTONDOWN和WM_LBUTTONUP消息并手动查找x和y的变化。是否有拖拽信息或更好的方式?

3 个答案:

答案 0 :(得分:7)

首先检测WM_LBUTTONDOWN。记录按下鼠标按钮的起始坐标。检查WM_MOUSEMOVE,当鼠标移动到GetSystemParameters(SM_CXDRAG)确定的矩形之外时,GetSystemParameters(SM_CYDRAG)使用SetCapture捕获鼠标。此时继续回复WM_MOUSEMOVE并检查WM_LBUTTONUP。您可能希望在此时更改鼠标光标。同时检查WM_CAPTURECHANGED,这意味着拖动已中止。拖动完成后,请致电ReleaseCapture

修改:此过程的大部分内容都可以使用DragDetect功能自动完成。从WM_LBUTTONDOWN处理程序调用此函数。

答案 1 :(得分:0)

Windows中有拖放式API(例如RegisterDragDrop),但关注的是从窗口到窗口(通常在不同的应用程序中),而不是坐标。

如果你想处理delta-x和delta-y协调,那么处理按钮和按钮消息是合适的。

答案 2 :(得分:0)