C++Builder中消息处理过程及应用

C++Builder中消息处理过程及应用,第1张

C++Builder中消息处理过程及应用,第2张

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))

{//从消息队列中获取消息

翻译消息(& msg);

//检索并生成字符消息WM_CHAR

调度消息(& msg);

//将消息发送给相应的窗口函数

}

因此,所谓的“消息循环”实际上是一个程序循环。

Windows应用程序创建的每个窗口都在系统核心中注册了一个相应的窗口函数。窗口函数的程序代码形式是一个巨大的switch语句,用来处理消息循环发送到窗口的消息。窗口函数由Windows以消息驱动的形式直接调用,而不是由应用程序显示调用。处理完消息后,窗口函数将控制权交还给窗口。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++Builder中消息处理过程及应用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情