关于Windows编程的一些心得

      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++功能还是比较强大的。

  上面说到消息对于win32编程的重要性。的确,如果作为一个为windows平台开发应用程序的程序员,如果对消息(message)这个概念都没有一个清楚的了解的话,那么他就不算是一个合格的程序员。message based,event drives-------基于消息的,事件驱动的。这就是windows和用户交互的最核心本质。这句话我想绝大多数程序员都看过,但是真正了解他的人有多少呢?网上有很多人对程序员进行等级划分,划分的依剧就是它编程所用的开发工具,基本上的观点是:VC++?> DELPHI >VB,于是又有很多人出问难这个看法,说什么开发工具是次要的,适合的工具才是重要的云云。但是问难这个观点的人通常自己都是在程序开发这一块?比较牛的人,他们对各种开发语言通常都有比较熟悉的研究以及很长的使用时间,他们在程序开发这一块是比较牛的。我认为他们问难的不是没有道理,但是他们没有考虑一些学习编程刚入门或者还没有多少经验的朋友的实际情况。想一下,同样起点的2个人,一个学VC++,一个学VB,头1到2个月,甚至是半年,一年,学VB的哪个在实际应用上绝对优于学VC++的哪个。VB真的很容易上手,即使你对windows程序运行的原理毫无所知,你还是可以用鼠标拖拉几下几个控件,单击的单击,双击的双击,写上几行代码,就OK了。一个小的计算器就出来了。学VC++的呢(在这里不考虑win32 SDK程序设计),即使语法全部过关了,也不行,总的学以下MFC吧,消息映射,事件驱动,虚函数,派生,继承,类,封装,等等等等,没一样不让人头痛的。但是这些都学了之后。哪个收获的更多,大家都知道。我想大家经常说的VC++>DELPHI >VB,应该是基于这个层次的认识上的,学VC可以学到更本质的东西。因为他封装的比较少。VB封装的很厉害。所以我建议想学windows程序设计的人最好还是先老老实实学好基础的东西,win32SDK程序设计,VC++程序设计,让你对系统的本质有个清楚的了解。然后在学那些.NET呀JAVA啊什么的.这样你就可以不仅回做什么,而且知道为什么这么做.这样当你在遇到一些.NET什么的提供不了的功能的时候,你可以自己重最原始的角度去了解问题,解决问题.话又说回来,了解以下这些消息啊? 事件啊的观点真的很有好处,即使你以后不做windows了,做linux或者苹果机了,这些都有用的.

  所以说,不要因为自己使用的工具而争吵,关键看你学到了什么东西,你的付出和你的收获相比起来,值得么?这才是最关键的.微软不会因为你用什么工具给他的平台开发程序就看的起你,你要做出点原创的东西,那才是比较牛的.

你可能感兴趣的:(关于Windows编程的一些心得)