Hello,MFC!

  Hello.h文件

Hello.cpp文件

  越简单的东西,越能看到它的本质,无意中发现了MFC Windows 程序设计的代码,继而去寻找这本书的下落,拿来一看确实有许多自己没注意的地方,虽然我已经使用MFC几个月了,第一个程序也已经使用,可是它还是蒙着一层面纱。很想去揭开看看。

    当运行第一个例子也就是上面的程序的时候(注释的地方有些是自己加的),看到的是一个OnPaint函数,里面执行语句也只有简单的一句

DrawText (_T ("Hello, MFC"), -1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);先对它进行了研究,第一个参数是输出的字符串,第二个参数便是所要输出字符串的字数,第三个是设备的大小,使用GetClientRect (&rect)来获取,第四个参数是设置字体格式的,居中啊,左对齐啊什么的,有些效果要拖动窗口才会出现,你比如说DT_BREAKWORD,DT_END_ELLIPSIS 等。看到这里也算是对DrawText有了一个更好的了解。像DrawText这样的函数有成千上万个,慢慢学吧。

   回到MFC 程序设计的第一章,在没有MFC之前,使用c来创建窗体据说是一件很困难的事情(我没做过),MFC的出现降低了Window 程序设计的门槛,大量的封装,大量的代码重用,不过坏处就是很难搞清程序到底是怎么样运行的。MFC 最大的特点就是消息(MESSAGE),所以了解消息机制很有必要,当程序的窗口创建完成以后,就进入了一个等待消息的过程,一旦出现消息那么它就会去按照约定去处理。

    MFC将消息分为三大类:1.标准消息,即除WM_COMMAND之外的任何WM_开头的消息,任何派生自CWnd的类都可以接受该消息,并按照继承关系接受(如从CScrollView到CView再到CWnd)。2.命令消息,即WM_COMMAND,任何派生自CCmdTarget的类,兼可接受该消息,接受顺序如下图所示,其中标号标注了接受消息的顺序,箭头代表调用顺序 :


图1 消息的拐弯流动

3.Control Notification,通知类消息,也以WM_COMMAND形式出现,由控件产生,通知其父窗口。

  我们在使用消息时,有些是系统提供的比如说WM_PAINT,WM_CLICK,当然我们也可以自己去定义消息,就是在BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间,另外就是DECLARE_MESSAGE_MAP,起初我还以为是很简单的几句话。后来才了解,消息发给哪个函数全靠上面这几句话了。

看看这三个宏是怎样定义的:

 

  可以看出DECLARE_MESSAGE_MAP宏在其类中申请了一个全局结构和获得该结构的函数,而在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间填写刚才的全局结构,将消息和对应的处理函数联系起来,并通过AFX_MSGMAP中的pBaseMap指针,将各类按继承顺序连接起来,从而提供消息流动的道路(即消息的直流,满足标准消息流动的要求)。

下面我们举个例子:

 

  这样 WM_CREATE,WM_PAINT 在消息网中流动,当流到CMyWnd类的 messageMap 结构时,发现有该消息的记录,则调用记录中记载的 OnCreate 和 OnPaint 函数,进行响应消息,从而完成了 Windows 消息驱动机制。

 

注:后半部分摘自网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值