在寫代碼的過程中,程序需要讀取CTreeViewCtrl的根節點下的次級節點,並生成到子菜單加入到葉子列表的右鍵菜單中,實際操作如下:
1)刪除原有的菜單
這一步很重要,因為動態生成的菜單只要加進去是不會自己刪除的
//先刪除原有的menu
CMenuHandle menu =
pMenu->GetSubMenu(0).GetSubMenu(MY_MOVE_FRIENT_MENU_POS);
//MY_MOVE_FRIENT_MENU_POS定義在程序起始處,為該二級菜單在右鍵菜單中的位置
for (int i =
menu.GetMenuItemCount(); i > 0; i--)
{
menu.RemoveMenu(i,
MF_BYPOSITION);
}
2)讀取CTreeView的次級節點
//先讀取CTreeViewCtrl的根節點3)插入到子菜單中
HTREEITEM hRoot = m_wndLocalList.GetRootItem(); //讀取CTreeViewCtrl的第一個孩子節點,即第一個子節點
HTREEITEM hFirst = m_wndLocalList.GetChildItem(hRoot);
while(hFirst != NULL)4)對菜單的響應 在BEGIN_MSG_MAP()與END_MSG_MAP中添加
{
if (strFirst.Compare( strItemSelParent)!= 0)
{//判斷語句,對本子節點的父幾點不進行插入操作
menu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, (UINT)ID_MENU_ADD_FRIEND_TO_GROUP+(*piMenuID), strFirst);
*piMenuID = *piMenuID + 1;
}
//執行插入菜單操作或者跳過插入操作後,均需要獲取下一個節點對象 hFirst = m_wndLocalList.GetNextItem(hFirst,TVGN_NEXT);
m_wndLocalList.GetItemText(hFirst,strFirst); }
COMMAND_RANGE_HANDLER(ID_MENU_ADD_FRIEND_TO_GROUP,ID_MENU_ADD_FRIEND_TO_GROUP+100,OnMenuAddToFriendGroupRange) COMMAND_RANGE_HANDLER來設定菜單ID范圍,你的動態菜單的ID只要放在這個范圍就行了 ID_MENU_ADD_FRIEND_TO_GROUP定義為一個const int數字與resource.h中程序中使用OnMenuAddToFriendGroupRange(WORD, WORD pos, HWND, BOOL&)來對菜單進行響應