方法:
MFC中利用CMenu類動態添加快顯功能表和響應函數
步驟:
1 聲明一個菜單:
CMenu menu;
2 產生菜單對象:
menu.CreatePopupMenu();
3 給菜單添加上內容:
menu.AppendMenu(MF_STRING,WM_CLEARHOSTS,"清除HOSTS");
AppendMenu函數具體的意義可以查看MSDN,其中WM_CLEARHOSTS為自訂的一個訊息,最後一個參數為菜單的text,點擊這個菜單就可以調用WM_CLEARHOSTS訊息的處理函數。
4 添加子快顯功能表:
CMenu submenu;
submenu.CreatePopupMenu();
menu.AppendMenu(MF_POPUP,(UINT_PTR)(submenu.m_hMenu),"sub");
5 設定當失去焦點時菜單自動消失
SetForegroundWindow();
6 設定菜單的位置:
menu.TrackPopupMenu();
以上各步串連起來就是一個完整的動態產生菜單的步驟,當動態產生的菜單很多且菜單又不固定的時候,預先
為每個菜單都定義一個訊息和訊息處理函數是很麻煩且不現實的,現在介紹一種方法來動態響應動態產生的菜單。
其原理就是利用OnCommand函數。
首先,要為每一個動態產生的菜單指定一個ID,方式如下
menu.AppendMenu(MF_STRING,ID,"yourMenuName");
其中參數ID為一個唯一的整數,可以由你自己指定,當按一下滑鼠此菜單的時候,系統發送一個訊息,此訊息優先
被OnCommand函數接收,OnCommand函數的原形為:
BOOL OnCommand(WPARAM wParam, LPARAM lParam);
假如你指定菜單的ID為10001,響應函數的具體寫法為:
BOOL OnCommand(WPARAM wParam, LPARAM lParam)
{
int menuID = LOWORD(wParam);
if(menuID > 10000)
{
//添加你自己的處理代碼
}
}