在任务栏上方放置托盘菜单
Placing a Tray menu over (above) taskbar
我在任务栏上方显示托盘菜单时遇到问题。我指定的y位置无关紧要,它最多只能针对任务栏。托盘菜单是一个资源。
这是我用来右键点击系统图标的代码:
// The message loop
case WM_RBUTTONUP:
{
CPoint point;
::GetCursorPos(&point);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
HMENU hMenu = menu.GetSubMenu(0)->Detach();
CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x-5, point.y, this, TRUE);
pMenu->SetForegroundWindow();
break;
}
确实,RecalcLayout确保弹出窗口显示在监视器的工作区域内(而不是遮挡任务栏)。但是没有什么可以阻止你重写这个行为。Windows菜单和CMFCPopupMenu的区别在于,菜单是一个由操作系统创建的窗口,而CMFCPopupMenu是一个模仿菜单行为的框架窗口。你几乎就在那里,但你错过了SetForegroundWindow并不移动窗口的事实,它只是改变z轴顺序。我个人认为这样做没有任何好处。然而,正如我所说,没有什么是不可能实现的。如果你真的想违背建议这么做,请遵循以下步骤:
CMFCPopupMenu* pMFCMenu = pCntxtMgr->ShowPopupMenu(hMenu, ptClick.x, ptClick.y, AfxGetMainWnd());
CRect rectMenu;
pMFCMenu->GetWindowRect(rectMenu);
pMFCMenu->SetWindowPos(&CWnd::wndTopMost, rectMenu.left, rectMenu.top + 25, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);
25只是我用于演示目的的一个任意数字。你必须计算它,以防止菜单底部出现在屏幕上。
相关文章:
- 嵌入方指针压缩已禁用
- 无法获取菜单选择以运行函数.C++
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- C++放置新和初始化
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 是什么让放置新调用对象的构造函数?
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- C++ 防止在映射中放置()时调用析构函数
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- Qt:如何使不兼容的发送方/接收方参数兼容?
- 放置派生C++的新基子对象
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 使用派生类的新放置
- 新的放置取决于 iostream
- C++17 没有默认构造函数的地图放置(私有默认构造函数)
- C++ 中的图形菜单
- 在任务栏上方放置托盘菜单