MFC入门

0.简介
    MFC是对Win32的封装,里面吧很多相同的重复代码都自动生成了,还有就是可以很直接的添加消息事件,方便的很,其实他并不复杂,只要从Win32的角度去理解就很容易明白其中的每一步;

回顾:
Windows消息循环处理机制,就是系统维护一个消息队列,等待应用程序来取,然后应用程序通过GetMessage函数去消息队列中取自己的消息,然后通过DispatcheMessage函数将消息交由操作系统的消息处理函数(消息过程)去处理
注意:
在为对象增加方法的时候,可以在类资源上点击右键,直接添加消息,然后就生成了一个成员函数,其实他会在三个地方做处理,其中就是自动加入消息响应函数,在然后加入一个注释宏将消息事件和消息响应函数联系起来了,最后就是是添加一个消息事件,用于编辑,接着刚才的添加完消息事件后,可以点击直接编辑现成的函数,就是进入自己新添加的消息事件中进行编辑,在这里编辑的代码直接就会事件消息的响应,为什么?
建了MFC第一个就是发现他的继承派生的比较多,如果像C++一样在每当继承一次就在子类背负一张函数表,那么的每一个对象就得有一百多个虚函数表来实现,这样在内存中是一种很大的浪费,这就是MFC不同与Win32的地方。


在MFC中的消息映射机制:
在MFC中实现的方法就比较简单,他就是在程序的后台实现维护一张handel就是句柄和C++对象指针的映射表,因为消息都是与相关的窗体相关的,并且消息的第一个参数就是标识该消息属于那个句柄,然后在系统维护的句柄对照表中找寻他所属的对象的指针class*,然后根据类对象指针去传递给基类,然后基类执行一个叫WindowProc的虚函数,然后每一个子类都实现一个WindowProc的虚函数,在每一个虚函数都是调用自己的消息响应函数,在虚函数找的过程中都是通过其中的OnWindMsg函数来执行消息路由(消息映射处理)的,在判断自己是否具有消息处理函数时,首先去头文件中找DECLARE_MASSAGE_MAP函数之上有没有消息响应函数声明,然后去源文件中看看在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间有没有消息响应的注释宏(实际就是消息响应函数声明),如果说找到了消息处理函数,就用这个函数去处理消息。

记住,在MFC中view类始终是在框架类之上的,这样造成的后果就是在父控件中执行的消息都会优先被子控件接受,由子控件的消息处理函数进行处理,在菜单栏是非客户区,下面的是客户区,就是在非客户区默认是允许鼠标拖动的,而在客户区是不允许鼠标拖拽的

技巧:
在MFC中一般的写参数直接就用默认给的参数名就行了,这样做的目的是统一函数参数 ,并且在类中实现的功能函数名直接就和系统函数名相投就行了,只是要调用系统的函数时加上::的作用域就行的,这样前面没有对象的就代表使用的是全局的函数,还有就是在框架类有非客户区,就是标题栏和菜单栏,而view 类只有客户区



习惯:
在MFC中,CDC是MFC的DC( device context 设备环境)的句柄,hDC是DC的句柄,句柄就是类似于指针的数据类型,MFC类的前缀都是以C开头的
以H开头的大多数是句柄

程序和进程:

程序不具有申请资源的资格


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值