我必须使用具有快捷方式(键加速器)的不同菜单的 Visual Studio C++ 创建一个页面。快捷方式应该类似于我们在 Windows 记事本中的方式,例如(alt + f 用于文件,alt + e 用于编辑)等。我想知道如何为页面中的菜单项实现我自己的 alt+key 快捷方式。请帮忙。
问问题
1410 次
1 回答
0
首先,您需要在资源文件 (*.rc) 中定义一个 ACCELERATORS 资源。MSDN 文档给出了加速表的这个例子。
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
(同样,参见MSDN的语法) after GetMessage
,以便能够处理加速器消息。同样,在这个例子中,你可以做
TranslateAccelerator(hwnd, hAccel, &msg);
哪里hwnd
是HWND
你的主窗口,msg
是MSG
为你的主窗口定义的结构。
如果您正确执行所有这些操作,您的应用程序应在加速器事件发生时通过 WM_COMMAND 接收消息,并且wParam
消息的字段将包含触发的键事件的标识符(IDD*
示例表中的常量)。
于 2012-08-08T22:01:11.513 回答