尽管c++ builder的vcl控件封装了大多数常用的消息,c++ builder所提供的事件处理能力也具备了相当程度的完备性,但当处理c++ builder 未定义的windows消息或自定义消息时,掌握c++ builder 的内部消息处理机制还是十分必要的.下面,从windows 操作系统消息驱动机制开始,进而探讨c++ builder的vcl控件中消息的封装.传递与处理机制,最后以新增消息处理过程的应用实例作为对所讲内容的验证与实践.
windows是以消息驱动的操作系统,windows 消息提供了应用程序与应用程序以及应用程序与windows系统之间进行通讯的手段. 【程序编程相关:iczelionVxdtut2】
一.windows 消息驱动机制 【推荐阅读:iczelionVxdtut3】
消息循环代码是应用程序中主函数winmain ( )中类似如下的程序段: 【扩展信息:iczelionVxdtut1】
windows 中有一个系统消息队列,对于每一个正在执行的windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息.应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中.
while(getmessage(&&msg,null,null,null))
{ //从消息队列中取得消息
translatemessage(&&msg);
//检索并生成字符消息wm_char
dispatchmessage(&&msg);
//将消息发送给相应的窗口函数
}
由此可见,所谓“消息循环”,实际是程序循环.
windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的switch 语句,用以处理由消息循环发送到该窗口的消息,窗口函数由windows 采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给windows.
... 下一页