我必须使用visual studio c ++创建一个页面,其中不同的菜单有快捷键(关键加速器)。快捷方式应该像我们在Windows记事本中的方式一样。(alt + f表示文件,alt + e表示编辑)我想知道如何为我页面中的菜单项实现自己的alt +键快捷键。请帮忙。
答案 0 :(得分:0)
首先,您需要在资源文件(* .rc)中定义ACCELERATORS资源。 MSDN docs给出了加速器表的示例。
1 ACCELERATORS
{
"^C", IDDCLEAR ; control C
"K", IDDCLEAR ; shift K
"k", IDDELLIPSE, ALT ; alt k
98, IDDRECT, ASCII ; b
66, IDDSTAR, ASCII ; B (shift b)
"g", IDDRECT ; g
"G", IDDSTAR ; G (shift G)
VK_F1, IDDCLEAR, VIRTKEY ; F1
VK_F1, IDDSTAR, CONTROL, VIRTKEY ; control F1
VK_F1, IDDELLIPSE, SHIFT, VIRTKEY ; shift F1
VK_F1, IDDRECT, ALT, VIRTKEY ; alt F1
VK_F2, IDDCLEAR, ALT, SHIFT, VIRTKEY ; alt shift F2
VK_F2, IDDSTAR, CONTROL, SHIFT, VIRTKEY ; ctrl shift F2
VK_F2, IDDRECT, ALT, CONTROL, VIRTKEY ; alt control F2
}
您将编译资源文件(使用RC,Microsoft资源编译器)并将生成的* .res文件与您的应用程序链接。
接下来,在WinMain
中,使用资源表的标识符调用LoadAccelerators
(请参阅MSDN了解语法),以便应用程序可以访问它。对于上表,您可以
HACCEL hAccel = LoadAccelerators(hInstance, 1);
其中hInstance
是您应用的HINSTANCE
,1
是表格的标识符。
最后,在TranslateAccelerator
之后,在消息循环中调用GetMessage
(再次,请参阅MSDN的语法),以便能够处理加速器消息。同样,在这个例子中,你可以做
TranslateAccelerator(hwnd, hAccel, &msg);
其中hwnd
是主窗口的HWND
,msg
是为您的主窗口定义的MSG
结构。
如果您正确执行了所有这些操作,则每当发生加速器事件时,您的应用程序都应通过WM_COMMAND收到消息,并且消息的wParam
字段将包含已触发的键事件的标识符({{ 1}}示例表中的常量。)