其他分享
首页 > 其他分享> > 04. MFC框架

04. MFC框架

作者:互联网

MFC框架

MFC和Win32的关系

  1. win32是windows下的最基本的编程方式,它是其它所有方式实现的基础。
  2. mfc是封装的类,最后还是会调用win32 api,可以理解为mfc是对win32的封装,使用win32编程的 方式,写了一个又一个的类,使用方便。

MFC分类

MFC分为:

  1. 单文档
  2. 多文档
  3. 基于对话框
  4. 多个顶级文档

MFC程序组成

以单文档为例。

在类视图中,后缀是dlg的是对话框类,mainframe是程序框架类,后缀带APP的类为MFC应用程序实例 类,后缀为doc为文档类,后缀为view为视图类。

theApp

每一个应用程序都有一个唯一的自动生成的全局变量:theApp类对象。

在app类里面定义且赋值

CMainFrame类

框架类表示应用程序的主框架窗口,其主要作用是响应标准的窗口消息。不过它通常先将消息按照一定 的次序传递给视图类以及文档类等其它命令处理类。

另外,它还为视图类提供可视化的边框,同时也包括标题栏,一些标准的窗口组件等。

视图类

占用框架窗口的客户区,主要负责显示文档数据,也为文档对象和用户之间提供了用以交互的可视接口。

通常,一般的绘制操作都是在该类中完成,因此有时也称为“绘制窗口”。

文档类

实际上是一种数据结构。通常,它不但包含应用中所需的数据,而且也包含了处理这些数据的方法。 注意:每个类可以通过继承链往上找父类,去看类的继承结构。

MFC应用程序框架

消息映射

win32中的消息一般由三个部分组成:

  1. 一个无符号整数,消息ID

  2. 消息附带的WPARAM类型的参数

  3. 消息附带的LPARAM类型的参数

然后使用消息队列。当应用程序在消息队列去获得消息时,通过窗口消息处理函数去匹配相应的消息ID 再进行处理。

在MFC中使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数建 立一一对应的消息映射表,以及消息处理函数的声明和实现等代码。

当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理

消息映射表

//BEGIN和END区间就为消息映射表
BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ...
END_MESSAGE_MAP()

添加消息处理函数

无控件直接添加消息处理函数

  1. 右键项目文件,选择“类向导”
  2. 找到“虚函数” -> OnOK,双击或点击右侧添加函数来重写这个函数
  3. CDialogEx::OnOK(); 删掉或者注释掉,因为父类函数会接收回车闪退

控件的值变量与控件变量

UpdateData

  1. 可以更新数据,当参数为true代表从界面中输入数据到关联的变量。如果为false代表反向,将关联变量的值更新到界面上
  2. 一个UpdateData的函数将会对所有的数值型关联变量进行更新或输出,不需要多次调用。

对话框模板属性

控件位置编辑

图片控件

图片控件示例

  1. 导入bmp格式图片。

  2. 拖入一个”picture control“控件。修改属性”type“。再修改”image“。

  3. 如果在MFC中出现了错误:error RC2108: expected numerical dialog constant。选择双击这个错误,然后系统会弹出一个.rc的文件,在这个文件中找到刚图片控件的代码:

    CONTROL IDB_BITMAP1,IDC_STATIC,202,12,105,129,NOT WS_GROUP
    

    改为:

    CONTROL IDB_BITMAP1,IDC_STATIC,"Static",SS_BITMAP,202,12,105,129,NOT
    WS_GROUP
    

    即可解决报错的问题。

  4. 通过外部文件加载,创建一个”picture control“控件,修改ID。修改属性页”type“。然后在初始化函 数中加入代码:

    CStatic *pPic = (CStatic*)GetDlgItem(IDC_STATIC_BMG);
    HBITMAP bitmap;
    bitmap = (HBITMAP)LoadImage(AfxGetApp()-
    >m_hInstance,_T("8.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    pPic->SetBitmap(bitmap);// <br>//在Picture的Type调为Bitmap
    

标签:控件,MFC,04,框架,对话框,映射,消息,处理函数
来源: https://www.cnblogs.com/WZ-1120232314/p/16378176.html