首页 > 编程语言 >《c++徒步》MFC篇——MFC基础知识

《c++徒步》MFC篇——MFC基础知识

时间:2023-04-10 14:47:36浏览次数:50  
标签:列表框 MFC 窗口 c++ 基础知识 按钮 封装 Class

MFC简介

原文链接:https://www.cnblogs.com/zhouwanqiu/p/6914090.html

1、什么是MFC?
全称:Microsoft Foundation Class Library(微软基础类库)
1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库)
2-MFC从原理来说还是一个程序框架

2、为什么使用MFC?
基于框架编程,提高工作效率,减少开发周期,降低开发成本。

3、常见的头文件

afx.h--包含了MFC中绝大部分类的声明
afxwin.h--包含了afx.h和windows.h
afxext.h--提供了对扩展类的支持,例如:工具栏、状态栏...

附:以Afx...开头的函数,可以确定为MFC库中的一个全局函数;
以::...开头的函数,可以确定为Win32的API函数;

4、MFC应用程序的分类

  • 1、使用MFC库制作自己的控制台程序
    相比Win32控制台程序:
    多了一个全局对象 CWinApp theApp
    入口函数不同于以往的入口函数

  • 2、使用MFC库制作自己的静态库程序

  • 3、使用MFC库制作自己的动态库程序
    1--使用MFC库制作自己的规则动态库(静/动态MFC库)
    2--使用MFC库制作自己的扩展动态库
    区别:规则库可以被所有程序调用,扩展库只能被支持MFC的程序调用

  • 4、使用MFC库制作自己的窗口程序
    1--单文档视图构架程序
    CFrameWnd-框架窗口类,封装了关于框架窗口的操作
    CWinApp-应用程序类,封装了关于程序流程的操作
    CDocument-文档类,封装了关于数据的操作(提取、转换、存储...)
    CView-视图窗口类,封装了关于视图窗口的操作(绘图)
    2--多文档视图构架程序
    CMDIChildWnd-子框架窗口类,封装了关于子框架窗口的操作
    CMDIFrameWnd-主框架窗口类,封装了关于主框架窗口的操作
    CWinApp-应用程序类,封装了关于程序流程的操作
    CDocument-文档类,封装了关于数据的操作(提取、转换、存储...)
    CView-视图窗口类,封装了关于视图窗口的操作(绘图)
    3--对话框构架程序
    CWinApp-应用程序类,封装了关于程序流程的操作
    CDialog-对话框窗口类,封装了关于对话框窗口的操作

5、MFC库中类的概述

  • 1、CObject-MFC库中绝大部分类的最基类,封装MFC库中最基本的几个机制:运行时类信息机制、动态创建机制、序列化机制

  • 2、CCmdTarget-消息映射机制的最基类

  • 3、CWinThread/CWinApp-应用程序类,负责管理程序的流程

  • 4、CDocument及其子类-文档类,负责管理数据

  • 5、Exceptions-异常类,封装了关于MFC中各种异常情况的处理

  • 6、CFile及其子类-文件操作类,封装了关于各种文件的操作

  • 7、CWnd-窗口类的最基类,封装了关于窗口的最基本的操作

  • 8、Frame Windows-框架窗口类,封装了关于各种框架窗口的操作

  • 9、Dialog Boxes-对话框窗口类,封装了关于各种对话框窗口的操作

  • 10、Views-视图窗口类,封装了关于各种视图窗口的操作

  • 11、Controls-控件窗口类,封装了关于各种控件窗口的操作

  • 12、CDC及其子类-封装了各种绘图设备,以及绘图函数

  • 13、CGdiObject及其子类-封装了各种绘图对象的操作

  • 14、CArrary/CList/CMap及其子类-封装了C++中相应的数据结构

  • 15、非CObject类-封装了关于各种结构的操作,例如:CPoint,CRect,CString,CTime...

6、MFC的类向导功能(ClassWizard)
在VC6的菜单栏->查看->建立类向导(Ctrl+W)
image

1、Message Maps选项卡

  • ①Project:下拉列表框给出当前工程名称。实际上,对于VC++来说,一个工作区空间(.dsw)中可以包含多个工程(.dsp)。因此,如果工作区中有多个工程,可以在Project下拉列表框选择当前需要处理的工程。

  • ②Class name:下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,为其添加消息处理函数等。

  • ③Object IDs:列表框列出当前选择的类所包含的所有资源的ID号,包括菜单项、对话框控件等,列表中的第一项总是当前的类名。

  • ④Messages:列表框列出对应于Object IDs框中所选中的当前项可处理的消息,以及针对当前类可被重写的MFC虚函数。

  • ⑤Member functions:列表框列出当前类包含的所有成员函数。其中,前面标注有“V”字符的是虚函数,标注“W”字符的是Windows消息处理函数。

  • ⑥Add Class:按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从ActiveX库中选取。

  • ⑦Add Function:按钮允许用户向Member Functions列表框中添加一个新的消息处理函数或重载基类的虚函数。

  • ⑧Delete Function:按钮允许用户删除Member Functions列表框中所选中的函数。

  • ⑨Edit Code:按钮打开编辑窗口,允许用户对Member Functions框中所选中的项进行编辑。

image

2、Member Variables选项卡

  • ①Project:下拉列表框与Message Maps选项卡上的Project下拉列表框含义相同,给出当前工程名称。

  • ②Class name:下拉列表框与Message Maps选项卡上的Class name下拉列表框相同,显示当前工程中包含的类,用户可以从中选择当前要操作的类。

  • ③Control IDs:显示对话框中所具有的控件的ID号;Type项表示成员变量的类型;Member项表示成员变量的名字。

  • ④Add Class:按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从ActiveX库中选取。

  • ⑤Add Variable:按钮用于给选定的控件添加成员变量。

  • ⑥Delete Variable:按钮用于删除选定控件的成员变量。

  • ⑦Update Columns:按钮用于当数据源中的表结构发生变化时,即可更新相应的记录集类,以便与最新的表结构保持一致。

  • ⑧Bind All:按钮用于把数据库内指定表中的字段与记录集类相应数据成员一一绑定。默认情况下,ClassWizard基于每个字段的名称确定记录类内相应的数据成员名称。

image

3、Automation选项卡

  • ①Project:下拉列表框给出当前工程名称。

  • ②Class name:下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,包括不支持Automation的类。

  • ③External names:列表框列出已加到当前类中的方法及属性的外部名。这些名字供Automation客户程序使用。

  • ④Implementation:文本框显示External names框中选中的方法及属性在C++类中是怎样实现的:S表示固有属性,C表示自定义属性,M表示方法,粗体表示默认的属性。

  • ⑤Add Class:按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从ActiveX库中选取。

  • ⑥Add Method:按钮用于给类添加新的Automation方法。增加或删除方法时,Class Wizard自动更新映射表。此项只对支持Automation的类有效。

  • ⑦Add Property:按钮用于给类添加新的Automation属性。增加或删除属性时,Class Wizard自动更新映射表,此项只对支持Automation的类有效。

  • ⑧Delete:按钮用于删除External names框中选定的方法或属性名。如果属性是用Get/Set方式访问的,必须手工删除.cpp文件里的Get和Set成员函数。

  • ⑨Edit Code:按钮打开编辑窗口进行编辑。

  • ⑩Data Binding:按钮用于指定Automation控件支持的数据绑定层次。

image

4、ActiveX Events选项卡

  • ①Project:下拉列表框给出当前工程名称。

  • ②Class name:下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,包括不支持ActiveX的类。

  • ③External names:列表框列出已加到当前类中的成员函数与成员变量名。这些名字供Automation客户程序使用。

  • ④Implementation:文本框显示External names框中选中的方法及属性在C++类中的实现:S表示固有属性,C表示自定义属性,M表示方法,粗体表示默认的属性。

  • ⑤Add Class:按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从ActiveX库中选取。

  • ⑥Add Event:按钮允许用户加入Automation事件。该事件用于类与该类容器之间的通信。

  • ⑦Delete:按钮用于删除选中的Automation事件。

image

5、Class Info选项卡

  • ①Project:下拉列表框给出当前工程名称。

  • ②Class name:下拉列表框显示当前工程中包含的类。用户可以选择当前需要处理的类。

  • ③File details:显示当前类的文件及资源ID号等信息。

  • ④Advanced options:控件组包含:
    Message filter:下拉列表框列出对当前选中的类有效的所有消息分类,这里是按照消息所属窗口或对话框类型进行分类的。
    Foreign class:下拉列表框的内容由当前选中类的类型决定。如果当前选中的类是对话框、有格式视图或记录集视图,那么此框列出所有与选中的类相关联的外部类名。在其它情况下,则显示为None。
    Foreign variable:框列出与当前选中的类相关的所有外部变量。此选项一般用于数据库类。在编辑记录集视图时,可以选取相关的记录集,并可以输入一个新的变量名。

  • ⑤Add Class:按钮用于添加新类。

MFC文件结构(VS2015为例)

原文链接:https://blog.csdn.net/fuhanghang/article/details/109826297

在VS2015中创建完项目之后,会自动生成下面的文件结构:
image

包括引用、外部依赖、头文件、源文件、资源文件、ReadMe。
下面对这些文件进行分类描述:

1、和项目名称相同的有两个文件
比如说我的项目名称是MFCApplication3,则会有MFCApplication3.cpp和MFCApplication3Dlg.cpp
这个地方可以和C#项目的文件结构进行类比,C#项目创建完成之后会有两个文件,分别是Program.cs和Form1.cs。分别代表程序的入口和主窗口。其实MFCApplication3.cpp是程序的入口,MFCApplication3Dlg.cpp是程序的主窗口。入口初始化时,打开主窗口,如图所示:
image

2、Resource.h中存放了程序中所有符号资源的定义
如图所示:
image

3、stdafx.h是MFC标准包含文件,包含了一些MFC的重要头文件
如图所示:
image

4、SDKDDKVer.h 将定义可用的最高版本的 Windows 平台
如图所示:
image

5、资源文件夹下包括各种图标、对话框,其中常量定义都在上面提到的Resource.h中。

可以看到MFCApplication3.ico、MFCApplication3.rc、MFCApplication3.rc2。其中MFCApplication3.ico是图标文件,MFCApplication3.rc和MFCApplication3.rc2是资源文件,rc是resource的意思。rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。两者不同在于:rc文件中的资源可以直接在VC集成环境中以可视化的方法进行编辑和修改;而rc2中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由根据需要手工地进行编辑。RC2文件:包含项目使用的附加资源的脚本文件。可以在项目的 .rc 文件的顶部包括 .rc2 文件。.rc2 文件用于存放由多个不同项目使用的资源。不必为不同的项目多次创建相同的资源,而是可以将它们放在一个 .rc2 文件中,然后将该 .rc2 文件包括在主 .rc 文件中。

标签:列表框,MFC,窗口,c++,基础知识,按钮,封装,Class
From: https://www.cnblogs.com/fusio/p/17302847.html

相关文章

  • c++遍历容器元素
    for(autoi:v)遍历容器元素1.auto2.auto&3.constauto&4.constautoC++11新增了一种循环:基于范围(range-based)的for循环。这简化了一种常见的循环任务:对数组(或容器类,如vector和array的每个元素执行相同的操作,如下例所示:doubleprices[5]={4.99,10.99,6......
  • C++标准输入输出
    一、问题引入关于C和C++的输入输出区别,虽然在C++中仍然可以使用scanf和printf,但建议使用cin和cout。虽然使用不同的函数得到的结果一样,但仔细检测发现,cin和cout没有格式控制符了,意味着输入更简单了二、解决过程#include<iostream>usingnamespacestd;intmain(......
  • MFC-RemoveProp删除窗口属性
     HANDLEh=::RemoveProp(m_hWnd,g_szPropName);//删除窗口属性/*从窗口属性表中删除一个属性参数1:HWNDhWnd窗口的句柄参数2:LPCTSTRlpString要删除的属性返回值:成功返回属性的数据;失败返回值为NULL*/     ......
  • MFC-SetProp给指定窗口增加或修改一个属性
     TCHARg_szPropName[]=_T("{0736D43A-ACCD-4C43-8CFB-0D83E11E795C}");//要增加的属性//尽量采用GUID,防止重合HANDLEg_hValue=(HANDLE)19680104;//属性数据//可以任意数据强转成HANDLEBOOLb=::SetProp(m_hWnd,g_szPropName,g_hValue);......
  • MFC-ExitProcess结束进程
     ExitProcess(0);//结束调用的进程及其所有的线程//参数:退出代码//返回值:此函数没有返回值        ......
  • C++指针
    指针指针的基本概念1、指针的作用:可以通过指针间接访问内存(指针就是内存地址)内存编号是从0开始记录的,一般用16进制数字表示可以利用指针变量保存地址指针变量定义的语法#include<iostream>usingnamespacestd;intmain(){ //1、定义指针 inta=10......
  • C++-Ubuntu core dumped(核心已转储)-GDB调试
    C++-Ubuntucoredumped(核心已转储)-GDB调试Linux的可执行程序异常退出时,提示“核心已转储”。此时需要系统生成core文件,并通过GDB调试以确定问题。https://blog.csdn.net/scjdas/article/details/128585787设置系统生成core文件用ulimit-a查看corefilesize项是否......
  • java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
    复习资料:《同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 》基本线程类基本线程类基本线程类指的是Thread类,Runnable接口,Callable接口继承Thread创建线程继承java.lang.Thread类创建线程是最简单的一种方法,也最直接。publicclassMyThread1extendsThread{}种......
  • C/C++模拟校园卡消费记录查询系统[2023-04-09]
    C/C++模拟校园卡消费记录查询系统[2023-04-09]模拟校园卡1问题描述同学们都在机房做实验或自由上机,请根据自己实际使用情况编写一份模拟校园卡消费记录查询系统,实现登录,计费,挂失,统计等相关功能。2功能要求主要功能模块:(1)登录模块:同学根据自己设定的密码登录。三次错误则......
  • 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 08.创建主HUD & 自定义作弊指令
    斯坦福课程UE4C++ActionRoguelike游戏实例教程0.绪论概述本篇文章对应课程Lecture14,56-58节。本篇文章将会教你将之前创建的各种UMG控件统合到一个主控件上。此外,还会教你如何在C++中创建自定义作弊指令,并在游戏中使用控制台执行它。目录创建主HUD使用GameMode生成玩......