用户为页面中的菜单定义的 Windows 快捷方式
Posted
技术标签:
【中文标题】用户为页面中的菜单定义的 Windows 快捷方式【英文标题】:User defined Windows shortcut for menu in pages 【发布时间】:2012-04-16 09:22:50 【问题描述】:我必须使用 Visual Studio C++ 创建一个页面,其中不同的菜单具有快捷方式(键加速器)。快捷方式应该类似于我们在 Windows 记事本中的方式,例如。(alt + f 用于文件,alt + e 用于编辑)等等。我想知道如何为页面中的菜单项实现我自己的 alt+key 快捷方式。请帮忙。
【问题讨论】:
如果你们都可以提供任何链接? 【参考方案1】:首先,您需要在资源文件 (*.rc) 中定义一个加速器资源。 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
是表的标识符。
最后,在GetMessage
之后的消息循环中调用TranslateAccelerator
(同样,请参阅MSDN 的语法),以便能够处理加速器消息。同样,在这个例子中,你可以这样做
TranslateAccelerator(hwnd, hAccel, &msg);
其中hwnd
是主窗口的HWND
,msg
是为主窗口定义的MSG
结构。
如果您正确执行所有这些操作,您的应用程序应在加速器事件发生时通过 WM_COMMAND 接收消息,并且消息的 wParam
字段将包含触发的键事件的标识符(IDD*
常量在示例表中)。
【讨论】:
以上是关于用户为页面中的菜单定义的 Windows 快捷方式的主要内容,如果未能解决你的问题,请参考以下文章
Qt Installer Framework - 在开始菜单中为所有用户创建快捷方式
怎样向开始菜单添加快捷命令 电脑怎么创建运行快捷方式到开始菜单