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. vue中 关于$emit的用法

    1.父组件可以使用 props 把数据传给子组件.2.子组件可以使用 $emit 触发父组件的自定义事件. vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( ev ...

  2. UTF-8的BOM含义

    BOM的介绍 在github上写md文件的时候,发现生成自己blog时,报出一个错误是让使用UTF-8编码,然后在Notepad++上把文件转成UTF-8时,发现菜单中有"UTF-8无BOM ...

  3. FFMPEG增加和提取字幕流

    转自 https://www.cnblogs.com/satng/p/5514683.html 防抽复制一遍 增加字幕流ffmpeg -i video.avi -i sub.ass -map 0:0 ...

  4. 再谈docker基本命令

    子曰,温故而知新 今日,再次看书之际,又寻得docker的几条使用命令,用小本本记下来 配置docker镜像源 当我们在拉去一些共有镜像时,默认,docker会向docker.io去获取,如果在拉取的 ...

  5. 回头来学习wpf的FlowDocument

    学习了一段时间的electron,其实是一个神奇的开发方式,让人神往.但其打印和ocx或是activeX方面还是让我不大放心去使用.毕竟当前首要任务还是window的应用开发. 于是重新学习wpf的F ...

  6. macOS 安装 ctags

    macOS 安装 ctags macOS 自带一个 ctags,但是不支持 -R 参数,递归产生tags文件 $ ctags -R --exclude=.git --exclude=log * cta ...

  7. C# 自动程序 windows 无法启动 XXXX 服务 错误5 拒绝访问

    遇到过两次 这样的问题了,所以记录一下 原因可能是服务所在文件的目录权限不够 解决方法: 1是查看服务对应的程序所在的目录 2是设置目录的安全权限 右击–属性–安全–添加相应的帐号,给予除完全控制外的 ...

  8. CentOS 5 常见的configure error的解决方法

    仅限于CentOS 5 configure: error: No curses/termcap library found 网上有的说法是: --with-named-curses-libs=/usr ...

  9. Visualizing the Git data model

    I wrote a small tool git-graph.py over the weekend which can be used to generate the object graph of ...

  10. Windows 10 IoT Serials 10 – 如何使用OCR引擎进行文字识别

    1. 引言 OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方 ...