2

我正在使用 CMFCPopupMenu 创建一个右键单击弹出菜单。问题是第一次显示菜单时只显示带有阴影的菜单框架,但内容是白色的。第二次显示菜单时没有问题。代码如下所示:

  CPoint point;
  ::GetCursorPos (&point);

  CMFCPopupMenu* pop = new CMFCPopupMenu(); 

  pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_1,NULL,-1,_T("Command 1")));
  pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_2,NULL,-1,_T("Command 2")));
  pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_3,NULL,-1,_T("Command 3")));
  pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_4,NULL,-1,_T("Command 4")));

  pop->Create(this,point.x,point.y,NULL,0,true); 

父类基于 CDialogEx。

谢谢。

4

2 回答 2

0

我不明白为什么我的方法不起作用,但我通过在资源中定义菜单找到了一种解决方法,并且这样做:

  CMenu menu;
  menu.LoadMenu(IDR_SESSION_MENU);
  HMENU hMenu = menu.GetSubMenu (0)->Detach ();

  CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x, point.y, this, TRUE);

这可行,唯一的问题是,根据状态和选择拥有一个带有动态条目的菜单会有点复杂。

于 2013-09-09T09:19:33.457 回答
0
CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;
if (pPopupMenu->Create(pWndOwner, point.x, point.y, NULL, FALSE, TRUE))
{
    pPopupMenu->InsertItem(CMFCToolBarMenuButton(57645, NULL, -1, _T("Command 1")), -1);
    pPopupMenu->InsertItem(CMFCToolBarMenuButton(57646, NULL, -1, _T("Command 2")), -1);
    pPopupMenu->RecalcLayout();
}

插入后需要调用RecalcLayout()

于 2017-03-06T00:43:47.950 回答