MFC的起步

1、MFC运行的基本原理

在window中,MFC的运行机制是以事件为驱动,消息为基础的运行体制。(driver Event,base message)。在应用程序的整个运行过程中OS与app总是通过messge这个中间机制来进行通信。

 

2、MFC中一个app运行程序的开始和正常的结束

这大概分如下7步:

(1)应用程序首先注册窗口类,然后创建窗口类,通过CreateWindow,为程序创建一个窗口,作为应用程序的操作舞台,在CreateWindow快结束之时,就会发送一个window的标准消息WM_CREATE,那么在窗口函数中可以通过消息的扑捉来对其相关的属性或资源进行初始化设置;(窗口函数就是处理消息的函数)

(2)app程序的主函数(主线程)不段的通过USER的核心类库实现从window的消息队列中取得消息(GetMessage的核心window api函数)进入到消息的不断循环过程中,如果消息是WM_QUIT,那么GetMessage函数将会返回0,这时候就会退出消息循环进入结束整个程序(包括相关资源的释放)

(3)当获得一个消息后,需要进行消息的转化和分发,主要有api函数TranslateMessage() DispatchMessage()来完成,主要的目的是把相关的消息发送给相应的窗口的消息处理窗口函数,当消息处理完毕后继续执行(2)(3)步;

(4)如果用户点击了系统菜单中的close命令,这时候系统就会收到一个WM_CLOSE消息,通常窗口处理函数是不进行相关的处理,直接由DefWindowProc处理它

(5)DefWindowProc收到WM_CLOSE后,会调用DestroyWindow把相关的窗口进行清除,适当的资源进行释放,在这个阶段仅仅只是把窗口资源进行了释放

(6)当DestroyWindow api函数执行完成后就会发送一个WM_DESTROY的消息给os,此时对于WM_DESTROY的反应就是调用PostQuitMessage api函数,在消息队列中放入WM_QUIT消息

(7)User模块通过GetMessage函数获得WM_QUIT消息,就会退出消息循环的处理;

(8)app往下运行,进而结束整个程序。

其实整个app运行的过程中刚好体现了1中所说的MFC的运行基本机制,这是整个MFC运行的核心框架体系。以消息message的传递过基础,实现应用程序和os之间的通信。

os——(message)——app


3、c Run-Time library 、c标准库和window api函数库的关心和区别

(1)c运行时库是支持整个app应用程序的基础,因为这个库位app程序的运行提供了基本的运行环境和相关的一些操作函数,其中例如程序的进入main()函数(winmain()函数的调用)和函数的退出(exit(()),此库和编译器厂家和操作系统有关一般分为如下两种.LIB(静态连接库文件).DLL(动态链接库文件)

在vc++ 中提供了六种库的连接(.LIB 和.DLL连接有Debug和Release模式下的不同设置,对于DLL有动态链接和静态连接之分)

C运行时库库文件
Single thread(static link)libc.lib
Debug single thread(static link)libcd.lib
MultiThread(static link)libcmt.lib
Debug multiThread(static link)libcmtd.lib
MultiThread(dynamic link)msvcrt.lib(导入库)
Debug multiThread(dynamic link)msvcrtd.lib(导入库)

 

由上就可以知道c运行时库根据不同厂家提供的编译器不同而不同,同时也与os不同

(2)c标准库是通过ANSI标准委员会通过指定的相关c语言的标准指定的一套函数库,里面这个库所变下的c语言程序可以在任何系统上进行编译后正常运行,“标准”的含义就是为了使所有的人通过相同的约束来写跨平台的代码

一般c运行时库和c标准库中的函数实现功能有些事相同的,但是前者是与编译器和os的环境有关,主要是使用c标准库的相关接口,来实现在本os上的功能,后者是一种广义的大家都遵从的。

 

(3)window api函数库是os提供给用户的控制操作系统kernel运行的接口函数,一般用户只能使用而无法进行查看,以window操作系统为例,主要通过os的三大核心模块进行支持GDI32.dll,USER32.dll,KERNEL.DLL支持

如入到用户进行文件的操作时,就需要相应的api函数,一般api分为和UI有关的接口,和ui无关的接口。

 

4、MFC中关于c++相关特性的理解

c++的特性封装、继承、多态在这里主要是谈谈自己多封装中的向上转型和向下转型,以及多态的性质进行理解。

(1)继承

继承的基本特性是通过子类和基类的关系特性显示的,即在现实中是一般化(基类)和特殊化(子类)的表现,一般面向对象语言的设计都可以用现实世界中对象的观点来解释

 

当子类继承了基类后,那么子类拥有了基类的所有成员,包括其中的成员函数和成员变量

对于不同子类的对象,一般对象都有自己的成员变量的拷贝,互相之间是不会有影响的。但是相互之间只有一份成员函数的拷贝,那么一份成员函数如何实现对不同成员变量的操作了。

这主要是依赖于成员函数中默认添加的this指针的功能,一般this指针就是新创建变量的指针。

 

几点说明:(没有虚函数的时候)

1.当用“基类指针”指向“派生类对象”的时候,“基类指针”只能调用自己内部定义的成员函数;

2、“派生类指针”指向“基类对象”是,需要进行显示的转换,这是一种比较危险的操作,不适宜经常进行;

3、如果“基类”和“派生类”均有同名函数的实现(返回值、函数名、形参相同),那么到底调用那一个函数,由指针的定义类型来决定,而不是由指向类型来决定。

 

 

(2)多态性

相关特性的实现和提出都是与需求有关

在现实的世界中我们更多的是寻求一般化,比如“希望通过相同的操作打印出所有形状实例的形状属性”并且在今后不管是什么怪形状我们都可以打印。

那么这种实现就是“一般化”功能很强大,不管是以前、现在、将来的相关操作均考虑在内。

此时就提出了虚函数,虚函数是实现多态性和动态绑定的关键所在。

 

虚函数提出的背景:通过基类的指针可以使同样的操作命令反映不同的信息(多态)

虚函数有两种,一种是纯虚函数,不具体实现,只是占用一个名字,作为接口,让派生类来实现;

                     二中是普通虚函数,在各个类中均有具体实现。

一但当基类和派生类中均有虚函数是,那么指针访问的性质就发生了本质性的变化

1、用“基类指针"指向"派生类之对象"时,如果基类和派生类中都有同样的虚函数,那么指针就需要通过自己制定的对象来实现函数的调用。

2、当”派生类的对象“向下转化为”基类对象“时,会碰到截断的操作(系统默认操作),那么这时的访问就只能访问基类的相关函数,而不能访问派生类

因此一般我们多是使用指针来操作相关的行为

 

 

关于c标准库、c运行库和window api自己理解的不是很好,后续会进行继续的学习和更改

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值