首页 > 解决方案 > 我想从我的上下文弹出菜单中获得一个矩形

问题描述

前几天我问过这个问题。

然后我成功了我的按钮和上下文菜单的过程。

过程是这样的。

在此处输入图像描述

  1. 当鼠标悬停在按钮 A 上时,显示弹出菜单 (1) 和 (2)。

  2. 当鼠标点离开按钮 A 时,关闭所有弹出菜单。

这很麻烦,因为当鼠标点悬停在我的弹出菜单 (1) 或 (2) 上时,请关闭所有弹出菜单。我想除了弹出菜单的区域。

因此,我尝试获取弹出菜单的正确内容并从 Process 2 添加异常。我怎样才能得到它?

※ PS 1:我使用了TrackPopupMenu函数。在我看来,直到TrackPopupMenu功能结束(如选择菜单或关闭弹出菜单)才能获得弹出菜单的矩形。我对吗?

※ PS 2 : 我尝试过使用WM_MENUSELECTMessage。但是,当鼠标点离开按钮 A 时,它仍然关闭弹出菜单。所以我会尝试使用GetMenuItemRect功能。如何使用它?

标签: c++mfccontextmenupopupmenu

解决方案


您可以显式创建TrackPopupMenu并显示一个新的CMFCPopupMenu.

在不了解实现的全部细节的情况下,您可以执行以下操作:

void MyClass:OnShowPopup(int Xpos, int Ypos) { // Xpos and Ypos are top-left corner
    CMDIFrameWndEx* frame = dynamic_cast<CMDIFrameWndEx *>(AfxGetMainWnd()); // Main frame
    CMenu menu;  menu.LoadMenu(IDM_MYPOPUP_ID); // Load from resources - or something
    CMFCPopupMenu *pPop = new CMFCPopupMenu; // New popup menu
    pPop->Create(this, Xpos, Ypos, menu.m_hMenu, FALSE, TRUE);
    CRect rc; pPop->GetWindowRect(&rc); // Here you have the popup menu's rectangle!!
    frame->OnShowPopupMenu(pPop); // This will activate the menu.
}

让我知道这是否有帮助。


推荐阅读