利用 CTreeCtrl 创建 Tab 页效果

 首先我们要新建 1 个项目,  在主窗口上添加 Tree 控件。
 在项目中, 添加 2 个新窗口
 ID 分别为: IDD_DIALOG1, IDD_DIALOG2
 
 
 OnInitDialog 消息响应函数中 添加下面的代码:
 
 m_treePages[0]=new Cdialog1;
 m_treePages[1]=new Cdialog2;


 //------------------------------------------
 // 初始化树
 //------------------------------------------

 // 创建图像列表控件
 CImageList *m_imagelist=new CImageList;
 m_imagelist->Create(16,16,0,7,7);
 m_imagelist->SetBkColor ( RGB(255,255,255) );

 // 把图标载入图像列表控件
 m_imagelist->Add( AfxGetApp()->LoadIcon(IDI_ICON1) ) ;
 m_imagelist->Add( AfxGetApp()->LoadIcon(IDI_ICON2) ) ;

 //为 m_mytree 设置一个图像列表
 m_mytree.SetImageList( m_imagelist,TVSIL_NORMAL );

 //设置m_mytree的背景色
 m_mytree.SetBkColor(RGB(0,250,255));
 

 // 初始化 Tree 节点
 HTREEITEM root = m_mytree.InsertItem("TreeTab_demo"); 
 m_mytree.InsertItem( "Dialog1", root );
 m_mytree.InsertItem( "Dialog2", root );
 m_mytree.Expand( m_mytree.GetRootItem() , TVE_EXPAND);

 // 建立节点对应的Dialog
 m_treePages[0]->Create(IDD_DIALOG1,this);
 m_treePages[1]->Create(IDD_DIALOG2,this);
 m_treePages[0]->ShowWindow(SW_SHOW);
 m_treePages[1]->ShowWindow(SW_HIDE);
 
 // 把 Dialog 移到合适位置
 CRect m_rect;
 GetClientRect(m_rect);
 m_rect.left=200;
 m_treePages[0]->MoveWindow(m_rect);
 m_treePages[1]->MoveWindow(m_rect);

2. 设置 TVN_SELCHANGED 消息的响 应函数, 在此函数中根据点击的节点决定显示的窗口.

 LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
 
 m_strNodeName=m_mytree.GetItemText(pNMTreeView->itemNew.hItem);
 
 //在标题栏显示节点信息
 SetWindowText( m_strNodeName );

 //切换面板
 if( m_strNodeName =="Dialog1")
 {
  m_treePages[0]->ShowWindow(SW_SHOW);
  m_treePages[1]->ShowWindow(SW_HIDE);
 }
 else if( m_strNodeName =="Dialog2")
 {
  m_treePages[0]->ShowWindow(SW_HIDE);
  m_treePages[1]->ShowWindow(SW_SHOW);
 }
 

你可能感兴趣的:(tree,dialog,imagelist)