分割窗口

建立分割窗口

http://www.cnblogs.com/Lizheng0201/archive/2008/02/28/1399840.html

1 CMainFrame类添加虚方法OnCreateClient,见下面的代码

2 添加CSplitterWnd类对象m_wndSplitter

3 CDivisionView是自己创建的View类

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	m_wndSplitter.CreateStatic(this, 1, 2);
	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CDivisionView),CSize(200,200), pContext);
	m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDivisionView),CSize(200,200), pContext);
	return TRUE;
}

一侧为树形视图,一侧为编辑区

http://blog.csdn.net/xs813/article/details/6462669

1 添加自己的CMyTreeView类(基类CTreeView)

2 在虚方法OnInitialUpdate实现树节点设置,见下面的代码

3 将上面的代码中分割窗口的加载类CDivisionView分别改成CMyTreeView和CEditView

void CMyTreeView::OnInitialUpdate()
{
    CTreeView::OnInitialUpdate();
 
     CTreeCtrl *ptheTree = &GetTreeCtrl();
     ptheTree->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);

     TVINSERTSTRUCT tvInsert;
     HTREEITEM hTreeItem;

     tvInsert.hInsertAfter = NULL;
     tvInsert.hParent = TVI_ROOT;
     tvInsert.item.mask = TVIF_TEXT;
     tvInsert.item.pszText = "一年级";
     hTreeItem = ptheTree->InsertItem(&tvInsert);
     tvInsert.hParent = hTreeItem;
     tvInsert.item.pszText = "1班";
     ptheTree->InsertItem(&tvInsert);
     tvInsert.item.pszText = "2班";
     ptheTree->InsertItem(&tvInsert);
     ptheTree->Expand(hTreeItem,TVE_EXPAND);

     tvInsert.hParent = TVI_ROOT;
     tvInsert.item.pszText = "二年级";
     hTreeItem = ptheTree->InsertItem(&tvInsert);
     tvInsert.hParent = hTreeItem;
     tvInsert.item.pszText = "1班";
     ptheTree->InsertItem(&tvInsert);
     tvInsert.item.pszText = "2班";
     ptheTree->InsertItem(&tvInsert);
     tvInsert.item.pszText = "3班";
     ptheTree->InsertItem(&tvInsert);
}

视图切换控制

http://www.pudn.com/downloads289/sourcecode/windows/dialog/detail1302472.html

 仿照outlook的风格,左边树视图控制右边是分割窗口还是list视图或者edit视图

1 创建CLeftPaneView(基于CFormView):

    对应的IDD增加IDC_TREE

    增加成员变量 m_treeCtrl                      对应IDC_TREE,用于控制IDC_TREE;

                              m_ImageList                 显示tree视图的图标list

                              m_hSplitterView m_hListCtrlView m_EditView(HTREEITEM)          保存右边框架视图的对应选项

                              CRightPaneFrame *m_pRightPaneFrame                                               控制右边框架的视图分割

    增加消息处理函数 OnSize 和 OnSelChangedTree

2 创建CListCtrlView 和 CEditView(基于CFormView),右边框架的两个分割视图

3 创建CSplitterView,用于右边框架创建分割视图。

4 创建CRightPaneFrame,增加成员变量,包括指向各个视图的指针和当前选中视图的ID

5 在CMainFrame::OnCreateClient方法中,对窗口进行左右分割,并保存相关变量

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	m_wndSplitter.CreateStatic(this, 1, 2)
	
	CRect rect;
	GetClientRect(&rect);
	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftPaneView), CSize(rect.Width()/3, 0), pContext);
	m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightPaneFrame), CSize(0, 0), pContext)

	CLeftPaneView* pLeftPaneView     = (CLeftPaneView*)   m_wndSplitter.GetPane(0,0);
	pLeftPaneView->m_pRightPaneFrame = (CRightPaneFrame*) m_wndSplitter.GetPane(0,1);
	
	SetActiveView((CView*) m_wndSplitter.GetPane(0, 0));

	return TRUE;
}

6 在CRightPaneFrame::OnCreateClient方法中,创建右边三个视图对象

BOOL CRightPaneFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	m_pSplitterView = new CSplitterView;
	m_pSplitterView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_SPLITTER, pContext);
	SetActiveView(m_pSplitterView);
	m_pSplitterView->ShowWindow(SW_SHOW);
	m_pSplitterView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
	m_nCurrentViewID = VIEW_SPLITTER;

	m_pListCtrlView = new CListCtrlView;
	((CView*) m_pListCtrlView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_LISTCTRL, pContext);
	m_pListCtrlView->ShowWindow(SW_HIDE);
	m_pListCtrlView->SetDlgCtrlID(VIEW_LISTCTRL);

	m_pEditCtrlView = new CEditCtrlView;
	((CView*) m_pEditCtrlView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_EDIT, pContext);
	m_pEditCtrlView->ShowWindow(SW_HIDE);
	m_pEditCtrlView->SetDlgCtrlID(VIEW_EDIT);

	RecalcLayout();
	
	return TRUE;
}

7 在CSplitterView::OnCreate方法中对右边框架进行分割

int CSplitterView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	m_wndSplitter.CreateStatic(this, 2, 1);

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

	m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CListCtrlView), CSize(150,0), pContext);
	m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CEditCtrlView), CSize(0,0), pContext);
	
	return 0;
}


8 当左边树视图选项发生变化时

void CLeftPaneView::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	UINT	    nView         = 0;
	HTREEITEM hSelectedItem = m_treeCtrl.GetSelectedItem();

	if (hSelectedItem == m_hSplitterView)
		nView = VIEW_SPLITTER;
	else
	if (hSelectedItem == m_hListCtrlView)
		nView = VIEW_LISTCTRL;
	else
	if (hSelectedItem == m_hEditView)
		nView = VIEW_EDIT;

	if (nView) m_pRightPaneFrame->SwitchToView(nView);

	*pResult = 0;
}

 

void CRightPaneFrame::SwitchToView(UINT nView)
{
	CView* pOldActiveView = GetActiveView();
	CView* pNewActiveView = NULL;

	switch (nView)
	{
	case	VIEW_SPLITTER:
				pNewActiveView = (CView*) m_pSplitterView;
				break;

	case	VIEW_LISTCTRL:
				pNewActiveView = (CView*) m_pListCtrlView;
				break;
	case	VIEW_EDIT:
				pNewActiveView = (CView*) m_pEditCtrlView;
				break;
	}

	if (pNewActiveView)
	{
		if (pOldActiveView == pNewActiveView) return;

		SetActiveView(pNewActiveView);
		pNewActiveView->ShowWindow(SW_SHOW);
		pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
		pOldActiveView->ShowWindow(SW_HIDE);
		pOldActiveView->SetDlgCtrlID(m_nCurrentViewID);
		m_nCurrentViewID = nView;

		RecalcLayout();
	}
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值