我想从我的上下文弹出菜单中获取一个矩形

I want to get a rect from my contextual popup menu

我前几天问过这个问题

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

过程是这样的

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

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

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

所以我尝试获取我的弹出菜单的矩形并从进程 2 添加异常。我怎样才能得到它?

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

※ P.S 2 : 我试过用WM_MENUSELECT 留言。然而,当鼠标离开按钮 A 时,它仍然关闭弹出菜单。所以我将尝试使用 GetMenuItemRect 功能。如何使用它?

而不是使用 TrackPopupMenu 函数(它不是 return 已创建菜单的句柄),您可以显式创建并显示新的 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.
}

如果有帮助请告诉我。