我正在使用C ++和Win32。
我希望我的上下文菜单和设置对话框显示在托盘图标附近。我想我需要图标的坐标才能做到这一点。
在Windows 7之前,Shell_NotifyIconGetRect无法使用。
WM_CONTEXTMENU从Win2k开始可用,但仅在Vista中提供wParam中的坐标(当指定NOTIFYICON_VERSION_4时)。
答案 0 :(得分:2)
解决此问题的正确方法是使用鼠标消息坐标,或GetMessagePos用于其他消息。
答案 1 :(得分:1)
使用GetCursorPos检索点击坐标效果很好:
// Inside WndProc's switch(message)...
case WM_APP_NOTIFYCALLBACK:
switch (LOWORD(lParam))
{
case WM_CONTEXTMENU: // XP and later
{
POINT pt = {};
if( GetCursorPos(&pt) )
ShowContextMenu(hWnd, pt, iStatus);
}
break;
// ...
}
// ...
答案 2 :(得分:0)
要显示菜单,您只需要通过WM_CONTEXTMENU或WM_RBUTTONUP传递给您的坐标(这些当然不是正常的消息,而是托盘生成的东西,因此您无需处理鼠标vs键盘)
如果要在托盘附近显示Toast(自定义窗口),则使用Shell_NotifyIconGetRect。在< 7你可以通过查找带有Shell_TrayWnd作为父级的TrayNotifyWnd类来使用findwindow来模拟它