用户视图切换为Linux视图,多文档-多视图切换

1--首先创建想切换的两个视图类(view类)

比如:

class CTestView1 : public CFormView

{

//....

}

class CTestView2 : public CView

{

//....

}

2--然后在xx.cpp文件中(XX代表工程名)即CxxApp类的cpp文件中

包含切换的两个类的头文件,

如:

#include "TestView1.h"

#include "TestView2.h"

3--在 CxxApp的头文件里申请两个CMultiDocTemplate 指针

如:

CMultiDocTemplate * m_pTemplateTestView1;

CMultiDocTemplate * m_pTemplateTestView2;

4--在CxxApp的InitInstance()函数内,创建上面两个指针指向的实例

BOOL CXXApp::InitInstance()

{

...

m_pTemplateTestView1= new CMultiDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CTestViewDoc),

RUNTIME_CLASS(CChildFrame), // custom MDI child frame

RUNTIME_CLASS(CTestView1));

AddDocTemplate(m_pTemplateTestView1);

m_pTemplateTestView2= new CMultiDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CTestViewDoc),

RUNTIME_CLASS(CChildFrame), // custom MDI child frame

RUNTIME_CLASS(CTestView2));

AddDocTemplate(m_pTemplateTestView2);   //添加到此app的模板管理类中

...

}

注意CMultiDocTemplate()内第一个参数指向一个字符串的资源ID,如果存在多个字符串,则在开始时会弹出对话框让你选择采用哪个模板,这时可以将其中一个ID换为不指向字符串资源的id,屏蔽此对话框,也可重载app里的OnFileNew()函数,在里面选择自己需要一开始创建的模板

如:

void CXXApp::OnFileNew()

{

CDocTemplate * pTemplate=NULL;

int i;

pTemplate=m_pTemplateTestView1;

ASSERT(pTemplate != NULL);

ASSERT_KINDOF(CDocTemplate, pTemplate);

return pTemplate->OpenDocumentFile(NULL); //创建doc,创建frame,创建view

}

注意CMultiDocTemplate()内第二个参数必为CChildFrame

注意CMultiDocTemplate()内第三个参数为你创建需要切换的view视图类

5、在CMainFrame的InitializeRibbon里面注释掉其他没有用的界面设置,比如“剪贴板”面板,“窗口”面板,‘右侧选项卡’等,但是留下定义的东西。

然后,确定初始化主页

// 初始主按钮: m_MainButton.SetImage(IDB_MAIN); m_MainButton.SetText(_T("\nf")); strTemp = "主页";----------------这句自己添自己添的东西 m_MainButton.SetToolTipText(strTemp);

然后添加自己的面板,定义留着,

CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);#pragma Region WFC; strTemp = "导入图像视图面板"; CMFCRibbonPanel *pPanelView = pCategoryHome->AddPanel(strTemp,m_PanelImages.ExtractIcon(1));

strTemp = "导入图像"; pPanelView->Add(new CMFCRibbonButton(ID_IMAGE_OPEN,strTemp,0,0));

strTemp = "点选图像标志点"; pPanelView->Add(new CMFCRibbonButton(ID_SELECT_POINT,strTemp,0,1));

strTemp = "图像校正"; pPanelView->Add(new CMFCRibbonButton(ID_IMAGE_ADJUST,strTemp,0,2));

#pragma end ;

5--此时程序已经包含多个视图的模板,切换是在Mainframe类中实现。在mainframe添加下面这个函数

void CMainFrame::SwitchToView(CDocTemplate * pTemplate, CRuntimeClass * pViewClass)

{

CMDIChildWnd *pMDIActive = MDIGetActive();//获得活动子窗口

CDocument *pDoc = pMDIActive->GetActiveDocument(); //获得活动doc

CView *pView;

POSITION pos = pDoc->GetFirstViewPosition();       //查询此doc下的所有已创建view

while (pos != NULL)

{

pView = pDoc->GetNextView(pos);

if (pView->IsKindOf(pViewClass))           //如果已创建此view 则设其为活动

{

// the requested view class has already been created; show it

pView->GetParentFrame()->ActivateFrame();

//pView->UpdateWindow();//视图更新显示;

return;

}

pView->UpdateWindow();

}

CMDIChildWnd *pNewFrame = (CMDIChildWnd *)

(pTemplate->CreateNewFrame(pDoc, NULL));   // 如果没有创建,则创建此view的childframe及view

if (pNewFrame == NULL)

return;

pTemplate->InitialUpdateFrame(pNewFrame, pDoc);

}

6----在mainframe中响应你的切换按钮,调用switchtoView如

void CMainFrame::OnViewTestView1()

{

SwitchToView(theApp.m_pVideoTemplate, RUNTIME_CLASS(CTestView1)); //第一个为app里你的模板指针,第二个为ctestview1类的类型识别宏。

}

解释:

RUNTIME_CLASS为一个宏,其返回一个CRuntimeClass *指针,可进行类的类型识别。

详细定义请见《深入浅出mfc》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值