windows操作系统是靠消息的驱动的,所有的事件都被封装为各种各样的消息,系统和其他程序通过接受消息,分析消息附带的参数,再分别进行相关的处理,然后完成相关的任务。不管用什么语言,或者什么开发工具,只要是在windows下可以运行的程序,在他的本质上都有一个接受消息、处理消息的循环。这就是win32程序乃至整个windows操作系统本身的运做本质。
windows自己定义了很多的消息,我们可以使用它,因为这是系统已经定义了的,我们甚至可以直接构造这样的消息发给系统本身,让他来为我们做点什么事情。也可以发一些消息给别的应用程序,当然你发给他的消息他可以接受并可以处理才可以,不然,结果当然是肉包子打狗,有去无回,血本无归啊~呵呵,呵呵我们甚至可以让我们自己的程序接受并且可以处理某些我们自己定义的消息(和windows已经定义了的肯定不能重复三~),然后在程序中的其他部分,比如一个子线程中,发一个这样的消息给主窗口或者其他可以接受并处理我们自己定义的这个消息的地方,然后处理他---------这其实有点象台湾的RPG游戏,比如仙剑三,人物走到某个特定的区域,就“触发”了某个事件,于是,就有怪出来和英雄们战斗啦~
在csdn上的VC/MFC专区里面见过很多人一头雾水的问高手门类似于下面这样的问题:我用MFC画了一个XX控件,我怎么样可以把他的外观变漂亮一点啊,比如把字体变成XX字体啦,把背景颜色换成XX颜色啦,把线条变....等诸如这样的问题,这样的人,我只能说他太浮躁了,他不了解win32的消息机制,不了解在非游戏的情况下,windows界面上的各种元素是怎么样出来的。其实很简单,MFC只是对API进行了简单的封装,他处理程序的最本质还是消息,这就是你在MFC中仍然可以一大堆WM_XXXX这样和win32中定义的一样的消息了,上面说了,windows是靠消息来驱动的,你用MFC做了一个控件,你的操作很简单,因为MFC、资源脚本文件帮你隐藏了很多细节,比如GDI对象啊,画笔啊等等,MFC和资源脚本当然也不是万能的,他们也不可能知道你想用什么颜色,什么字体,什么线条。他们只是简单的按照windows默认的颜色、线条、字体来为你处理事情,所以当然没有那么好看,你想让他变好看,你就要在程序界面显示之间在程序内部给那个控件发一个它可以接受的消息,让他得到这个消息后,通过某种方式通知windows,让界面变漂亮。这样的事情并不南,因为相关的消息windows已经帮我们预先定义好了的,我们所要做的只是改变消息的参数,再send it to somewhere,就POK了。这也是最原始的方法,当然也是最本质的原理。用MFC做这样的事情其实也一样,所有控件都可以被设置接受父窗口消息的,这样的话,只要给对应ID的控件发一个消息,消息的参数肯定是带有我们要个性化的数据,这样,呵呵,搞定了......
我在一些公司里面都了解到,很多项目现在都是用DELPH或者BCB写界面,用VC++写低层(DLL),然后“捆绑”在一起,我自己也尝试过这样用(我用BCB来试的,DELPHI我不会用),勉强还过的去,可能因为我BCB用的垃圾的原因吧,总觉得会出现一些莫名其妙的错误或者BUG,现在BCB据说(只是据说)不会出类似现在版本的后续版本了,于是很多程序员都有点担心。因为说实在话,用VC++写界面实在是比较郁闷,但是不是不可以写不出好的界面,效率的问题。象老版本的QQ,界面就是用DELPHI写出来的,新版本的QQ非常的漂亮,但是我不知道是用什么写出来的,但是我敢肯定(也不是100%的肯定,呵呵),低层绝对是VC++做出来的,接口十分的漂亮。漂亮归漂亮,这完全可以用VC++来做到,前段时间就在网上看过一个用VC++写的仿QQ界面,做的十分相似,呵呵,看来VC++功能还是比较强大的。hoho~
----------------《未完待续》------------------