WM_SYSCOMMAND SC_MOVE吃掉鼠标事件,并且不会触发鼠标
WM_SYSCOMMAND SC_MOVE eats up mouse events and mouse up is not fired
我的程序是一个无边框窗口,当用户拖动对话框的任何部分时,我想移动窗口。使用 WM_SYSCOMMAND 后,所有后续鼠标事件都将丢失。
首先,我编写了一个程序来捕获鼠标事件,并且所有程序都可以在WTL上正常工作。
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_LBUTTONUP(OnMouseUp)
MSG_WM_LBUTTONDOWN(OnMouseDown)
....
LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
print ("on mouse down");
return 0;
}
LRESULT OnMouseUp ( UINT uKeys, CPoint pt ) {
print ("on mouse up");
return 0;
}
然后我把上面的鼠标向下更改为,
LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
print ("on mouse down");
this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002);
return 0;
}
拖动工作,窗口随鼠标移动。但是,不再触发 OnMouseUp 事件。
尝试了许多不同的方法使用WM_NCHITTEST或进程消息集处理为真/假,但没有成功。
如果有人有任何建议,非常感谢:)
感谢您描述为什么要这样做,因为有一种更好的方法:返回HTCAPTION
以响应WM_NCHITTEST
。
WM_SYSCOMMAND的 DefWindowProc 处理程序将吃掉鼠标按钮向上消息,这就是您看不到它的原因。但是,在拖动完成之前,您的 SendMessage 调用实际上不会返回,因此您可以将其视为鼠标按钮向上的通知。
相关文章:
- 跟踪滚动条上的鼠标事件
- Qt-如何在Qt3DWindow上获取鼠标事件
- Qt:如何防止为平板电脑事件生成鼠标事件
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 通过鼠标事件传递数据
- 鼠标区域窃取QQuickItem的鼠标事件
- Windows Console API鼠标事件只是进入选择模式
- 无法跟踪鼠标事件 OpenCV
- Qt. 忽略小部件中的任何鼠标事件,而不是另一个小部件
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- Juce 鼠标事件不起作用
- 是否可以捕获全局鼠标事件
- 单击QCHART图的轴时捕获鼠标事件
- OpenCV 鼠标事件始终在鼠标滚动时接收事件 10 和 *flag* 0
- 鼠标事件选取器打开场景图
- 将鼠标事件发送到虚拟现实OpenGL场景中的QtQuick窗口
- 处理鼠标事件SFML
- 是否可以在 wxFrame 中捕获鼠标事件