用户为页面中的菜单定义的 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 是您的应用程序的HINSTANCE1 是表的标识符。

最后,在GetMessage 之后的消息循环中调用TranslateAccelerator(同样,请参阅MSDN 的语法),以便能够处理加速器消息。同样,在这个例子中,你可以这样做

TranslateAccelerator(hwnd, hAccel, &msg);

其中hwnd 是主窗口的HWNDmsg 是为主窗口定义的MSG 结构。

如果您正确执行所有这些操作,您的应用程序应在加速器事件发生时通过 WM_COMMAND 接收消息,并且消息的 wParam 字段将包含触发的键事件的标识符(IDD* 常量在示例表中)。

【讨论】:

以上是关于用户为页面中的菜单定义的 Windows 快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

Windows10实用技巧-固定快捷方式到磁贴菜单方式

Tinymce-如何让用户知道快捷方式

Qt Installer Framework - 在开始菜单中为所有用户创建快捷方式

怎样向开始菜单添加快捷命令 电脑怎么创建运行快捷方式到开始菜单

[转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项

电脑系统windows10怎么切换用户?