我需要实现类似这样的鼠标拖动事件:
class MouseDragEvent
{
public:
uint m_btn;
uint m_x, m_y;
uint m_delta_x, m_delta_y;
};
我想我需要检查WM_LBUTTONDOWN和WM_LBUTTONUP消息并手动查找x和y的变化。是否有拖拽信息或更好的方式?
答案 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)