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的程序的更多相关文章

  1. MFC原理第二讲.MFC的初始化过程

    MFC原理第二讲MFC的初始化过程 一丶简介 通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里. 这一节主要就是讲解Winmain在哪里. ...

  2. 框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)

    框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解) 一丶什么是框架,以及框架的作用 什么是框架? 框架,简而言之就是把东西封装好了,使用框架开发可以快速开发程序,例如MFC程序的双击写代码. 为 ...

  3. MFC原理第六讲.消息传递

    ---恢复内容开始--- MFC原理第六讲.消息传递 一丶简介 通过上一讲我们的消息映射表.我们得知. 消息映射表 会保存父类的MessageMap 以及自己当前的消息结构体数组. 消息传递是一层一层 ...

  4. MFC原理第四讲.动态创建机制

    MFC原理第四讲.动态创建机制 一丶要学习的知识点以及简介 动态创建是什么意思? 动态创建其实就是跟C++的new一样.都是创建对象.但是规避了C++语法的缺陷. 例如: char * ClassNa ...

  5. MFC控件第一讲.DC编程

    MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的.  DC可以简单理解为.没一个窗口程序都有一块内存 ...

  6. MFC原理第五讲.消息映射.以及如何添加消息

    MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...

  7. MFC原理第三讲.RTTI运行时类型识别

    MFC原理第三讲.RTTI运行时类型识别 一丶什么是RTTI RTTI. 运行时的时候类型的识别. 运行时类型信息程序.能够使用基类(父类)指针 或者引用 来检查这些指针或者引用所指的对象. 实际派生 ...

  8. 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)

    框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...

  9. iOS底层原理总结 - 探寻block的本质(一)

        面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...

随机推荐

  1. 父组件传值给子组件的v-model属性

    父组件如何修改子组件中绑定的v-model属性 因为v-model属性是双向数据绑定,而vue的通信方式又是单向通信,所以,当子组件想要改变父组件传过来的值的属性时,就会报错,典型的就是父组件传值给子 ...

  2. Hibernate框架:CRM练习--保存客户

    crm:customer ralation manager 客户关系管理系统 一.准备 1.创建web项目 2.导包 最终为: 3.引入静态页面 将文件复制放入项目的WebContent目录下面: 4 ...

  3. uni-app 顶部导航点击更换图标

    更换顶部导航的iconfont.ttf图标,先在配置文件配置好按钮: pages.json文件 "buttons": [ { "text": "\ue ...

  4. HTTP协议 与 TCP协议 的区别

    TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据. TCP/IP和HTTP协议的关系,从本质上来说,二者没有可比性,我们在传输数据时,可以只使用(传输 ...

  5. 信号量(Semaphore)

    在python的多线程体系中,一共有4种锁: 同步锁(互斥锁):Lock: 递归锁:RLock: 信号量:Semaphore: 同步条件锁:Condition. 信号量(semaphore)是一种可以 ...

  6. 整理CSS中display flex(布局利器)

    关于display:flex布局,有人了解颇深,我也是看着别人的东西学习的. display:flex的布局是什么.基本概念之类的我根本就不了解,只会用.每次看到概念之类的东西,我都是扫一眼就过去. ...

  7. 在windows下golang安装zmq3小记

    备忘这个 安装 TDM-GCChttp://tdm-gcc.tdragon.net/download 设置环境变量set C_INCLUDE_PATH=d:\DevTools\Zmq\ZeroMQ 3 ...

  8. 【转】RPC介绍

    转自:http://www.cnblogs.com/Vincentlu/p/4185299.html 摘要: RPC——Remote Procedure Call Protocol,这是广义上的解释, ...

  9. Forward团队-爬虫豆瓣top250项目-开发文档

    项目地址:https://github.com/xyhcq/top250 我在本次项目中负责写爬虫中对数据分析的一部分,根据马壮分析过的html,我来进一步写代码获取数据,具体的功能及实现方法我已经写 ...

  10. 《高质量C++&C 编程指南》学习笔记

    这本电子书是在国科大上课时候,老师在课件资源里边提供的.之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他.因此,我就格外注意这件事,但 ...