不带doc/view结构的窗口分割实现

不带doc/view结构的窗口分割,在CMainFrame::OnCreateClient()函数中实现时会有一些问题:窗口已经分割了,但是看不见,拖动分隔条可以看见,刷新窗口后又看不见了...

在这里给出的解决方法是:在视图的OnCreate函数中进行窗口的分割。

1、利用向导创建两个视图类,作为分割后左右两个视图:
class CLeftView : public CTreeView
class CRightView : public CListView

2、在OnCreate()函数中进行窗口分割:
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if(!m_split.CreateStatic(this,1,2)) return FALSE;

	CCreateContext *pContext = (CCreateContext *)lpCreateStruct->lpCreateParams;

	if(!m_split.CreateView(0,0,RUNTIME_CLASS(CLeftView),CSize(500,0),pContext)) 
	{
		m_split.DestroyWindow();
		return 0;
	}

	//第一列设置了大小,第二列默认使用剩下的大小
	if(!m_split.CreateView(0,1,RUNTIME_CLASS(CRightView),CSize(0,0),pContext)) 
	{
		m_split.DestroyWindow();
		return 0;
	}

	return 1;
}

在OnSize()函数中添加如下代码:
void CChildView::OnSize(UINT nType, int cx, int cy)
{
	CWnd::OnSize(nType, cx, cy);

	int width = cx/4;
	m_split.MoveWindow(0, 0, cx, cy);
	m_split.SetColumnInfo(0, width, 0);
	m_split.SetColumnInfo(1, cx-width, 0);
	m_split.RecalcLayout();
}

OnSize()函数的作用:视图创建的时候就会走 OnSize,所以要在里面做处理,不然即使创建成功了,每个分割窗口什么的也会很小甚至看不见。

以上已经完成了窗口分割,为了显示需要,添加如下测试代码,在LeftView.cpp中添加:
BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;

	return CTreeView::PreCreateWindow(cs);
}


void CLeftView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();

	static int i = 0;
	if(i++) return;

	GetTreeCtrl().InsertItem(_T("分组信息"));
	HTREEITEM hDefault = GetTreeCtrl().InsertItem(_T("默认"), GetTreeCtrl().GetRootItem());

	GetTreeCtrl().Expand(GetTreeCtrl().GetRootItem(), TVE_EXPAND);
}

在RightView中添加如下测试代码:
void CRightView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	static int i = 0;

	if(i++) return;

	//ModifyStyle的作用和PreCreateWindow的作用一样,设置列表框的类型
	//GetListCtrl().ModifyStyle(0,LVS_REPORT);

	GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
	GetListCtrl().InsertColumn(0, _T("IP地址"), 0, 100);
	GetListCtrl().InsertColumn(1, _T("计算机名"), 0, 100);
	GetListCtrl().InsertColumn(2, _T("操作系统"), 0, 100);
	GetListCtrl().InsertColumn(3, _T("CPU"), 0, 100);
	GetListCtrl().InsertColumn(4, _T("内存"), 0, 100);
	GetListCtrl().InsertColumn(5, _T("地理位置"), 0, 100);
}


BOOL CRightView::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style |= LVS_SHOWSELALWAYS | LVS_REPORT |LVS_EX_FULLROWSELECT ;

	return CListView::PreCreateWindow(cs);
}

分割图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值