C++ Builder作为一种RAD方式的程序开发工具,其全新的可视化编程环境、面向组件的开发模式无疑会大大地提高编程效率。它对繁杂的Windows 消息及API作了较全面的封装,编程者在大多数情况下不需理会Windows消息的细节,只要将心思放在组件的事件处理函数上即可。然而,毕竟Windows操作系统是一个以消息驱动的系统,运行其上的应用程序,自然无法脱离系统之外,因此掌握并运用消息处理,对一些问题的处理会有事半功倍的效果。
尽管C++ Builder的VCL控件封装了大多数常用的消息,C++ Builder所提供的事件处理能力也具备了相当程度的完备性,但当处理C++ Builder 未定义的Windows消息或自定义消息时,掌握C++ Builder 的内部消息处理机制还是十分必要的。下面,从Windows 操作系统消息驱动机制开始,进而探讨C++ Builder的VCL控件中消息的封装、传递和处理机制,最后以新增消息处理过程的应用实例作为对所讲内容的验证和实践。
一、Windows 消息驱动机制
Windows是以消息驱动的操作系统,Windows 消息提供了应用程序与应用程序以及应用程序与Windows系统之间进行通讯的手段。
Windows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。
消息循环代码是应用程序中主函数winmain ( )中类似如下的程序段:
while(GetMessage(&&msg,NULL,NULL,NULL))
{ //从消息队列中取得消息
TranslateMessage(&&msg);
//检索并生成字符消息WM_CHAR
DispatchMessage(&&msg);
//将消息发送给相应的窗口函数
}
由此可见,所谓“消息循环”,实际是程序循环。
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!