本文简单地介绍下VS的treeview使用:包括属性设置、单击事件、双击事件、右键弹出菜单等。
使用工具:VS2008
使用语言:C++
开发步骤:
1.新建单文档程序,View派生于TreeView
2.添加图片资源,用于每一项文字前的图标
3.添加菜单资源,用于右键弹出
4.设置属性
void CTreeViewDemoView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
//属性
CTreeCtrl& tree = GetTreeCtrl();
DWORD dwStyle = GetWindowLong(tree,GWL_STYLE);
dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS;
SetWindowLong(tree,GWL_STYLE,dwStyle);
//菜单
m_menu.LoadMenu(IDR_MENU1);
tree.SetMenu(&m_menu);
//图标
m_ImageList.Create(IDB_BITMAP1,10,10,RGB(255,255,255));
tree.SetImageList(&m_ImageList,LVSIL_NORMAL);
//字体
CFont font;
font.CreateFont(
15,
0,
0,
0,
FW_NORMAL,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T("宋体"));
tree.SetFont(&font);
//更新界面
UpdateTree();
}
5.更新数据
void CTreeViewDemoView::UpdateTree(void)
{
CTreeCtrl& tree = GetTreeCtrl();
tree.DeleteAllItems();
CString str = _T("");
int i=0, cnt = 0;
HTREEITEM root,sub;
str = _T("View1");
root = tree.InsertItem(str,0,0,TVI_ROOT);
tree.SetItemData(root,VIEW1_ROOT);
m_TreeItem1 = root;
cnt = 2;
for(i=0; i<cnt; i++)
{
str.Format(_T("View1 %d"),i);
sub = tree.InsertItem(str,1,1,m_TreeItem1);
tree.SetItemData(sub,VIEW1_SUB);
}
tree.Expand(m_TreeItem1,TVE_EXPAND);
str = _T("View2");
root = tree.InsertItem(str,2,2,TVI_ROOT);
tree.SetItemData(root,VIEW2_ROOT);
m_TreeItem2 = root;
cnt = 3;
for(i=0; i<cnt; i++)
{
str.Format(_T("View2 %d"),i);
sub = tree.InsertItem(str,3,3,m_TreeItem2);
tree.SetItemData(sub,VIEW2_SUB);
}
tree.Expand(m_TreeItem2,TVE_EXPAND);
}
6.单击事件
void CTreeViewDemoView::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTreeCtrl& tree = GetTreeCtrl();
CPoint CursorPoint;
if(!GetCursorPos(&CursorPoint))
{
return;
}
tree.ScreenToClient(&CursorPoint);
UINT uFlag=0;
HTREEITEM select_item = tree.HitTest(CursorPoint,&uFlag);
if((NULL != select_item) && (TVHT_ONITEM&uFlag))
{
tree