用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'項被按下")); }
