C++ - 子菜单不工作

C++ - Submenu is not working

目前我正在尝试为我的 WIN32 程序创建一个菜单。
不幸的是,我无法在其中创建子菜单。 这是我的代码:

HMENU menu = CreateMenu();
HMENU mFile = CreatePopupMenu();

AppendMenu(menu, MF_STRING | MF_POPUP, (UINT_PTR)mFile, L"File");
AppendMenu(mFile, MF_STRING, NULL, L"Exit");

SetMenu(hwnd, menu);

菜单本身按预期显示,但是当我单击 "File" 时没有任何反应。
不过当我点击文件时应该会出现一个子菜单。
谁能解释一下这段代码不起作用的原因是什么?

编辑:@IInspectable 感谢您的建议!我检查了 return 值,它是 0,所以函数失败了。令人惊讶的是,以下代码有效:

HMENU menu = CreateMenu();
HMENU mFile = CreatePopupMenu();

AppendMenu(menu, MF_STRING | MF_POPUP, (UINT_PTR)mFile, L"File");
AppendMenu(mFile, MF_STRING, NULL, L"Exit");

MessageBox(hwnd, L"An error occured.", L"Error!", MB_OK);

SetMenu(hwnd, menu);

我不知道为什么要使用此代码,但现在当我单击 "File" 时会显示子菜单。
对此行为有任何解释吗?

您的代码没有任何问题。它适用于我的系统。但是,设计 "sort of" 不正确。

mFile应该是常规菜单。之后的任何 sub-menus 也是常规菜单,除非它们本身是父菜单..

示例:

#define EXIT_ID 1

case WM_CREATE:
{
    HMENU hMenubar = CreateMenu();
    HMENU hFileMenu = CreateMenu(); //file is a regular menu.. Exit is a regular sub-menu..

    AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hFileMenu, "File"); //create file menu.
    AppendMenu(hFileMenu, MF_STRING, EXIT_ID, "Exit");  //regular menu. Has no children.
    SetMenu(hwnd, hMenubar);
}
break;

示例 2:

#define EXIT_ID 1
#define SUB_ID 2

case WM_CREATE:
{
    HMENU hMenubar = CreateMenu();
    HMENU hFileMenu = CreateMenu(); //file is a regular menu.. Exit is a regular sub-menu..
    HMENU hDisplayMenu = CreatePopupMenu(); //display is a popup-menu because it has children.

    AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hFileMenu, "File");
    AppendMenu(hFileMenu, MF_STRING | MF_POPUP, (UINT_PTR)hDisplayMenu, "Display"); //popup menu. Has children.
    AppendMenu(hDisplayMenu, MF_STRING, SUB_ID, "Sub"); //regular menu. Has no children.
    AppendMenu(hFileMenu, MF_STRING, EXIT_ID, "Exit"); //regular menu. Has no children.
    SetMenu(hwnd, hMenubar);
}
break;

所以,我弄清楚了导致下拉菜单在单击时不显示的原因。老实说,有点尴尬,但我将扩展 window 样式设置为 WS_EX_NOACTIVATION。如果将其替换为其他任何内容,则会显示菜单。