这是资源编辑器中的菜单结构:
我必须在我的所有弹出菜单中添加 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
。如果我添加虚拟条目,那么我会得到一个有效的菜单对象并可以继续。
为什么我必须这样做?
答案 0 :(得分:3)
主要问题是子菜单由其子菜单条目定义。没有什么比空菜单更好。
资源编译器也不允许这样做。
这就是Windows资源设计的方式,而且从未真正进行过审核。