MFC使用TreeCtrl控件实现树型列表(二)

基于基类CFormView使用TreeCtrl控件实现树型列表

  1. TreeCtrl控件的添加
  • 首先得创建一个FORMVIEW的dialog,并且打开。
  • 然后找到VS的工具箱,添加Tree Control。
  • 添加后如下:
  1. 控件的在该view添加的类里面创建
  • 在该view添加的类的.h文件中用CTreeCtrl创建一个m_treeCtrl变量;
  • 在该view添加的类的.h文件中声明相关函数;
    添加如下:
public:
	afx_msg void OnInitialUpdate();
	virtual void MyExpandTree(HTREEITEM hTreeItem);
	CTreeCtrl m_treeCtrl;
  1. 控件的相关功能的实现
  • 实现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);
  1. 界面的显示
发布了84 篇原创文章 · 获赞 63 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/wsq119/article/details/103143538