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风向标 发表