2014-03-26 114 views
0

我正在製作一個應用程序,它會在按下某個按鈕後將對話框作爲系統托盤圖標。它工作正常,但我也需要打開相同的菜單對話框包含右鍵單擊並寫了下面的代碼:系統托盤菜單錯誤MFC

CMenu pMenu; 
pMenu.LoadMenu(IDR_MENU1); 
POINT pointCursor; 
::GetCursorPos(&pointCursor); 
pMenu.TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pointCursor.x, pointCursor.y, this); 

它創建菜單,但寬度的菜單非常薄如圖所示以下:(黃色突出顯示的區域是菜單

enter image description here

,如果我只添加第一子菜單主菜單然後它還有以下代碼:

CMenu *pMenu = GetMenu(); 
    POINT pointCursor; 
CMenu *pMenu = GetMenu(); 
    ::GetCursorPos(&pointCursor);  
    pMenu->GetSubMenu(0)->TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pointCursor.x,pointCursor.y,this); 

在應用此代碼我得到以下輸出

enter image description here

其實我需要以下菜單:

enter image description here 請推薦我哪裏做錯了

+0

問題何時發生?右鍵點擊對話框,或者在任務欄上? – rrirower

+0

@rrirower我已經寫下彈出菜單的事件右鍵單擊。 –

+0

黃色應該顯示「Open Recent User Profile」菜單項的子菜單嗎?它是什麼樣子「如果我只添加主菜單的第一個子菜單」? – rrirower

回答

0

TrackPopupMenu無法顯示菜單欄作爲其工作的一部分。菜單欄本身不顯示,因爲TrackPopupMenu需要菜單,子菜單或快捷菜單的句柄。因此,如果您真的想要包含您所展示菜單欄的相同菜單結構,則需要使用CMenu方法動態創建該結構。或者,只需使用包含菜單欄項目的不同名稱的新菜單資源作爲子菜單即可。

+0

但黃色線是我的菜單,它顯示子菜單,但不只顯示主菜單標題,即「配置文件」,「工具」等,應該有一些方法來擴大菜單條。 –

+0

我已經嘗試了你的想法創建了一個新的菜單,並將我的主菜單添加到該菜單。現在我能夠得到確切的輸出,但是當我最大化時,即恢復到對話框時,我的菜單並沒有顯示出來。如何恢復相同的菜單? –