mfc多视图的创建


该部分基础在理解mfc应用程序框架的基础上。

通过窗口的分割可以得到多视图,但是在实际应用中更多的是以多文档的形式生成多视图程序的。多视图程序主要分为单一文档模板对应文档的多视图显示和多文档模板对应的文档的视图显示。

下面以程序的形式展示:

例1:单文档模板对应多视图

新建项目Example1,当执行“窗口”|“斜体窗口”菜单命令时重新打开一个窗口

     1、利用mfc向导创建多视图应用程序框架Example1;

     2、为项目添加一个新的视图类CItalicView,基类为CView;

     3、编辑应用程序类CExample1App。

     (1)添加模板对象指针成员变量,并重写ExitInstance();

classCExample1App: public CWinApp

{

    public:

        .

        .

      CMultiDocTemplate*m_pTemplateItalic;

         virtual int ExitInstance();

         .

         .

 

}

(2)在应用程序源文件InitInstance()函数中添加并构建新的模板对象的代码,并编写虚函数ExitInstance()的实现代码

BOOLCExample1App::InitInstance()

{

         .

         .

         .

         .

         AddDocTemplate(pDocTemplate);

         m_pTemplateItalic = newCMultiDocTemplate(IDR_LI_TYPE,

         RUNTIME_CLASS(CExample1Doc);

         RUNTIME_CLASS(CChildFrame);

      RUNTIME_CLASS(CItalicView));

         .

}

intCExample1App::ExitInstance()

{

delete m_pTemplateItalic;

.

}

    4、编辑主框架类CMainFrame

(1)打开IDR_LI_TYPE资源,在主菜单中加入菜单项"斜体窗口",并在CMainFrame类中添加对应的响应函数。

voidCMainFrame::OnWindowItalic()

{

CMDIChildWnd * pActiveChild =MDIGetActive();//获得子窗口

CDocument * pDocument;

if(<pActiveChild  == NULL||

(pDocument =pActiveChild -> GetActiveDocument())==NULL)

{

TRACEO("Warning,No ActiveDocument");

AfxMessageBox(AFX_IDP_COMMAND_FAILURE);

return;

}

//获得新的文档模板指针

CDocTemplate* pTemplate =((CExample1App*)AfxGetApp())->m_pTemplateItalic;

ASSERT_VALID(pTemplate)

CFrameWnd* pFrame =pTemplate->CreateNewFrame(pDocument, pActiveChild);

if(pFrame == NULL)

{

TRACEO("Warning, Failed to create newframe.\n");

return;

}

pTemplate->InitialUpdateFrame(pFrame,pDocument);//更新视图

}


MFC多文档多视图创建可以分为以下几个步骤: 1. 创建一个多文档应用程序 在Visual Studio中创建一个MFC应用程序时,选择“多文档应用程序”模板,这样就会自动生成一些基本的代码和文件结构。 2. 添加新的文档类型 在多文档应用程序中,可以有多种不同的文档类型,每种文档类型可以有自己的视图类型。例如,在一个画图程序中,可以有一个文档类型用于绘制直线,另一个文档类型用于绘制圆形。 要添加新的文档类型,可以在“资源视图”中右键单击“DocTypes”节点,选择“添加新项”,然后在“添加新文档类型向导”中按照提示操作即可。 3. 添加新的视图类型 每个文档类型可以有多个不同的视图类型,例如,在一个画图程序中,可以有一个视图用于显示直线,另一个视图用于显示圆形。 要添加新的视图类型,可以在“资源视图”中右键单击相应的文档类型节点,选择“添加新项”,然后在“添加新视图向导”中按照提示操作即可。 4. 在文档类中实现创建视图的函数 在文档类中,需要实现一个函数,用于创建该文档类型的视图。这个函数的返回值应该是CView或其派生类的指针。例如: CView* CMyDoc::CreateView(CWnd* pParentWnd) { CView* pView = new CMyView; pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), pParentWnd, AFX_IDW_PANE_FIRST, NULL); return pView; } 在这个函数中,先创建一个新的视图对象,然后调用其Create函数创建实际的窗口,并返回指向该视图对象的指针。 5. 在主框架窗口类中添加菜单项和工具栏按钮 为了让用户能够创建新的文档和打开已有文档,需要在主框架窗口类中添加相应的菜单项和工具栏按钮。 6. 运行程序,测试多文档多视图功能 完成上述步骤后,就可以运行程序,测试多文档多视图的功能了。可以尝试创建多个不同类型的文档,并在每个文档中创建不同类型的视图,然后在不同的视图中进行操作,观察程序的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值