我已经创建了一个弹出式菜单,当用户使用TrackPopupMenu点击任务栏图标时,它将显示出来。该代码运行良好,直到我在菜单外单击以取消选择项目。然后,每当我用鼠标左键/右键单击图标时,菜单就会弹出,并在我看到它之前立即消失(看起来TrackPopupMenu立即返回0)。MDSN告诉了在TrackPopupMenu之后添加PostMessage(hDlg, WM_NULL, 0, 0);的修复方法,但它不起作用。
下面是我的代码:
case WM_LBUTTONUP :
case WM_RBUTTONUP :
POINT p;
GetCursorPos(&p);
HMENU hPopupMenu = CreatePopupMenu();
AppendMenu(hPopupMenu, MF_ENABLED, ID_ADDMUSIC, L"Add music" );
AppendMenu(hPopupMenu, MF_ENABLED, ID_REMOVEMUSIC, L"Remove music");
SetForegroundWindow(msgInfo->hwnd);
result = TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_RIGHTALIGN | TPM_NONOTIFY |
TPM_RETURNCMD | TPM_RIGHTBUTTON | TPM_VERNEGANIMATION,
p.x, p.y, 0, msgInfo->hwnd, NULL);
PostMessageW(msgInfo->hwnd, WM_NULL, 0, 0);
DestroyMenu(hPopupMenu);发布于 2012-07-08 11:22:49
我相信你检查WM_LBUTTONUP和WM_LBUTTONDOWN不是正确的方法。在创建任务栏图标时,我们指定一个回调消息。必须检查此消息,且在该消息中检查WM_LBUTTONUP和WM_LBUTTONDOWN LPARAM。
发布于 2012-07-08 11:35:33
这是你的应用程序的图标吗?
托盘图标为不同的内容发送WM_SHELLNOTIFY消息,wParm为0,您可以在lParam中测试WM_RBUTTONDOWN | WM_RBUTTONUP。
在启动时创建一次菜单,关闭托盘应用程序时删除。
https://stackoverflow.com/questions/11379953
复制相似问题