TrackMenuPopup:弹出菜单不断消失

时间:2012-07-08 01:14:02

标签: c++ c winapi contextmenu popupmenu

我创建了一个弹出菜单,当用户使用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);

2 个答案:

答案 0 :(得分:0)

我相信您检查WM_LBUTTONUPWM_LBUTTONDOWN不是正确的方法。 在创建任务栏图标时,我们指定一个回叫消息。 必须检查此消息,并在该消息中选中LPARAM WM_LBUTTONUPWM_LBUTTONDOWN

答案 1 :(得分:0)

这是托盘中应用的图标?

托盘图标发送不同内容的WM_SHELLNOTIFY消息,wParm为0,您可以测试WM_RBUTTONDOWN | lParam中的WM_RBUTTONUP。

启动时创建一次菜单,关闭托盘应用程序时删除。