一、建立3個菜單,ID分别為IDR_MENU2,IDR_MENU3,IDR_MENU4,這些菜單必須要有子菜單項。
二、在樹形控件右鍵-》屬性-》事件-》添加右鍵點選處理。
三、在消息處理函數中添加代碼
void CGar3Dlg::OnRclickTreePhase(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知處理程式代碼
//動态加載菜單
CMenu menu[3];
menu[0].LoadMenu(IDR_MENU2);
menu[1].LoadMenu(IDR_MENU3);
menu[2].LoadMenu(IDR_MENU4);
CPoint pt;
//pt = GetCurrentMessage()->pt; //擷取目前滑鼠點選消息的坐标點
GetCursorPos(&pt);
m_maintree.ScreenToClient(&pt); //将滑鼠的螢幕坐标,轉換成樹形控件的客戶區坐标
UINT uFlags = 0;
HTREEITEM hItem = m_maintree.HitTest(pt, &uFlags); //然後做點選測試
if ((hItem != NULL) && (TVHT_ONITEM & uFlags)) //如果點選的位置是在節點位置上面
{
m_maintree.SelectItem(hItem);
//根據不同類型的節點彈出菜單
CMenu *psubmenu;
int nData = m_maintree.GetItemData(hItem);
m_maintree.ClientToScreen(&pt);
switch (nData)
{
case 0:
psubmenu=menu[0].GetSubMenu(0);
break;
case 1:
psubmenu=menu[1].GetSubMenu(0);
break;
case 2:
psubmenu=menu[2].GetSubMenu(0);
break;
default:
break;
}
psubmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
}
*pResult = 0;
}