C++面试题:Windows程序的入口是哪里?写出Windows消息机制的流程

2014-11-24 01:25:52 · 作者: · 浏览: 25

A:


入口点是WinMain函数.


Windows消息机制的流程:


1.Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。


2.Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后,Windows将事件转换为一个「消息」并将消息放入程序的消息队列中。程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息:


while(GetMessage (&msg, NULL, 0, 0))


{


TranslateMessage (&msg) ;


DispatchMessage (&msg) ;


}


TranslateMessage(&msg);将msg结构传给Windows,进行一些键盘转换。


DispatchMessage (&msg);又将msg结构回传给Windows。然后,Windows将该消息发送给适当的窗口消息处理程序,让它进行处理。


SendMessage()与PostMessage()之间的区别是什么?


它们两者是用于向应用程序发送消息的。PostMessagex()将消息直接加入到应用程序的消息队列中,不等程序返回就退出;而SendMessage()则刚好相反,应用程序处理完此消息后,它才返回。