MFC原理第一讲.MFC的本质.以及手工编写MFC的程序
MFC原理第一讲.MFC的本质.以及手工编写MFC的程序
PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始.
一丶MFC的本质是什么.
MFC的本质其实就是Win32程序的一种封装. 其实就是封装好了.我们直接用就行了.
二丶手工编写一个MFC程序.
手工编写MFC程序.需要熟悉两个类
一个是CWinAPP,一个是CFramWnd类.
这两个类的作用.
CWinAPP 这个主要就是保存窗口的一些数据.跟窗口本身无关.
CFrameWnd 这个类主要就是创建窗口. 跟窗口有关的一个类.
看下MFC的窗口继承图:

首先就是不管那个类.顶层的类就是CObject类.
CWinAPP的顶层类是Cobject CFrameWnd也是.
总的来说. 这两个类一个是保存数据.一个是跟窗口有关.
总结:
CWinAPP 这个类就是与程序有关.与窗口无关.并且保存数据和动作的一个类.
CFrameWnd 这个类就是与窗口有关的一个类. 管理窗口的.
三丶如何开始编写一个简单的MFC窗口类
既然上面我们熟悉了两个类的作用. 那么还要熟悉里面的成员方法.
CWinApp 里面的 InitInstance虚函数. 这个主要是保存窗口句柄. 显示更新窗口. 与程序有关.与窗口无关.
CFrameWnd 里面的Create 这个其实就是创建窗口. 我们的CWinAPP里面需要创建CFramWnd 窗口类.并且保存窗口句柄. 所以CFrameWnd是管理窗口的.
编写MFC类的步骤.
1.创建Win32工程.
2.添加一个头文件.跟一个.cpp文件.
3.头文件中定义字节的 CMyApp 并且继承 CWinAPP. 重写虚方法 InitInstance
4.头文件中接着定义 自己的CMainWnd类. 继承CFrameWnd. 并且提供构造.构造里面创建窗口.
5.CPP 文件必须包含MFC类库. afxWin.h
6. 使用MFC 静态库的方式.
例如下图:

具体实现代码:
1. .h文件的代码.
#pragma once #ifndef MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086
#define MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086 class CMyApp :public CWinApp
{
//1覆盖虚函数 保存创建窗口的一些数据. 但跟窗口本身无关.
public:
virtual BOOL InitInstance();
}; //框架类
class CMainWnd : public CFrameWnd
{
//构造函数.构造create窗口 主要跟窗口有关的一个类.
public:
CMainWnd(); };
#endif // !MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086
.cpp的窗口代码.
#include <afxwin.h>
#include "FirstMfc.h" CMyApp theApp; BOOL CMyApp::InitInstance()
{
//窗口窗口保存在m_painWnd
m_pMainWnd = new CMainWnd; 创建我们的窗口保存在m_pMainWnd中. m_pMainWnd成员是专门保存窗口句柄的.这个成员在CWinThread中定义. 这个类先不用管是什么类.
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
} CMainWnd::CMainWnd()
{
//创建窗口
Create(NULL, TEXT("HelloMfc"));
}
应用程序截图:

四丶带着疑问学习
疑问:
1.不是说MFC是对Win32程序的封装吗.但我们很简单的就创建除了窗口.那么Winmain在哪里.
2.消息处理在哪里.
以上疑问我们会慢慢讲到. 如果有兴趣.可以看看MFC源码.也可以看看我以前写过的MFC原理的博客.
代码链接: 链接:https://pan.baidu.com/s/1yS2CBfCLiUY9OJHw9NwD7Q 密码:6z6w
MFC原理第一讲.MFC的本质.以及手工编写MFC的程序的更多相关文章
- MFC原理第二讲.MFC的初始化过程
MFC原理第二讲MFC的初始化过程 一丶简介 通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里. 这一节主要就是讲解Winmain在哪里. ...
- 框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)
框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解) 一丶什么是框架,以及框架的作用 什么是框架? 框架,简而言之就是把东西封装好了,使用框架开发可以快速开发程序,例如MFC程序的双击写代码. 为 ...
- MFC原理第六讲.消息传递
---恢复内容开始--- MFC原理第六讲.消息传递 一丶简介 通过上一讲我们的消息映射表.我们得知. 消息映射表 会保存父类的MessageMap 以及自己当前的消息结构体数组. 消息传递是一层一层 ...
- MFC原理第四讲.动态创建机制
MFC原理第四讲.动态创建机制 一丶要学习的知识点以及简介 动态创建是什么意思? 动态创建其实就是跟C++的new一样.都是创建对象.但是规避了C++语法的缺陷. 例如: char * ClassNa ...
- MFC控件第一讲.DC编程
MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的. DC可以简单理解为.没一个窗口程序都有一块内存 ...
- MFC原理第五讲.消息映射.以及如何添加消息
MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...
- MFC原理第三讲.RTTI运行时类型识别
MFC原理第三讲.RTTI运行时类型识别 一丶什么是RTTI RTTI. 运行时的时候类型的识别. 运行时类型信息程序.能够使用基类(父类)指针 或者引用 来检查这些指针或者引用所指的对象. 实际派生 ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
- iOS底层原理总结 - 探寻block的本质(一)
面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...
随机推荐
- FeatureTools
featuretools一种自动特征工程的工具.可快速生成较多类型的特征,取得不错的效果. 1.输入:把原始数据转换成featuretools的输入 2. 可以适当调整特征个数,防止训练的模型过拟合 ...
- 采用Google预训bert实现中文NER任务
本博文介绍用Google pre-training的bert(Bidirectional Encoder Representational from Transformers)做中文NER(Name ...
- Ubuntu搭建Anki服务器
Ubuntu搭建Anki服务器 第一步安装Anki 阿里云的服务器,xshell远程登录上 #以root用户进行操作 #安装Akni服务 easy_install AnkiServer #添加名为an ...
- eclipse启动时要求高版本jdk的问题
在eclipse.ini文件首行添加 -vm C:\Program Files\Java\jdk1.8\jdk1.8.0_131\bin https://blog.csdn.net/wanlin77/ ...
- 与我们息息相关的internet服务(3)---电子邮件服务
几年前了解了一下,现在再实施的时候,再了解,当然如果要到牛人张小龙28岁时的开发程度,可能还差一个筋斗云 在起步一个公司,从组建的技术上,可能要准备很多东西,其中一个就是我们熟悉的企业邮箱. 伊妹儿, ...
- 数独计算(C#)
计算零到多个可能的数独结果,并打印到Console中. 调用方法 MainController mc = new MainController(); mc.Do(); 输入 数独数据 类型为int[, ...
- charming_memory
Memory Master 一 .Forget遗忘 遗忘似乎是记忆的天敌,但是善用遗忘规律却能帮助我们更好的记忆. 复习的最佳时间是实际材料的1~24小时,最晚不超过2天,复习时间太长,就有一种生疏的 ...
- 【repost】Python正则表达式
星光海豚 python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技 ...
- java(一) 基础部分
1.11.简单讲一下java的跨平台原理 Java通过不同的系统.不同版本.不同位数的java虚拟机(jvm),来屏蔽不同的系统指令集差异而对外体统统一的接口(java API),对于我们普通的jav ...
- maven项目打包成war包发布到tomcat下...
分为两种情况: 1.当你的项目中没有前端页面时,直接右键项目--Export--选择web下的warFile--选择目录到tomcat安装目录下的webapps下即可访问. 2.当项目中有前端页面时 ...