vtreev

dwStyle中可以使用以下一些树形控件的专用风格:

TVS_HASLINES 在父/子结点之间绘制连线

TVS_LINESATROOT 在根/子结点之间绘制连线

TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开

TVS_EDITLABELS 结点的显示字符可以被编辑

TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点

TVS_DISABLEDRAGDROP 不允许Drag/Drop

TVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符

在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄,利用

HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );

可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄

 

dwStyle中可以使用以下一些树形控件的专用风格:

TVS_HASLINES 在父/子结点之间绘制连线

TVS_LINESATROOT 在根/子结点之间绘制连线

TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开
void CClientDlg::OnNMRClickUserTree(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
POINT point;
GetCursorPos(&point);   
//把显示器坐标转换为客户区坐标,一定要是tree控件的句柄.主要用来测试用户有没有选中某项.
     ::ScreenToClient(pNMTreeView->hdr.hwndFrom,&point);
UINT   uFlags;   
uFlags=TVHT_ONITEM;   
HTREEITEM   hItem   =   m_UserTree.HitTest(point,   &uFlags);

CMenu menu;

int nID;
//就像上图一样,我只想当用户选中walking时才会有效,选中在线用户也没有用.m_hRoot在我的程序里就是保存在线用户的树.
if   ((hItem   !=   NULL)   &&   (TVHT_ONITEM   &   uFlags)&&(hItem!=m_hRoot))   
{         
m_UserTree.Select(hItem,   TVGN_CARET);   
menu.LoadMenu(IDR_FILE_TRANSFER);
//控制弹出菜单的位置,要用到和上面相反的函数.
::ClientToScreen(pNMTreeView->hdr.hwndFrom,&point);
CMenu* pContextMenu = menu.GetSubMenu(0);
nID = pContextMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD,
point.x, point.y,this);
}   
//下面就是你具体要做的事了,根据菜单项来具体安排.
        switch (nID)
        {
          ......
          }

      *pResult = 0;
}
//
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值