CTreeCtrl继承类部分代码 如下
void CZBTreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint point;
GetCursorPos(&point);
HTREEITEM item;
UINT flag = TVHT_ONITEM;
item = this->HitTest(point, &flag);
HTREEITEM hItem =this->GetDropHilightItem( );
if(hItem!=NULL)
this->Select(hItem,TVGN_CARET);
else
hItem=this->GetSelectedItem();
if(hItem != NULL)
{
CMenu menu;
menu.LoadMenu(IDR_POPUP_MENU);
menu.TrackPopupMenu(TPM_LEFTALIGN |
TPM_RIGHTBUTTON, point.x, point.y, this);
}
*pResult = 0;
}
效果如图1
![]()
而如下方式则可以正确显示
void CZBTreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hItem =this->GetDropHilightItem( );
if(hItem!=NULL)
this->Select(hItem,TVGN_CARET);
else
hItem=this->GetSelectedItem();
CMenu menu;
POINT point;
GetCursorPos(&point);
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,ID_ZB_MENU1,"菜单1");
menu.AppendMenu(MF_STRING, ID_ZB_MENU2, "菜单2");
menu.AppendMenu(MF_STRING, ID_ZB_MENU3, "菜单3");
menu.AppendMenu(MF_STRING, ID_ZB_MENU4 "菜单4");
if(hItem==NULL)
{
menu.EnableMenuItem(ID_ZB_TURNOFF, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_ADJUSTPOWER, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_MAXPOWER, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_STATE, MF_GRAYED);
}
menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this);
*pResult = 0;
}
效果如图2
void CZBTreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint point;
GetCursorPos(&point);
HTREEITEM item;
UINT flag = TVHT_ONITEM;
item = this->HitTest(point, &flag);
HTREEITEM hItem =this->GetDropHilightItem( );
if(hItem!=NULL)
this->Select(hItem,TVGN_CARET);
else
hItem=this->GetSelectedItem();
if(hItem != NULL)
{
CMenu menu;
menu.LoadMenu(IDR_POPUP_MENU);
menu.TrackPopupMenu(TPM_LEFTALIGN |
TPM_RIGHTBUTTON, point.x, point.y, this);
}
*pResult = 0;
}
效果如图1
而如下方式则可以正确显示
void CZBTreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hItem =this->GetDropHilightItem( );
if(hItem!=NULL)
this->Select(hItem,TVGN_CARET);
else
hItem=this->GetSelectedItem();
CMenu menu;
POINT point;
GetCursorPos(&point);
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,ID_ZB_MENU1,"菜单1");
menu.AppendMenu(MF_STRING, ID_ZB_MENU2, "菜单2");
menu.AppendMenu(MF_STRING, ID_ZB_MENU3, "菜单3");
menu.AppendMenu(MF_STRING, ID_ZB_MENU4 "菜单4");
if(hItem==NULL)
{
menu.EnableMenuItem(ID_ZB_TURNOFF, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_ADJUSTPOWER, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_MAXPOWER, MF_GRAYED);
menu.EnableMenuItem(ID_ZB_STATE, MF_GRAYED);
}
menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this);
*pResult = 0;
}
效果如图2
本文介绍了一种使用CTreeCtrl控件实现右键菜单的方法。通过两种不同的方式展示了如何加载菜单资源并跟踪弹出菜单的位置。第一种方法通过LoadMenu加载菜单资源,第二种方法则是动态创建弹出菜单并添加菜单项。
316

被折叠的 条评论
为什么被折叠?



