gpt4 book ai didi

c++ - CMFCPopupMenu - 右键单击​​上下文菜单快捷键由于某种原因消失

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:40 24 4
gpt4 key购买 nike

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

Correct

然后我与其他开发人员的一堆代码进行了对话。这个对话框不知何故使 RMB 上下文菜单变得时髦。快捷键不再出现。这可能是由于更改了 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

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

最佳答案

使用 theApp.GetContextMenuManager() 访问 CContextMenuManager。其中 theApp 是主要的 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);
}

请注意,CDialogEx 的第 5 个参数应为 TRUECDialog 的第 5 个参数应为 FALSE

关于c++ - CMFCPopupMenu - 右键单击​​上下文菜单快捷键由于某种原因消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com