捕获鼠标但未聚焦窗口时捕获键盘事件(Win32)
Capture keyboard events while mouse is captured but window not focused (Win32)
我正在实现一个可以启动拖动事件的自定义控件。当用户按下鼠标左键时,我通过处理WM_LBUTTONDOWN
并调用SetCapture()
来启动拖动。这会导致所有鼠标事件,甚至是我控件的客户端区域之外的事件,都被发送到它,完全按照我的意愿。
我还希望能够捕捉按键,这样如果用户按下ESC键(VK_ESCAPE
),我就可以取消拖动。由于我的控件没有键盘焦点(我不希望它从有键盘焦点的控件上偷走焦点),我无法收听WM_KEYDOWN
。由于其他太复杂而无法解释的原因,我也不希望使用DragDetect()
函数。
在拖动过程中,我的控件如何了解ESC键的按下情况?
事实证明这很容易:
// message loop...
switch (msg)
{
// ...
case WM_LBUTTONDOWN:
// do some stuff
RegisterHotKey(hwnd, 0 /* id */, 0, VK_ESCAPE);
// do some more stuff
break;
// ...
case WM_HOTKEY:
if (VK_ESCAPE == HIWORD(lParam) &&
IDHOT_SNAPDESKTOP != wParam &&
IDHOT_SNAPWINDOW != wParam)
{
// handle ESC keypress
UnregisterHotKey(hwnd, 0 /* id */);
}
break;
// ...
}
相关文章:
- Win32编译器选项和内存分配
- C++和Win32 WC_DIALOG关闭事件问题
- SDL2 + Win32 API 菜单栏单击事件不起作用
- Win32设备事件:在DBT_DEVICEARIVAL事件上未接收到DBT_DEVTYP_VOLUME
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 注册以在 MFC 中发出 Win32 事件信号时接收 Windows 消息
- Win32获取从窗口WNDProc发送事件的对象的HWND
- 使用Select()在Win32中进行本地事件
- 捕获鼠标但未聚焦窗口时捕获键盘事件(Win32)
- 排队的事件数量?(Win32事件队列)
- Win32 将同步事件发送到其他进程
- win32 之上的面向对象的库,不需要控制主事件循环
- C++Win32窗口重叠事件
- 管理Win32应用程序和QWinMigrate之间的键盘事件
- win32事件钩子的c++回调
- 思考一种不同的方式来运行win32事件循环没有WndProc
- 如何在win32项目的OnLbnSelchange()事件中查找列表框上的选定项
- win32 (c++)中的动画和事件问题
- 检测是否采取了事件- win32
- 如何确定 Win32 事件的信号状态