Adi*_*vit 5 winapi keyboard-events
我有一个 Win32 窗口消息循环。CTRL我想通过+拦截“复制到剪贴板” C。
我目前的做法是这样处理:
...
case WM_KEYDOWN:
TranslateMessage(&message);
// Intercept Ctrl+C for copy to clipboard
if ('C' == message.wParam && (::GetKeyState(VK_CONTROL)>>15))
{ // do the copy... }
...
Run Code Online (Sandbox Code Playgroud)
除了显式检查击键组合之外,还有更好的方法吗?
有没有某种方法可以注册标准的复制到剪贴板击键然后处理WM_COPY消息?
Windows 将Ctrl+C, Ctrl+V,Ctrl+X视为消息中的一个键WM_CHAR。
enum
{
CTRL_BASE = 'A' - 1,
SELECT_ALL = 'A' - CTRL_BASE, // Ctrl+A
COPY = 'C' - CTRL_BASE, // Ctrl+C
CUT = 'X' - CTRL_BASE, // Ctrl+X
PASTE = 'V' - CTRL_BASE, // Ctrl+V
UNDO = 'Z' - CTRL_BASE, // Ctrl+Z
REDO = 'Y' - CTRL_BASE, // Ctrl+Y
};
Run Code Online (Sandbox Code Playgroud)
注意: MSDN - WM_CHAR message中没有记录这一点。这是我在创建文本编辑器时观察到的。虽然在键盘输入Ctrl+A == 0x41中提到过。
使用WM_CHAR而不是手动处理WM_KEYDOWN等使处理更接近标准,特别是在按住某个键时自动重复,并且在按住额外的键时不会发出消息。
WM_COPY显然,除了钥匙之外,没有现成的方法可以为您送货。
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |