对WinAPI产生原因的本质理解

我感觉,掌握Windows编程需要掌握三样东西:
WinAPI —— 这是基础,也是利用Windows特殊功能的强大武器。相当于了VCL的属性+方法(OS的内部数据不能直接操作,全部要通过WinAPI操作)。
Message —— 这是Windows的运行机制。相当于VCL的事件,碰到什么消息,就进行相应的操作。
框架MFC/VCL —— 方便开发,本质上是对API和Message的包装。

 

我的理解:
属性和方法,本来就是操作OS内部数据的唯一办法,但是MS把它们全部以WinAPI的方法发布,而不让直接操作。
(MS不是把它们以数据结构的方式发布。虽然WinAPI里也到处有数据结构,但是不能直接使用,还是要用函数去读取,比如OSVersion。而不是说,已经有这样一个数据结构存在,随时随地去读取和操作。也没有必要把所有的数据结构给出,用什么就给什么呗。另外,这样的好处是给了很多限制,不会有意外的操作。)

能够操作OS内部的数据才能进行编程,建立窗口等等。包括生成消息等等,都是OS内部产生的新数据结构,也都要通过WinAPI进行操作。
即使有了这些内部数据,仍然需要一些函数去处理,比如读取消息(GetMessage)这个关键动作,才能知道下一步应该干什么。
(消息来了,必须立即处理。这个消息的产生过程由Windows完成,并把它发送给用户程序。也就是Windows把它的一个内部数据推送给用户程序,要求处理,如果不抓住这个时机或者不正确处理,那程序就无法正确完成任务。)

因此使用WinAPI进行编程是自然而然产生的,并非刻意发明。各种框架才是刻意发明的。
然而直接使用WinAPI编程太麻烦,于是出现了各种框架:MFC,VCL,使用很方便,也因此把普通程序员与OS越隔越远,什么都不懂。

 

还要加强对消息的理解:
一般是某个用户的操作会产生消息(也有可能是OS内部碰到什么情况产生的消息?)。消息自己也可以产生新的消息。
消息的产生和响应,代表了用户程序的正常运行。程序员也必须正确响应消息,才能根据判断执行正常的操作。
只不过VCL将这些消息包装的太好了,以至于低水平程序员无法理解整个流程和框架。

 

Windows编程的本质大概就如以上所说,不知道Linux编程是什么样子,有没有相应方便编程的框架?

 

所谓子类化,个人理解就是拦截某个控件的消息以及样式,来进行自己的特定处理以达到特殊的功能需求。这个子类化,可以有子类化别人的程序的控件,也有子类化自己程序的控件。子类化别人的,就需要注入到别人的程序内部,然后做对应处理拦截,我这里主要针对的是自己程序的处理。这个就比较简单了,有API函数
SetWindowLong,用这个函数,就可以拦截某WinControl的Wndproc窗口过程了。
在Delphi中,所有的消息处理,实际上都是用Application来代理处理以及转发派遣的,所以,不必要SetWindowLong,就可以拦截所有控件的消息,Application.OnMessage中处理就可以,比较容易。

Windows理解:
http://www.cnblogs.com/weiym/archive/2013/07/18/3197191.html
理解 Windows API 调用过程:
http://www.cnblogs.com/weiym/archive/2013/07/18/3197191.html
理解内存:
http://www.cnblogs.com/weiym/archive/2012/09/19/2694501.html
理解Windows内核模式与用户模式:
http://www.cnblogs.com/weiym/archive/2013/01/12/2858006.html

posted @ 2012-01-28 17:45  findumars  Views(952)  Comments(0Edit  收藏  举报