VS之treeview和listview拆分窗口

本文介绍了如何在VS2008中使用C++进行窗口拆分,通过创建一个treeview和多个listview实现。详细步骤包括新建单文档程序、设置treeview属性、创建listview、在CMainFrame中处理拆分窗口。测试结果显示,点击treeview的不同节点会显示相应的listview内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值