第7章 手把手教你学MFC之单文档和多文档

单文档界面与多文档界面

  • 单文档程序指程序只可以打开一个文档,如:记事本
  • 多文档程序指可以同时打开多个文档,如:word
创建单文档应用程序

创建单文档应用程序需要使用应用程序向导功能。使用该功能,可以方便地创建应用程序的框架。程序员可以在此基础上添加实现预定功能的代码,从而创建实现预定功能的应用程序。

  • 选择project、MFC AppWizard(exe)、single document、下一步默认。
  • 最后一步,选择基类,改变CTestView的基类为CEditView,就可以变为记事本一样的程序。
  • 单文档程序的核心:消息传递
文档/视图结构分析

文档、视图框架通过联系几个不同的类实现整个应用程序,他们分别是应用程序类CWinApp\框架窗口类CFrameWnd、视图类CView、文档类CDocument类和CDocTemplate类。

  • 主程序类CWinApp:负责进程的启动、终止、消息循环和资源管理。在整个应用程序中利用CWinApp的成员函数InitInstance进入MFC程序,同时其成员函数还包括消息循环、加载图标等。由于整个框架已经建立,一般对CWinApp不需要改变。
  • 文档类的基类CDocument:提供基本操作:设置文档标题、建立新文档、打开新文档等。在CDocument类中最重要的两个函数时SetModifiedFlag和UpdateAllViews。前者设置一个标志位,一般在文档修改时调用该函数,当文档关闭时提醒用户保存修改的内容。后者是刷新所有和文档关联的视图,以保证显示的是最新内容。
  • 文档类CView:最常用的是OnDraw,该函数在屏幕发生变化或因为焦点的变化需要重绘时调用。没有该函数,就不能保证程序切换后保证屏幕的正确显示,若想在数据更新时强制视图更新,可调用Invalidate和UpdateWindow来实现。
  • 文档模板类CDocTemplate:将独立的文档、视图和框架窗口对象联系在一起。
  • 框架窗口类CFrameWnd:负责框架窗口的维护工作,例如工具栏、菜单、状态栏的显示和更新。
单文档程序实战
  • 新建单文档test,最后一步改变CTestView类基类为CFormView类。
  • 添加控件
  • 为控件添加数据成员
  • 为按钮添加响应函数
  • 类向导,添加CStudent,选择CEdit派生,这样可以使类串行化操作。在类中添加变量信息:
// Attributes
public:
    CString add;            //家庭住址
    int     age;            //年龄
    CString name;           //姓名
    int     num;            //学号
    CString sex;            //性别
    CString tel;            //电话号码

// Operations
  • 在Student.cpp中编写函数Serialize:
void CStudent::Serialize(CArchive& ar) 
{
    if (ar.IsStoring())
    {   // storing code
        ar<<add<<age<<name<<num<<sex<<tel;      //输入文件中
    }
    else
    {   // loading code
        ar>>add>>age>>name>>num>>sex>>tel;      //从文件中读取
    }
}
  • 在Student类中声明Serialize
// Overrides
    // ClassWizard generated virtual function overrides
    //{
   {AFX_VIRTUAL(CStudent)
    public:
    virtual void Serialize(CArchive& ar);
    //}}AFX_VIRTUAL

// Implementation
  • 在类CTestDoc.h中添加数据成员:
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "student.h"    //+++++++++++++++++++添加头文件

#def
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值