【C++】【MFC】MFC多文档框架

news/2024/9/22 1:30:15

相较于单文档架构,多文档基本架构则是有起码两个框架窗口,与其相对应的也会有两个文档类进行数据管理。

参与架构的类:

  CMDIFrameWnd / CMDIChildWnd / CWinApp / CView / CDocument

需要用的类:

  CDocTemplate(文档模板类)

    |-> CMultiDocTemplate(多文档模板类)

  CDocManager(文档管理类)

 1 #include <afxwin.h>
 2 #include "resource.h"
 3 
 4 class CMyDocument : public CDocument {
 5     DECLARE_DYNCREATE(CMyDocument)
 6 };
 7 IMPLEMENT_DYNCREATE(CMyDocument, CDocument)
 8 
 9 class CMyView : public CView {
10     DECLARE_DYNCREATE(CMyView)
11 public:
12     virtual void OnDraw(CDC* pDC);
13 };
14 IMPLEMENT_DYNCREATE(CMyView, CView)
15 
16 void CMyView::OnDraw(CDC* pDC) {
17     pDC->TextOut(100, 100, "View Window.");
18 }
19 
20 class CMyChild : public CMDIChildWnd {
21     DECLARE_DYNCREATE(CMyChild)
22 };
23 IMPLEMENT_DYNCREATE(CMyChild, CMDIChildWnd)
24 
25 class CMyFrameWnd : public CMDIFrameWnd {
26 
27 };
28 
29 class CMyWinApp : public CWinApp {
30 public:
31     virtual BOOL InitInstance();
32 };
33 
34 BOOL CMyWinApp::InitInstance() {
35     // 主框架窗口创建
36     CMyFrameWnd* pFrame = new CMyFrameWnd;
37     pFrame->LoadFrame(IDR_MENU1);
38     m_pMainWnd = pFrame;
39     pFrame->ShowWindow(SW_SHOW);
40     pFrame->UpdateWindow();
41 
42     // 子框架、视图类、文档类定义、创建、关联
43     CMultiDocTemplate* pTemplate = new CMultiDocTemplate(IDR_MENU2,
44         RUNTIME_CLASS(CMyDocument),
45         RUNTIME_CLASS(CMyChild),
46         RUNTIME_CLASS(CMyView));
47     AddDocTemplate(pTemplate);
48 
49     OnFileNew();
50     OnFileNew();
51     OnFileNew();
52 
53     return true;
54 }
55 
56 CMyWinApp theApp;

Result:

 

执行过程:

theApp
  |-> m_pDocManger(文档管理类)
    |-> m_templateList(文档模板类对象地址)
      |-> CMultiDocTemplate* pTemplate

        | ->m_docList(保存多文档地址)

        | ->m_pDocClass(RUNTIME_CLASS(CMyDoc))

        | ->m_pFrameClass(RUNTIME_CLASS(CMyChild))

        | ->m - pViewClass(RUNTIME_CLASS(CMyView))

OnFileNew() -> 依次创建文档类对象,子框架类对象,子框架类窗口,视图类对象,视图类窗口,文档类对象和视图类对象关联

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/47175.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

网络物理隔离后 可以用保密U盘进行数据安全交换吗?

企业用的保密U盘通常被设计用于存储和传输敏感信息,以确保数据的安全和保密性。在网络之间实现了物理隔离后,使用保密U盘进行数据安全交换是一种常见的做法。物理隔离确保了两个网络之间的完全分离,因此使用保密U盘可以作为一种安全的手段来在这两个网络之间传输数据。 以下…

CTH: 谁帮我切开这个蛋糕???

$\quad $ 看到CTH立马就开始做了好吧,很适合当做入门题。$\quad $ 首先定义 \(f[i]\) 表示进行到第 \(i\) 位时的答案数,\(bit\) 数组表示 \(01\) 序列。那么当 \(bit[i]\) 为 \(1\) 时,有 \[f[i]=\Sigma_{j=i+1}^{n+1} f[j] \]$\quad $ 至于为什么循环到 \(n+1\) ,循环到第…

MyBatis针对String类型的数字if标签失效问题

需求描述: 大致场景是订单模块去接受流程模块发送的MQ消息,针对MQ消息发送的是一个实体类,该实体类中有一个String类型的字段,用于判断当前业务状态,1 表示 审核中 2 表示 已审核 等。订单模块根据这个状态去修改自身状态的信息可以看到这里有一个If标签,用于判断这个ev…

业务和IT部门都喜欢的文件摆渡设备是什么样的?

网络隔离技术作为网络安全和数据安全的重要保障手段被广泛应用到各个行业领域,国家出台了相关法律法规,对“网络隔离”和“数据交换安全”提出了更明确、更规范的要求,尤其是对于政府、教育、医疗、能源、航空航天、金融等行业,国家出台了更细的行业性法规,指导网络和数据…

颠覆传统编程,用ChatGPT十倍提升生产力

我们即将见证一个新的时代!这是最好的时代,也是最坏的时代!我们即将见证一个新的时代!这是最好的时代,也是最坏的时代!需求背景背景:平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上。 我平时编写的博客会有一些图片来辅助说明的,写完…

Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数

在本文中,我们深入探讨了交叉熵函数作为一种重要的损失函数,特别适用于神经网络训练中。交叉熵通过衡量真实标签分布与模型预测分布之间的差异,帮助优化模型的性能。我们从信息论的角度解释了交叉熵的概念,它是基于Shannon信息论中的熵而来,用于度量两个概率分布之间的差异…

结构型设计模式

适配器模式 需求方法M1。但已经存在一个方法M2能实现需求功能,引入子类来覆盖M1方法(M1方法中调用已有的M2方法)。这个新子类就是适配器 将已有的方法转换为需求的另一种方法(一般由于方法名差异;参数不同) 这一模式中的“接口”是广义接口,可代指一个/一组方法集合 优点…

【日记】原来真的有人不适合谈恋爱(1194 字)

正文21 日正是周五,夏至。全年当中,白天时长最长的一天。而恰好那天也是银行扣息的日子。所以很忙,我差点没能走掉。所幸最终还是有惊无险。到斯的家里,是晚上 9 点钟。比我想得要早。这个周周四,他过生日。但是那天因为上班,所以移到了周末。不是法定节假日,很普通的一…