我有一个带有菜单和编辑类句柄的窗口。在菜单中,我有一个编辑部分,包含剪切,复制,粘贴,ecc等选项。键盘加速器不会捕获CTRL + A
我已经定义了2个键盘快捷键:
IDR_ACCELERATOR2 ACCELERATORS
BEGIN
"A", ID_EDIT_SALL, VIRTKEY, CONTROL, NOINVERT
"Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT
END
CTRL + Z的作品,但CTRL + A没有。 在WM_COMMAND
情况下,我有这样的:
switch (LOWORD(wParam))
{
case ID_EDIT_CLEAR:
SendMessage(hwndEdit, WM_CLEAR, 0, 0);
break;
case ID_EDIT_COPY:
SendMessage(hwndEdit, WM_COPY, 0, 0);
break;
case ID_EDIT_CUT:
SendMessage(hwndEdit, WM_CUT, 0, 0);
break;
case ID_EDIT_PASTE:
SendMessage(hwndEdit, WM_PASTE, 0, 0);
break;
case ID_EDIT_SALL:
SendMessage(hwndEdit, EM_SETSEL, 0, -1);
break;
case ID_EDIT_UNDO:
SendMessage(hwndEdit, WM_UNDO, 0, 0);
break;
}
当我点击菜单选项Select All
,选择效果很好,但它选择在编辑器中处理所有的文字,但是当我尝试使用键盘组合CTRL + A的Windows使得该错误声音
更新(当您试图删除一个空文档中的单词等):消息循环
BOOL msgCheck;
while ((msgCheck = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if (msgCheck == -1)
{
MessageBox(NULL, TEXT("Error!"), TEXT("Error"), MB_ICONERROR);
return -1;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
仅用于测试,在IDR_ACCELERATOR2加速器表中反转A和Z,看看会发生什么。 –
好的,我认为CTRL + Z是由系统控制的,因为它没有改变任何东西。现在我尝试添加链接到CUT选项的CTRL + L(不是“系统”组合),它也不起作用。 – Astinog
你说得对,Ctrl-Z是由Windows处理的。 –