使用MultiPaneCtrl构建多标签页视图

MultiPaneCtrl是CodeProject上的一个项目(http://www.codeproject.com/KB/dialog/MultiPaneCtrl.aspx),可以用于构建各种视图结构,非常灵活和强大。但是由于此工程包含较多的类和结构,直接包含仅项目中会造成项目臃肿和视觉混乱,所以我把它做成了一个动态链接库 —— MultiPaneCtrlDLL,如果需要用到它只要把这个DLL链接上就可以了。本文介绍单文档框架下的使用说明。

第一步:

将MultiPaneCtrlDLL解压到项目目录下,其中包含6个头文件、1个lib库和1个dll文件。

然后在项目的StdAfx.h中添加如下代码:

//MultiPaneCtrlDLL
#include "MultiPaneCtrlDLL/MultiPaneCtrl.h"
#pragma comment(lib, "MultiPaneCtrlDLL/MPC.lib")

第二步:
打开CXXXApp的cpp文件,找到并注释掉如下代码:

;
// 	CSingleDocTemplate* pDocTemplate;
// 	pDocTemplate = new CSingleDocTemplate(
// 		IDR_MAINFRAME,
// 		RUNTIME_CLASS(CTestDitherDoc),
// 		RUNTIME_CLASS(CMainFrame),	   // main SDI frame window
// 		RUNTIME_CLASS(CTestDitherView));
// 	AddDocTemplate(pDocTemplate);
 
	// Parse command line for standard shell commands, DDE, file open
//	CCommandLineInfo cmdInfo;
//	ParseCommandLine(cmdInfo);
 
	// Dispatch commands specified on the command line
//	if (!ProcessShellCommand(cmdInfo))
//		return FALSE;
 
//	m_pMainWnd->ShowWindow(SW_SHOW);
//	m_pMainWnd->UpdateWindow();
然后添加如下代码:

	// Parse command line for standard shell commands, DDE, file open
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);
 
	CMainFrame* pFrame = new CMainFrame;
	m_pMainWnd = pFrame;
 
	// create and load the frame with its resources
	pFrame->LoadFrame(IDR_MAINFRAME,
		WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
		NULL);
 
	// The one and only window has been initialized, so show and update it.
	pFrame->ShowWindow(SW_MAXIMIZE);
	pFrame->UpdateWindow();
 
	return TRUE;

第三步:
在CMainFrame类声明中添加保护成员变量:
MultiPaneCtrl m_MPC;
MultiPaneCtrlStyle_base m_MPCStyle;


然后在CMainFrame的OnCreate()或OnCreateClient()函数中添加如下代码:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	if (!m_MPC.Create(this, WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), AFX_IDW_PANE_FIRST))
	{
		AfxMessageBox("Failed to create MPC!");
		return -1;
	}
 
	m_pViewSrc = (CViewImage*)RUNTIME_CLASS(CViewImage)->CreateObject();
	m_pViewSrc->Create(NULL,NULL,WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &m_MPC, 1989);
 
	m_pViewDst = (CViewImage*)RUNTIME_CLASS(CViewImage)->CreateObject();
	m_pViewDst->Create(NULL,NULL,WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &m_MPC, 1990);
 
	MultiPaneCtrl::Tabs tabs;
	tabs.Add(*m_pViewSrc,"Original",-1);
	tabs.Add(*m_pViewDst,"Dithered",-1);
 
	m_MPC.AddTab(NULL, tabs[0]);
 
	HPANE lineH = m_MPC.ConvertToLine(NULL,true);
	HPANE h1 = m_MPC.Add(NULL);
 
	m_MPC.AddTab(h1,tabs[1]);
 
	m_MPC.SetTabLayout(TAB_LAYOUT_TOP);
	m_MPC.SetSplitterDraggingMode(SPLITTER_DRAGGING_STATIC);
	m_MPC.RemoveTabEnable(true);
	m_MPC.DragTabEnable(true);
	m_MPC.SetMinSize(CSize(0,0));
	m_MPC.ShowTabMenuButton(false);
	m_MPC.ShowTabCloseButton(false);
	m_MPC.HideSingleTab(false);
	m_MPC.InstallStyle(&m_MPCStyle);
	m_MPC.Update();
 
	return CFrameWnd::OnCreateClient(lpcs, pContext);
}

【提示】具体布局的设置方法可见MultiPaneCtrl的项目主页。
编译运行程序,效果图如下:


>> 本文固定链接: http://www.itvane.net/?p=1271

>> 转载请注明: Ari.枫 2011年05月10日 于 IT风向标 发表


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值