我是否必须在资源编辑器中为所有弹出菜单添加虚拟菜单项?

时间:2018-04-13 09:00:19

标签: c++ mfc popupmenu

这是资源编辑器中的菜单结构:

Menu structure

我必须在我的所有弹出菜单中添加 ITEMS 条目。然后,在创建菜单时显示它:

CMenu mnuContext, *pMnuPopup = nullptr, *pMnuSwap = nullptr, *pMnuChairman = nullptr;

mnuContext.LoadMenu(IDR_MENU_MWB_SWAP);
pMnuPopup = mnuContext.GetSubMenu(0);

if (pMnuPopup == nullptr)
    return;

pMnuSwap = pMnuPopup->GetSubMenu(0);

//# TODO Why is it I have to go through mnuContext / pMnuPopup / pMnuSwap to get to pMnuSwap?
if (pMnuSwap == nullptr)
    return;

// Extract all the flyout menus
pMnuChairman = pMnuSwap->GetSubMenu(SwapAssignment::Chairman);

// Remove the placeholders (these were added with Resource Editor)
if(pMnuChairman != nullptr)
    pMnuChairman ->DeleteMenu(0, MF_BYPOSITION);

// Now we can populate the popup menu.

为什么我必须在编辑器中添加这个虚拟菜单项?我发现如果我不添加条目,则返回的菜单(pMnuChairman)为nullptr。如果我添加虚拟条目,那么我会得到一个有效的菜单对象并可以继续。

为什么我必须这样做?

1 个答案:

答案 0 :(得分:3)

主要问题是子菜单由其子菜单条目定义。没有什么比空菜单更好。

资源编译器也不允许这样做。

这就是Windows资源设计的方式,而且从未真正进行过审核。