第3章 MFC框架程序剖析

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

1、

第3章 MFC框架程序剖析

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、

第3章 MFC框架程序剖析

9、

第3章 MFC框架程序剖析

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

第3章 MFC框架程序剖析

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

去掉所有断点

上一篇:MFC框架程序解析


下一篇:PHP中的单例模式