基于基类CFormView使用TreeCtrl控件实现树型列表
- TreeCtrl控件的添加
- 首先得创建一个FORMVIEW的dialog,并且打开。
- 然后找到VS的工具箱,添加Tree Control。
- 添加后如下:
- 控件的在该view添加的类里面创建
- 在该view添加的类的.h文件中用
CTreeCtrl
创建一个m_treeCtrl
变量;
- 在该view添加的类的.h文件中声明相关函数;
添加如下:
public:
afx_msg void OnInitialUpdate();
virtual void MyExpandTree(HTREEITEM hTreeItem);
CTreeCtrl m_treeCtrl;
- 控件的相关功能的实现
- 实现
OnInitialUpdate()
函数(此处需要解释一下,OnInitialUpdate()
函数和OnInitDialog()
函数是相同功能的,只是因为不同基类下的不同形式);
void FormViewOne::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
HTREEITEM hFriends = m_treeCtrl.InsertItem("-0000", 0, 0);
m_treeCtrl.InsertItem("-lll", 0, 0);
m_treeCtrl.InsertItem("-56565", 1, 1, hFriends);
m_treeCtrl.InsertItem("-45656", 1, 1, hFriends);
m_treeCtrl.InsertItem("-12345678922222222222222666", 1, 1, hFriends);
}
- 实现
MyExpandTree(HTREEITEM hTreeItem)
(这个函数是用来展开树的);
void FormViewOne::MyExpandTree(HTREEITEM hTreeItem)
{
if (!m_treeCtrl.ItemHasChildren(hTreeItem))
{
return;
}
HTREEITEM hNextItem = m_treeCtrl.GetChildItem(hTreeItem);
while (hNextItem != NULL)
{
MyExpandTree(hNextItem);
hNextItem = m_treeCtrl.GetNextItem(hNextItem, TVGN_NEXT);
}
m_treeCtrl.Expand(hTreeItem, TVE_EXPAND);
}
BEGIN_MESSAGE_MAP(FormViewOne, CFormView)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &FormViewOne::OnTvnSelchangedTree1)
END_MESSAGE_MAP()
- 在DoDataExchange函数里添加关联(这个很重要,很多人容易漏掉这个,然后找半天都没发现问题在哪儿)。
DDX_Control(pDX, IDC_TREE1, m_treeCtrl);
- 界面的显示