VS中,经常会使用到窗口的拆分技术,下面以treeview和listview来拆分窗口
使用工具:VS2008
使用语言:C++
开发步骤:
1.新建单文档程序应用程序
2.新建一个treeview并设置属性和需要显示的数据架构
MyTreeView.h
#pragma once
// CMyTreeView 视图
//View1
#define VIEW1_ROOT 0x10
#define VIEW1_SUB 0x11
//View2
#define VIEW2_ROOT 0x20
#define VIEW2_SUB 0x21
class CMyTreeView : public CTreeView
{
DECLARE_DYNCREATE(CMyTreeView)
protected:
CMyTreeView(); // 动态创建所使用的受保护的构造函数
virtual ~CMyTreeView();
public:
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
protected:
DECLARE_MESSAGE_MAP()
public:
HTREEITEM m_TreeItem1;
HTREEITEM m_TreeItem2;
virtual void OnInitialUpdate();
void UpdateTree(void);
void UpdateTree1(void);
void UpdateTree2(void);
afx_msg void OnNMClick(NMHDR *pNMHDR, LRESULT *pResult);
void ShowView(HTREEITEM select_item);
};
MyTreeView.cpp
// MyTreeView.cpp : 实现文件
//
#include "stdafx.h"
#include "TreeListViewDemo.h"
#include "MyTreeView.h"
#include "MainFrm.h"
// CMyTreeView
IMPLEMENT_DYNCREATE(CMyTreeView, CTreeView)
CMyTreeView::CMyTreeView()
{
}
CMyTreeView::~CMyTreeView()
{
}
BEGIN_MESSAGE_MAP(CMyTreeView, CTreeView)
ON_NOTIFY_REFLECT(NM_CLICK, &CMyTreeView::OnNMClick)
END_MESSAGE_MAP()
// CMyTreeView 诊断
#ifdef _DEBUG
void CMyTreeView::AssertValid() const
{
CTreeView::AssertValid();
}
#ifndef _WIN32_WCE
void CMyTreeView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif
#endif //_DEBUG
// CMyTreeView 消息处理程序
void CMyTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
//属性
CTreeCtrl& tree = GetTreeCtrl();
DWORD dwStyle = GetWindowLong(tree,GWL_STYLE);
dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS;
SetWindowLong(tree,GWL_STYLE,dwStyle);
CFont font;
font.CreateFont(
20,
0,
0,
0,
FW_NORMAL,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T("宋体"));
tree.SetFont(&font);
UpdateTree();
}
void CMyTreeView::UpdateTree(void)
{
CTreeCtrl& tree = GetTreeCtrl();
tree.DeleteAllItems();
UpdateTree1();
UpdateTree2();
}
void CMyTreeView::UpdateTree1(void)
{
CTreeCtrl& tree = GetTreeCtrl();
CString str = _T("");
int i=0, cnt = 0;
HTREEITEM root,sub;
str = _T("View1");
root = tree.InsertItem(str,0,0,TVI_ROOT);
tree.SetItemData(root,VIEW1_ROOT);
m_TreeItem1 = root;
cnt = 2;
for(i=0; i<cnt; i++)
{
str.Format(_T("View1 %d"),i);
sub = tree.InsertItem(str,1,1,m_TreeItem1);
tree.SetItemData(sub,VIEW1_SUB);
}
tree.Expand(m_TreeItem1,TVE_EXPAND);
}
void CMyTreeView::UpdateTree2(void)
{
CTreeCtrl& tree = GetTreeCtrl();
CString str = _T("");
int i=0, cnt = 0;
HTREEITEM root,sub;
str = _T("View2");
root = tree.I