理解windows程序设计

来源:互联网 发布:淘宝买电脑怎么分期 编辑:程序博客网 时间:2024/06/06 20:58

    windows下程序运行时,程序员(代码)负责的工作主要涉及主函数、窗口类、窗口处理函数三部分。

对于主函数,注意到:

1、主函数中的Getmessage函数实际上是一个查找函数,用于查看系统消息队列中属于自己的消息

2、主函数中是没有DC这个资源句柄的。

    关键疑问是:

1、当窗口函数在处理消息的时候,主函数还能够同时去执行Getmessage吗?

2、为什么主函数要使用DispatchMessage再次发送消息,而不是直接调用窗口处理函数?

    对于第一个问题,答案应该是可以。注意到,窗口处理函数是有返回值的,而接受这个返回值的是系统,换句话说,调用窗口处理函数的也是系统。这意味着系统为窗口维护了一个消息队列。这个消息队列和Getmessage查找的消息队列不是同一个队列。所以主函数和窗口处理函数的工作可以同时进行。

    对于第二个问题,实质上就是,系统为什么要建立两种消息队列。其实,还可以同时考虑为什么主函数中没有DC这个资源句柄。

   可以认为,系统将窗口资源和窗口处理函数放在了一起,主函数仅仅是作为进程管理的实例句柄而存在,这可以从主函数没有Dc句柄看出来。而将两者隔离开的就是两个消息队列。想象一下,如果每个主函数直接调用自己的窗口处理函数,那么首先它就要有Dc句柄,以便传给窗口处理函数。而且,每次主函数只能够等待窗口处理函数返回后,才能够继续到系统消息队列中去获取消息。而窗口资源是有限的,窗口处理函数要等待窗口资源,这个时候,就会产生很多延迟。两个消息队列的建立,能够及时响应用户的输入,建立缓冲区以便系统调配资源,很多非窗口消息可以通过mfc建立的独立于系统两个消息队列的消息机制来处理。