CMFCPopupMenu - RightClick上下文菜单快捷键因某种原因消失

时间:2018-02-13 08:23:51

标签: c++ visual-c++ mfc

我遇到人民币上下文菜单的问题,在我的主框架中,我有一个带有RMB上下文菜单事件的网格控件。快捷键正确显示。请参阅复制Ctrl + C,粘贴Ctrl + V等...

Correct

然后我有一个对话框已经有来自其他开发人员的一堆代码。而这个对话框以某种方式使人民币上下文菜单时髦。快捷键不再出现。这可能是由于更改了PreTransalateMessage而导致某些消息无法正确执行或者某些可能存在冲突的shell函数。因为当你注意到窗口时它仍在使用Windows aero基本主题,而我使用的是Windows 10,因为最小化旁边的图钉图标。

Incorrect

这是大型机和对话框中使用的代码。

void MyDialog::OnContextMenu(CWnd* pWnd, CPoint ptMousePos)
{
    CMenu *menuRightClick;
    menuRightClick->LoadMenu(IDR_RIGHTCLICK);
    CMenu *pPopupVitmMenu;
    pPopupVitmMenu = menuRightClick->GetSubMenu(9);
    ASSERT(pPopupVitmMenu);

    if (pPopupVitmMenu)
    {
        CPoint point;
        ::GetCursorPos(&point);

        CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;

        CMFCPopupMenu* pPopup = CMFCPopupMenu::GetActiveMenu();
        //close already poped up menus, if any.
        if (pPopup != NULL)
            pPopup->CloseMenu();

        pPopupMenu->Create(this, point.x, point.y, pPopupVitmMenu->Detach(), FALSE, TRUE);

        pPopupMenu->ShowWindow(SW_SHOW);
    }
}

这可能是相关的或不相关的,但是当您在另一个区域使用人民币时,旧的上下文菜单不会被贬低。只有在应用程序外部(桌面,任务栏)单击时,它才会消失。

enter image description here

我知道这些信息含糊不清,但这是我所能提供的。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用theApp.GetContextMenuManager()访问CContextMenuManagertheApp是主CWinApp类的位置。它应该在初始化期间调用InitContextMenuManager()

CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
CMenu *popup = menu.GetSubMenu(0);
if(popup)
{
    CContextMenuManager *manager = theApp.GetContextMenuManager();
    if(manager)
        //for CDialogEx:
        manager->ShowPopupMenu(popup->Detach(), p.x, p.y, this, TRUE, TRUE, FALSE);
        //for CDialog:
        //manager->ShowPopupMenu(popup->Detach(), p.x, p.y, this, FALSE, TRUE, FALSE);
}

请注意,TRUE的第5个参数应为CDialogExFALSE的{​​{1}}