ClassWizard为CTreeCtrl(树控件)添加的NM_DBLCLK(双击)消息的响应函数中带有一个NMHDR * 型指针形参:
1.
OnDblClkTree(NMHDR* pNMHDR,
LRESULT
* pResult)
这个陌生的指针类型常使初用树控件的编程者陷入迷茫之中。实际上我们完全不理会它,也可以实现树控件的双击响应,即在OnDblClkTree( )函数中调用树控件的成员函数CTreeCtrl::GetSelectedItem( )以获取树控件的子项句柄HTREEITEM,得到此句柄后,我们便可用下列成员函数获取子项各种有用信息:
1.
CTreeCtrl::GetItemData( )、
2.
CTreeCtrl::GetItemHeight( )、
3.
CTreeCtrl::GetItemImage( )、
4.
CTreeCtrl::GetItemRect( )、
5.
CTreeCtrl::GetItemState( )、
6.
CTreeCtrl::GetItemText( )。
例程运行结果如下图所示:
示例代码如下:
01.
class
CTreeCtrlDlg :
public
CDialog
02.
{
03.
…………
04.
public
:
05.
HTREEITEM m_hTreeItem;
06.
CImageList m_ImgLst;
07.
08.
// Dialog Data
09.
//{{AFX_DATA(CTreeCtrlDlg)
10.
enum
{ IDD = IDD_TREECTRL_DIALOG };
11.
CTreeCtrl m_wndTree;
//与对话框中树控件相关联
12.
//}}AFX_DATA
13.
14.
// Implementation
15.
protected
:
16.
afx_msg
void
OnDblClkTree(NMHDR* pNMHDR,
LRESULT
* pResult);
17.
…………
18.
};
1.
void
CTreeCtrlDlg::OnDblClkTree(NMHDR* pNMHDR,
LRESULT
* pResult)
2.
{
3.
m_hTreeItem = m_wndTree.GetSelectedItem();
4.
//以GetItemText()函数为例:
5.
CString S1 = m_wndTree.GetItemText(m_hTreeItem);
6.
AfxMessageBox(
"You have selected "
+S1);
7.
*pResult = 0;
8.
}
右键添加菜单
void CLeftView::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POINT point;
UINT uFlags;
//得到当前鼠标坐标
GetCursorPos(&point);
//转换成客户区坐标
GetTreeCtrl().ScreenToClient(&point);
//获取选中的Item的句柄
HTREEITEM hItem = GetTreeCtrl().HitTest(point,&uFlags);
//若句柄不为空,则弹出右键菜单
if(hItem)
{
GetTreeCtrl().SelectItem(hItem);
ClientToScreen(&point);
CMenu menu;
VERIFY(menu.LoadMenu(IDR_POPMENU2));
CMenu *pPopUp=menu.GetSubMenu(0);
pPopUp-> TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
}
*pResult = 0;
}