C++制作菜单时为其添加加速键问题

img

img


在家中制作菜单并为其添加accelerator加速键功能的时候,如上图所示,添加完毕后运行,其功能不能显示出来。

https://blog.csdn.net/hyman_c/article/details/50760495

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供一些指导性意见:

    要在C++中制作菜单并添加加速键功能,可以使用WinAPI或Qt等库来实现。具体实现步骤如下:

    1. 创建窗口 使用WinAPI创建窗口,或使用Qt中的QWidget类或QMainWindow类创建窗口。

    WinAPI示例代码:

    HWND hwnd = CreateWindow(
        classname, // 窗口类名
        windowname, // 窗口名称
        WS_OVERLAPPEDWINDOW, // 窗口样式
        x, y, width, height, // 窗口位置和大小
        NULL, NULL, hInstance, NULL // 参数
    );
    

    Qt示例代码:

    QMainWindow* mainWindow = new QMainWindow();
    mainWindow->show();
    
    1. 创建菜单 使用WinAPI或Qt中的QMenu类创建菜单。

    WinAPI示例代码:

    HMENU hMenu = CreateMenu(); // 创建一个菜单
    
    AppendMenu(hMenu, MF_STRING, ID_FILE_NEW, "&New"); // 添加一个菜单项
    
    SetMenu(hwnd, hMenu); // 将菜单添加到窗口
    

    Qt示例代码:

    QMenu* fileMenu = new QMenu("File"); // 创建一个菜单
    
    QAction* newAction = new QAction("&New", this);
    newAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
    fileMenu->addAction(newAction); // 添加一个菜单项,并设置快捷键
    
    QMenuBar* menuBar = new QMenuBar();
    menuBar->addMenu(fileMenu); // 将菜单添加到菜单栏
    
    setMenuBar(menuBar); // 将菜单栏添加到窗口
    
    1. 处理菜单消息 使用WinAPI或Qt中的信号与槽机制处理菜单消息。

    WinAPI示例代码:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
        switch (msg) {
            case WM_COMMAND:
                switch (LOWORD(wParam)) {
                    case ID_FILE_NEW:
                        // 处理菜单项点击事件
                        break;
                    default:
                        break;
                }
                break;
            default:
                return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    

    Qt示例代码:

    connect(newAction, &QAction::triggered, this, []() {
        // 处理菜单项点击事件
    });
    

    关于添加加速键功能,在上面的代码中我们已经给New菜单项添加了Ctrl+N快捷键。如果需要添加其他快捷键,可以在创建菜单项时设置。

    至于遇到添加完毕后运行无法显示出来的问题,需要具体看代码实现情况,如有需要可以提供代码以便分析问题所在。