我需要实现如下所示的鼠标拖动事件:
class MouseDragEvent
{
public:
uint m_btn;
uint m_x, m_y;
uint m_delta_x, m_delta_y;
};
我想我需要检查 WM_LBUTTONDOWN 和 WM_LBUTTONUP 消息并手动查找 x 和 y 的变化。有没有拖拽信息或者更好的方法?
最佳答案
首先检测 WM_LBUTTONDOWN
。记录按下鼠标按钮的起始坐标。检查 WM_MOUSEMOVE
,当鼠标移出由 GetSystemParameters(SM_CXDRAG)
和 GetSystemParameters(SM_CYDRAG)
确定的矩形时,使用 SetCapture
捕获鼠标。此时继续响应 WM_MOUSEMOVE
并检查 WM_LBUTTONUP
。此时您可能想要更改鼠标光标。还要检查 WM_CAPTURECHANGED
,这意味着拖动已中止。拖动完成后调用 ReleaseCapture
。
编辑:这个过程的大部分都可以通过 DragDetect
函数自动完成。从 WM_LBUTTONDOWN 处理程序调用此函数。
关于c++ - 处理鼠标拖动的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142206/