2012-07-08 130 views
0

我創建了一個彈出式菜單,當用戶通過使用TrackPopupMenu單擊任務欄圖標時將顯示該菜單。 代碼工作正常,直到我點擊菜單外部取消選擇項目。然後,每當我離開/右鍵點擊圖標,彈出菜單並立即消失,然後我看到它(看起來像TrackPopupMenu立即返回0)。 MDSN通過在TrackPopupMenu之後添加PostMessage(hDlg, WM_NULL, 0, 0);來解決問題,但它不起作用。TrackMenuPopup:彈出菜單不斷消失

這裏是我的代碼:

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); 

回答

0

我相信你檢查了WM_LBUTTONUPWM_LBUTTONDOWN不這樣做的正確方法。 在創建任務欄圖標時,我們指定回調消息。 這是必須檢查的消息,並在該消息檢查LPARAMWM_LBUTTONUPWM_LBUTTONDOWN

0

這是您的應用程序在托盤中的圖標?

托盤圖標發送一個WM_SHELLNOTIFY消息爲不同的事情,wParm是0,您可以測試WM_RBUTTONDOWN | WM_RBUTTONUP在lParam中。

在啓動時創建一次菜單,並在關閉托盤應用程序時刪除。