c++ - WM_SYSCOMMAND SC_MOVE 耗尽鼠标事件并且鼠标弹起未触发

标签 c++ windows atl wtl

我的程序是一个无边框窗口,我想在用户拖动对话框的任何部分时移动窗口。一旦使用 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;
}

然后我将上面的 onMouseDown 更改为,

LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
    print ("on mouse down");
    this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002);
    return 0;
}

拖动有效,窗口随鼠标一起移动。但是,不再触发 OnMouseUp 事件。

使用 WM_NCHITTEST 或 ProcessMessage setHandled 尝试了许多不同的方法,但都没有成功。

非常感谢,如果有人有任何建议:)

最佳答案

感谢您描述您这样做的原因,因为有更好的方法:Return HTCAPTION in response to WM_NCHITTEST .

关于c++ - WM_SYSCOMMAND SC_MOVE 耗尽鼠标事件并且鼠标弹起未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979278/

相关文章:

windows - 与 GUI 应用程序相比,相同的代码作为 Windows 服务运行得更慢

c++ - 创建实现特定接口(interface)的 ATL COM 对象

c++ - 数组损坏其字符 C++

c++ - 如何保留条件操作的结果?

c++ - C++ 智能指针中带循环的引用计数

windows - 如何运行 Lua 脚本?

c++ - 计算点和平面之间的 3d 距离,C++

ios - 适用于 Mac 上 Windows 的 Cordova 插件添加/删除

c++ - ATL项目中如何保持全局变量值不变?

c++ - 如何禁用对话框 "switch to"-"retry"-"cancel"