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

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

  1. TreeCtrl控件的添加
  • 首先得创建一个CDialog的dialog,并且打开。
    MFC使用TreeCtrl控件实现树型列表(一)_第1张图片
  • 然后找到VS的工具箱,添加Tree Control。
    MFC使用TreeCtrl控件实现树型列表(一)_第2张图片
  • 添加后如下:
    MFC使用TreeCtrl控件实现树型列表(一)_第3张图片
  1. 控件的在该dialog添加的类中创建
	CTreeCtrl     m_TreeCtrl;
	virtual void MyExpandTree(HTREEITEM hTreeItem);
  1. 控件的相关功能的实现
  • OnInitDialog()函数中添加下面处理;
BOOL SetAndAddSigDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	//树状栏显示
	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);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

  • 实现MyExpandTree(HTREEITEM hTreeItem)(这个函数是用来展开树的);
void SetAndAddSigDlg::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(SetAndAddSigDlg, CDialog)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &SetAndAddSigDlg::OnTvnSelchangedTree1)
END_MESSAGE_MAP()
  • 在DoDataExchange函数里添加关联(这个很重要,很多人容易漏掉这个,然后找半天都没发现问题在哪儿)。
	DDX_Control(pDX, IDC_TREE1, m_TreeCtrl); 
  1. 界面的显示

MFC使用TreeCtrl控件实现树型列表(一)_第4张图片

你可能感兴趣的:(MFC开发)