转载自:实现CTreeCtrl父子节点的联动选择
-给工程添加MFC类,继承CTreeCtrl,实现父节点与子节点的选中联动后,
类名为:CTreeCheckCtrl
-给自己的CTreeCtrl添加类变量后,在类声明中生成CTreeCtrl m_My_Tree; 修改为 CTreeCheckCtrl m_My_Tree; 就可以实现父子联动了
使用SetItemData设置节点数据后,GetItemData获取到的总是最后一个节点的数据,百度半天没解决,带佬们有啥解决方案,这里我在转载代码的基础上重写了SetItemData和GetItemData,插入以及获取的都是string类型
TreeCheckCtrl.h
#pragma once
#define UM_CHANGE_PARENT_CHECK_STATUS WM_USER+100
#include <iostream>
#include <string>
#include <map>
using namespace std;
// CTreeCheckCtrl
class CTreeCheckCtrl : public CTreeCtrl
{
DECLARE_DYNAMIC(CTreeCheckCtrl)
public:
CTreeCheckCtrl();
virtual ~CTreeCheckCtrl();
// 设置子结点选中状态
void SetChildCheck(HTREEITEM hItem, BOOL bCheck);
// 设置父结点选中状态
void SetParentCheck(HTREEITEM hItem);
void SetItemData(HTREEITEM hItem, std::string str);
std::string GetItemData(HTREEITEM hItem);
afx_msg void OnNMClick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg LRESULT OnUserMsg(WPARAM wParam, LPARAM lParam);
protected:
DECLARE_MESSAGE_MAP()
private:
std::map<HTREEITEM, std::string> m_item_data;
};
TreeCheckCtrl.cpp
// TreeCheckCtrl.cpp : 实现文件
//
#include "stdafx.h"
#include "TreeTest01.h"
#include "TreeCheckCtrl.h"
// CTreeCheckCtrl
IMPLEMENT_DYNAMIC(CTreeCheckCtrl, CTreeCtrl)
CTreeCheckCtrl::CTreeCheckCtrl()
{
}
CTreeCheckCtrl::~CTreeCheckCtrl()
{
}
void CTreeCheckCtrl::SetChildCheck(HTREEITEM hItem