CB中消息处理过程及应用

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);
   //将消息发送给相应的窗口函数
   }

时间: 2025-01-02 21:02:29

CB中消息处理过程及应用的相关文章

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

C++ Builder作为一种RAD方式的程序开发工具,其全新的可视化编程环境.面向组件的开发模式无疑会大大地提高编程效率.它对繁杂的Windows 消息及API作了较全面的封装,编程者在大多数情况下不需理会Windows消息的细节,只要将心思放在组件的事件处理函数上即可.然而,毕竟Windows操作系统是一个以消息驱动的系统,运行其上的应用程序,自然无法脱离系统之外,因此掌握并运用消息处理,对一些问题的处理会有事半功倍的效果. 尽管C++ Builder的VCL控件封装了大多数常用的消息,C+

live555学习之RTSP连接建立以及请求消息处理过程

1,RTSP连接的建立过程     RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.     首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554端口进行监听,然后把连接处理函数句柄  (RTSPServer:: incomingConnectionHandler)和socket句柄传给任务调度器(taskSched

javascript如何调用C#后代码中的过程 和ASP.NET调用JS乱码解决方案

asp.net|javascript|js|过程|解决 javascript如何调用C#后代码中的过程 和ASP.NET调用JS乱码解决方案  +++++++++++++++++第一种情况: 1.后台方法: protected string CsharpVoid(string strCC){  return strCC; } 2.javascript 调用<script  language="javascript">   var s = "<%=Csharp

在vb.net中调用过程

一.调用Sub过程 与Function过程不同,在表达式中,Sub过程不能用其名字调用,调用Sub过程的是一个独立的语句.Sub过程还有一点与函数不同,它不会用名字返回一个值.但是,与Function过程一样,Sub过程也可以修改传递给它们的任何变量的值.调用Sub过程有两种方法: '以下两个语句都调用了名为MyProc的Sub过程. Call MyProc(FirstArgument,SecondArgument) MyProc(FirstArgument,SecondArgument)二.调

c++-VC++中窗口过程函数的wParam和lParam区别??

问题描述 VC++中窗口过程函数的wParam和lParam区别?? VC++中窗口过程函数的wParam和lParam区别??是什么希望解析 解决方案 我要告诉你的是方法,怎么去自学,而不是结论: 看到 https://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx 这里(google 搜索wm_keydown msdn第一个结果) wParam The virtual-key code of the nonsystem key. S

pb9-急急急,求pb中调试过程的图解

问题描述 急急急,求pb中调试过程的图解 急急急,求pb中调试过程的图解,非常急啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 解决方案 急急急求助,急急急!!!急急急!求解答!

vb-VB中一个过程最多包含多少行代码

问题描述 VB中一个过程最多包含多少行代码 我在使用VB编写一个应用程序时,其中点击一个按钮后要执行很多动作,所以代码数量比较多.但是当我代码到几千行时,弹出提示,过程超过代码行数.我想请问,VB中,一个过程最多包含多少行代码? 解决方案 可以加窗体(函数),load窗体

c++ mfc-mfc中消息处理函数中的操作问题

问题描述 mfc中消息处理函数中的操作问题 最近在做基于UDP的可靠传输服务,遇到了一点问题,希望能够得到各位大神的指点 大体就是希望在一个"send"按钮消息处理函数中,当消息发出去以后,服务端会收到客户端的信息然后返回ACK表示收到.所以客户端在"send"按钮消息处理函数中需要一直监听这个信号的标志位,一旦没有改变需要重复发送,一旦改变就可以结束.但是现在问题是标志位一直不变,直到程序完成以后才会发生变化,求教原因和解决方案!谢谢! while (!ACK)

c#-[C#] byte.parse中调试过程中报字符串转换为DataTime时的错误

问题描述 [C#] byte.parse中调试过程中报字符串转换为DataTime时的错误 如图提示 解决方案 用字符串 68 86 20 05 00 00 00 68 11 04 00 01 01 02 测试能通过 但是用字符串 FE FE 68 86 20 05 00 00 00 68 91 06 33 34 34 35 34 57 6D 16 测试报这个错误