c++ - 我想从我的上下文弹出菜单中获得一个矩形
问题描述
前几天我问过这个问题。
然后我成功了我的按钮和上下文菜单的过程。
过程是这样的。
当鼠标悬停在按钮 A 上时,显示弹出菜单 (1) 和 (2)。
当鼠标点离开按钮 A 时,关闭所有弹出菜单。
这很麻烦,因为当鼠标点悬停在我的弹出菜单 (1) 或 (2) 上时,请关闭所有弹出菜单。我想除了弹出菜单的区域。
因此,我尝试获取弹出菜单的正确内容并从 Process 2 添加异常。我怎样才能得到它?
※ PS 1:我使用了TrackPopupMenu
函数。在我看来,直到TrackPopupMenu
功能结束(如选择菜单或关闭弹出菜单)才能获得弹出菜单的矩形。我对吗?
※ PS 2 : 我尝试过使用WM_MENUSELECT
Message。但是,当鼠标点离开按钮 A 时,它仍然关闭弹出菜单。所以我会尝试使用GetMenuItemRect
功能。如何使用它?
解决方案
您可以显式创建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.
}
让我知道这是否有帮助。
推荐阅读
- javascript - 使用 NavLink 动态地将最后两个单词包装在字符串中
- flutter - 为什么在 Flutter 中添加周期性 Timer 后每秒都会重新初始化所有内容?
- mysql - 在 SQL 1 错误代码中创建表。1241
- typescript - 自定义模态对话的开头
- apache-kafka - 使用 SSL 连接到 Kafka 集群时,使用 Apache Camel 获取 PKIX 路径构建失败异常
- python - Python kivy:嵌套滚动视图
- javascript - owl-carousel 不适用于最近购买的模板
- ansible - 在剧本之间保留/缓存事实的任何技巧
- spring - 如何配置 Spring 以使用 Json4s 序列化响应主体?
- python - 如何在python中获得匹配的模式