新建MFC桌面应用程序

简介: 新建MFC桌面应用程序

一、MFC的概念和作用


1、什么MFC?


  全称 Microsoft Fundation Class Library,我们称之为微软基础类库   从硬盘的存在形式上来说MFC就是一个库。   从原理上来说,MFC还是一个程序框架。


2、为什么使用MFC?


  基于框架开发,提供工作效率,减少开发周期,降低开发成本。


二、MFC应用程序的分类


1、使用MFC制作自己的库程序:静态库程序,规则动态库程序,扩展动态库程序


2、使用MFC制作自己的窗口程序:


单文档视图架构程序


      CFrameWnd - 框架窗口类(封装了框架窗口的操作)


      CWinApp - 应用程序类,(封装了关于流程管理)


      CDocument -文档类,(封装了关于数据的管理,例如:提取/转换/存储..)


      CView - 视图窗口类,(封装了关于视图窗口的操作)


多文档视图架构程序


      CMDIChildWnd - 子框架窗口类(封装了子框架窗口的操作)


      CMDIFrameWnd - 主框架窗口类(封装了主框架窗口的操作)


      CWinApp - 应用程序类,(封装了关于流程管理)


      CDocument -文档类,(封装了关于数据的管理,例如:提取/转换/存储..)


      CView - 视图窗口类,(封装了关于视图窗口的操作)


对话框架构程序


      CWinApp - 应用程序类,(封装了关于流程管理)


      CDialog - 对话框窗口类,(封装了关于对话框窗口的操作)


三、MFC类概述


1、CObject - MFC库中绝大部分类的最基类,运行时类信息机制 / 动态创建机制 / 序列化机制


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


3、CWinThread / CWinApp - 应用程序类,管理程序流程。


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


5、Exceptions - 异常处理类,封装了MFC库中可能出现各种异常情况


6、CFile及其子类 - 文件操作类,封装了文件的读写等等各种操作。


7、CWnd - 所有窗口类的最基类


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


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


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


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


12、CDC及其子类,绘图设备类,封装了各种绘图设备的操作


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


14、Array  / List / Map - 封装了标准中的各种容器结构


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


四、制作第一个MFC程序,环境为VS2019


1、新建新建Windows桌面向导


0a2653c851af460fa595bd959398a8f1.png


2、配置项目


0eacb84100b54626af849e6b562bf92a.png


3、将该项目设为启动项


4、修改属性为多字节,静态库中使用MFC


2d65d23f6d4748949b924e4057485923.png


5、新建MFCbase.cpp源文件


2e9b90b2ca334476abebe75bafe6eeaa.png


6、文件内容为:


#include <afxwin.h>
//定义一个自己的框架类(CMyFrameWnd),派生自CFrameWnd
class CMyFrameWnd : public CFrameWnd
{
};
//定义一个自己的应用程序类(CMyWinApp), 派生自CWinApp,并重写父类的成员虚函数  InitInstance(创建并显示框架窗口)
class CMyWinApp : public CWinApp
{
public:
        CMyWinApp();
        virtual BOOL InitInstance();
};
//定义一个非常非常非常重要的全局变量 theApp(爆破点)
CMyWinApp::CMyWinApp()//构造,不写也行,会有默认的
{
}
CMyWinApp theApp;//爆破点
BOOL CMyWinApp::InitInstance()
{//此函数中的this为&theApp
        CMyFrameWnd* pFrame = new CMyFrameWnd;
        pFrame->Create(NULL, "测试");
        this->m_pMainWnd = pFrame;
        pFrame->ShowWindow(SW_SHOW);
        pFrame->UpdateWindow();
        return TRUE;
}


7、程序执行流程:


构造theApp(爆破点)


    1)将&theApp保存到 当前程序线程状态信息 中。


    2)将&theApp保存到 当前程序模块状态信息 中。


进入入口函数(WinMain)


    1)利用 AfxGetThread() / AfxGetApp()获取 &theApp


    2)利用theApp调用应用程序类的成员虚函数InitApplication (初始化)


    3)利用theApp调用应用程序类的成员虚函数InitInstance (创建并显示窗口)


    4)利用theApp调用应用程序类的成员虚函数Run(消息循环)


    5)当没有消息时,利用theApp调用应用程序类成员虚函数OnIdle  (空闲处理)


    6)当程序退出时,利用theApp调用应用程序类成员虚函数ExitInstance (善后处理)


8、运行效果:


4cebaac233b3433da32a72337a77fc60.png


注意:


::开头的函数为WIN32的API函数


Afx开头的函数为MFC中的全局函数

目录
相关文章
|
安全 Shell 网络安全
OpenSSH ProxyCommand命令注入漏洞(CVE-2023-51385)
enSSH存在命令注入漏洞(CVE-2023-51385),攻击者可利用该漏洞注入恶意Shell字符导致命令注入。
2366 1
|
存储 缓存 数据挖掘
阿里云服务器通用算力型u1与经济型e实例对比与常见问题参考
阿里云的通用算力型u1与经济型e实例均以实惠的价格提供云服务,但各有侧重。经济型e实例采用共享模式,适用于个人开发者、学生及小微企业,适合搭建网站、开发测试等轻量级应用;通用算力型u1实例则提供独享资源,更适合对稳定性和性能有一定要求的企业级应用,如中大型网站、数据分析等场景。e实例基于Intel® Xeon® Platinum处理器,提供ESSD Entry云盘,价格亲民;u1实例同样支持ESSD系列云盘,具备更高性价比和稳定算力保障。选择时,个人用户可优先考虑经济型e实例,追求性价比;企业用户则推荐使用通用算力型u1实例,以获得更佳的性能和服务质量保证。
834 4
阿里云服务器通用算力型u1与经济型e实例对比与常见问题参考
|
消息中间件 监控 前端开发
研发人员如何做好日常工作的稳定性保障
本文介绍了一些研发人员如何做好稳定性建设的工作事项
791 0
|
C语言
C语言--生日日期输出--年月日,一行输出--之间没有间隔,若月份为个位,在前面添加0
C语言--生日日期输出--年月日,一行输出--之间没有间隔,若月份为个位,在前面添加0
261 0
|
缓存 小程序 API
微信小程序体验版数据加载不了,打开调试模式下才行(在微信开发者工具上也能加载数据)
微信小程序体验版数据加载不了,打开调试模式下才行(在微信开发者工具上也能加载数据)
4466 1
微信小程序体验版数据加载不了,打开调试模式下才行(在微信开发者工具上也能加载数据)
|
网络协议 网络架构
【网络篇】第二篇——IP协议与MAC地址详解(一)
【网络篇】第二篇——IP协议与MAC地址详解
【网络篇】第二篇——IP协议与MAC地址详解(一)
|
存储 缓存 算法
S32K3XX单片机DMA原理深度解析(上)
S32K3XX单片机DMA原理深度解析(上)
|
缓存 C# 块存储
使用双缓冲技术解决winform窗体控件卡顿(dataGridView加载数据缓慢)
使用双缓冲技术解决winform窗体控件卡顿(dataGridView加载数据缓慢)
3061 0
|
数据可视化 TensorFlow 算法框架/工具
Dropout 与过拟合抑制 | 学习笔记
快速学习 Dropout 与过拟合抑制
Dropout 与过拟合抑制 | 学习笔记