参考: https://blog.csdn.net/u014162133/article/details/46573873

1、

2、MFC简介:MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。利用这些类,可以有效发帮助程序员完成Windows应用程序的开发。

MFC AppWizard是一个辅助生成源代码的向导工具,它可以帮助我们自动生成基于MFC框架的源代码。在向导的每一个步骤中,我们可以根据需要来选择各种特性,从而实现定制应用程序。

3、我们在编写MFC程序时,在我们编写的程序中找不到WinMain函数,是因为MFC做了封装,将这些放到了安装路径下,比如:D:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC,WinMain函数在APPMODUL.CPP文件中,这个函数是在程序编译链接时,由链接器将该函数链接到我们的MFC程序中的。

4、MFC大致流程

CTestApp theApp;//构造全局对象
WinMain()
{
AfxWinMain();//调用下面的函数
}
AfxWinMain()
{
pThread->Initinstance();//初始化工作和注册窗口类,窗口显示和更新
pThread->Run();//消息循环
} //而在BOOL CTestApp::InitInstance()中的代码
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
//完成了将这三个类关联起来的工作。

程序执行顺序

(1) 先执行到全局对象定义处:CTestApp theApp;

(2) 然后到了TestApp的构造函数

(3) 然后才执行到WinMain函数

5、在程序入口函数main或WinMain加载前,系统已经为全局变量或全局对象分配了存储空间,并为他们赋了初始值。对一个全局对象来说,此时就已经调用了该对象的构造函数,构造该对象,并进行初始化操作。

在MFC程序中,在WinMain之前有个theApp全局变量先被构造并被初始化,而由于子类构造函数执行前,其父类的构造函数先被执行,所以CTestApp的父类CWinAPP的构造函数先执行。产生了theApp对象后,在WinMain()中的指针*pThread和*pApp就有了内容,这两个指针返回的都是theApp对象的地址。

6、对MFC程序来说,通过产生一个应用程序类的对象来唯一标识应用程序的实例。每一个MFC程序有且仅有一个从应用程序类(CWinApp)派生的类。每一个MFC程序实例有且仅有一个该派生类的实例化对象,也就是theApp全局对象。该对象就表示了应用程序本身。

7、在MFC中,以Afx为前缀的函数都是全局函数,可以在程序的任何地方调用它们。

8、

9、

10、窗口类、窗口类对象与窗口关系

11、如何在单文档文件中显示一个CButton的对象?

在CMainFrame::OnCreate()中定义一个CButton的对象btn;然后调用

btn.Create("维新",WS_DISABLED   |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,  CRect(,,,),/*GetParent(),*/this,);

注意:

(1) 此处btn不能是局部变量,否则它的生命周期太短,将不能显示。

(2) 在CBUTTON类的Create函数的第二个参数中加入WS_VISIBLE 参数才行。否则必须调用ShowWindow显示,也可以在view的OnCreate消息响应函数中加入

(3) CButton类的定义头文件在afxwin.h中,而stdafx.h包含了afxwin.h,所以可以直接使用。因为MFC中的每一个类中都有#include "stdafx.h"的声明。

(4) 按钮的父窗口不同,其显示位置也会有所差异。

12、一些常用快捷方式:

功能分类

快捷键

说明

File

(文件)

Ctrl+N

New新建工程

Ctrl+O

Open 打开文件

Find

(查找)

Alt+F3/Ctrl+F

弹出查找对话框

F3

查找下一个

Shift+F3

查找上一个

Ctrl+H

替换

Ctrl+]/Ctrl+E

寻找下一半括弧

F4

寻找下一个错误/警告位置

Shift+F4

寻找上一个错误/警告位置

格式

Ctrl+U

将选定区域转换成小写

Ctrl+Shift+U

将选定区域转换成大写

Alt+F8

自动格式重排

Build

(建立)

F7

Build(编绎并链接成exe文件)

Ctrl+F7

Compile(编译)

Ctrl+F5

Execute(编译+链接+运行)

Ctrl+Shift+F5

Restarts the program(重新运行程序)

Debug

(调试)

F5

Go(顺序执行)

F11

step into (顺序执行,进入循环或函数)

F10

step over(顺序执行,不进入循环或函数)

Ctrl+F10

Run to cursor(自动执行到用户光标所指的语句前)

Shift+F5

Stop Debugging(停止调试)

F9

Insert/Remove breakpoint(在当前行插入/去掉断点)

Ctrl+Shift+F9

去掉所有断点

第3章 MFC框架程序剖析的更多相关文章

  1. 关于MFC框架程序中CWinApp::OnIdle

    很早之前就发现,我写的图形引擎在MFC框架程序中的刷帧率始终在60FPS左右.好在自己的程序对刷帧率的要求不是很高,所以一直没有太过纠结此事.直到今天看了别人的程序才发现应该在函数CWinApp::O ...

  2. MFC框架程序解析

    MFC的 程序框架: WinMain函数:程序首先到达全局变量theApp,再到达theAPP的构造函数,最后到达WinMain函数处. 问:为何要定义一个全局对象theAPP,让其在WinMain函 ...

  3. MFC应用程序框架(转)

    对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用 ...

  4. MFC应用程序框架入门(转)

    1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的.自20世纪90年代初问世以来,M ...

  5. VS2010/MFC编程入门之四(MFC应用程序框架分析)

    VS2010/MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米 http://www.jizhuomi.com/software/145.html   上一讲鸡啄米讲的是VS2010应用 ...

  6. [转]深入理解MFC中程序框架

    最近抽空复习了一下MFC的内容,觉得一篇博文写的不错. 原文内容太多直接给出链接吧:深入理解MFC中程序框架 链接2:深入浅出话VC++(2)——MFC的本质 链接3:MFC单文档/视图结构穷追猛打

  7. 第四课——MFC应用程序框架

    一.MFC应用程序类型 上篇文章的彩蛋:可通过使用MFC应用程序向导(MFC AppWizard)的功能来创建所需要的应用程序,这意味着不需要输入任何代码.MFC除了应用程序向导,还对应用程序项目有着 ...

  8. VS2010-MFC(MFC应用程序框架分析)

    转自:http://www.jizhuomi.com/software/145.html 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数 ...

  9. MFC学习-第2,3课 MFC框架的运行机制

    转自:http://blog.163.com/zhigang0633@126/blog/static/38790491200822711526168/ 讲述MFC AppWizard的原理与MFC程序 ...

随机推荐

  1. 在庫購買管理(MM)

    ■購買管理■ [購買依頼]ME51N: 登録ME52N: 変更ME53N: 照会 [購買発注]ME21N: 登録ME22N: 変更ME23N: 照会 [見積依頼]ME41: 登録ME42: 変更ME4 ...

  2. Android 中的一些特殊目录与文件

    用作命令的二进制文件位于/system/bin/与/system/xbin/下 应用数据位于/data/data/, 原始安装文件位于/data/app/(Play商店中非免费应用位于/data/ap ...

  3. Android 中运行时权限获取联系人信息 Demo

    代码比较简单... AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <m ...

  4. TouTiao开源项目 分析笔记11 以总体到局部的思路 构建图片主列表

    1.构建图片主列表的整体片段PhotoTabLayout 1.1.首先创建一个PhotoTabLayout片段 public class PhotoTabLayout extends Fragment ...

  5. 斐波那契数列(递归)&求100以内的素数

    Java 5 添加了 java.util.Scanner 类,这是一个用于扫描输入文本的新的实用程序.它是以 前的 StringTokenizer 和 Matcher 类之间的某种结合.由于任何数据都 ...

  6. shell参数 传递

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...

  7. Java中String类new创建和直接赋值字符串的区别

    转自:https://blog.csdn.net/a986410589/article/details/52454492 方式一:String a = “aaa” ; 方式二:String b = n ...

  8. Pascal小游戏 井字棋

    一个很经典的井字棋游戏 Pascal源码Chaobs奉上 注意:1.有的FP版本不支持汉语,将会出现乱码.2.别想赢电脑了,平手不错了. 井字过三关: program TicTacToe; uses ...

  9. selenium界面元素定位

    一.        Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import  webdriver #打开火狐驱动 driver=webdriver ...

  10. 【Java】Java JDK 安装及环境配置

    安装包下载: Java Platform (JDK) 11 https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 ...