VC++實現生成右鍵選單及新增圖示
阿新 • • 發佈:2018-11-09
用VC++實現彈出選單比較簡單,這裡介紹其中的一種來實現一個滑鼠右鍵彈出選單,效果如下圖所示:
步驟:
一、新建一個基於對話方塊的MFC應用程式-----PopMenu
二、新增一個選單資源------IDR_MENU1,並加幾個子項,如下
三、新增一個Bitmap資源------IDB_BITMAP1(可以自己繪製圖標,也可以匯入圖示)
完成後專案的資源檢視如下
四、編寫程式碼
1、在對話方塊的標頭檔案CPopMenuDlg.h中新增宣告一個CMenu物件m_Menu
在OnInitDialog方法中呼叫LoadMenu方法,程式碼如下:
m_Menu.LoadMenu(IDR_MENU1); //載入選單資源
2、為對話方塊 IDD_POPMENU_DIALOG 新增滑鼠右鍵單擊的訊息(WM_RBUTTONUP) 的處理函式---OnRButtonUp
3、編寫如下程式碼
void CPopMenuDlg::OnRButtonUp(UINT nFlags, CPoint point) { // TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值 CMenu*pMenu=m_Menu.GetSubMenu(0); CBitmap m_bitmap1; CBitmap m_bitmap2; m_bitmap1.LoadBitmapW(IDB_BITMAP1); m_bitmap2.LoadBitmapW(IDB_BITMAP2); pMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap1,&m_bitmap1); pMenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&m_bitmap2,&m_bitmap2); CRect rect; ClientToScreen(&point);//將滑鼠單擊處的座標轉換為螢幕座標 rect.top=point.x;//將滑鼠當前橫座標作為彈出選單的左上角座標 rect.left=point.y;//將滑鼠當前縱座標作為彈出選單的左上角座標 pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);//顯示彈出選單 CDialogEx::OnRButtonUp(nFlags, point); }
4、在類嚮導中為每一個選單項的每一個”選單項”如”新增檔案”處理單擊事件。程式碼如下:
void CPopMenuDlg::OnMenuHello() { MessageBox(_T("'hello'項被按下")); } void CPopMenuDlg::OnMenuWorld() { MessageBox(_T("'world'項被按下")); }