Windows的消息驱动机制在工程实践中的应用

上传人:大米 文档编号:547477410 上传时间:2023-02-04 格式:DOCX 页数:6 大小:68.41KB
返回 下载 相关 举报
Windows的消息驱动机制在工程实践中的应用_第1页
第1页 / 共6页
Windows的消息驱动机制在工程实践中的应用_第2页
第2页 / 共6页
Windows的消息驱动机制在工程实践中的应用_第3页
第3页 / 共6页
Windows的消息驱动机制在工程实践中的应用_第4页
第4页 / 共6页
Windows的消息驱动机制在工程实践中的应用_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《Windows的消息驱动机制在工程实践中的应用》由会员分享,可在线阅读,更多相关《Windows的消息驱动机制在工程实践中的应用(6页珍藏版)》请在金锄头文库上搜索。

1、Windows的消息驱动机制在工程实践中的应用摘要:windows的消息驱动机制包括windows消息系统的组成和windows消息生成、传递和处理的过程这样两个方面;windows的消息系统由三部分组成:消息队列、消息循环、窗口函数。除了截获windows发送的消息进行处理之外,我们可以在应用程序的窗口和控件之间发送消息,在delphi中我们可以使用windowsAPI函数POSTMessage方法在应用程序中发送消息。关键词:windows的消息驱动机制;消息队列;消息循环;窗口函数一、 windows的消息驱动机制windows的消息驱动机制包括windows消息系统的组成和window

2、s消息生成、传递和处理的过程两个方面。消息队列:windows操作系统本身维护一个临时存放消息的系统消息队列。当某事件发生时,windows会生成相应的消息或消息序列。消息循环:每一个windows应用程序都包含有一段称为消息循环的代码,消息循环代码用于从消息队列中检索消息并进行分发,一直到收到退出应用程序的消息并结束程序的运行时为止。窗口函数:应用程序中的每个窗口对象都注册自己的一个窗口函数,该函数用来接受应用程序消息循环代码所分发的各种消息并进行相应的处理,从而实现windows操作系统的窗口功能。二、 windows消息生成、传递和处理的过程如图11所示,windows消息生成、传递和处

3、理过程分为5个步骤:1、系统中发生某个事件;2、 Windows操作系统将发生的事件变换为相应的消息并将其放入消息队列;3、应用程序从消息队列中获取消息并将其封装在一个TMsg记录中;3、 应用程序将TMsg分发给相应的窗口函数;5、 Windows操作系统回调窗口函数,由窗口函数对消息进行处理。上述过程中,应用程序循环往复地不断从消息队列中取回消息并分发给窗口函数进行处理,从而构成应用程序的消息循环。在上述过程中,应用程序循环往复地不断从消息队列取回消息并分发给窗口函数进行处理,从而构成了应用程序地消息循环。三、windows发送消息在工程实践中的应用在应用程序的窗口和控件之间发送消息,甚至

4、可以向其他应用程序或windows发送消息,在delphi中,可以使用windowsAPI函数PostMessage在应用程序中发送消息。只要我们知道目的的窗口句柄,就可以使用PostMessage方法向它发送消息。在windows单元中,它们的定义为:FunctionPostMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;LParam:LPARAM):BOOL;stdcall;hWnd:该参数用于标识接受消息的窗口句柄;Msg:该参数用于指定待发送消息的消息常量;wParam:用于附加的第一个消息参数;IParam:用于附加的第二个消息参数。下面给由一个Po

5、stMessage方法在工程实践中的应用例子。unitC_Netmen;interfaceusesSysUtils,scktcomp,windows,Messages,Dialogs,Controls,Forms,StdCtrls,Classes,addnote;constWM_NETMESSAGE=WM_USER+2;typePublic/客户端错误事件procedureClientOnError(Sender:TObject;Socket:TCustomWinSocket;ErrorEvent:TErrorEvent;varErrorCode:Integer);end;varhMainHw

6、nd:HWND;ServerOpen:boolean;/服务开启标志implementationprocedureTNetMen.ClientOnError(Sender:TObject;Socket:TCustomWinSocket;ErrorEvent:TErrorEvent;varErrorCode:Integer);beginifErrorCode=10061then/服务器未打开beginErrorCode:=0;ServerOpen:=false;client.Close;PostMessage(hMainHwnd,WM_NETMESSAGE,0,0);end;ifErrorCode=10060then/连接超时beginErrorCode:=0;ServerOpen:=false;client.Close;PostMessage(hMainHwnd,WM_NETMESSAGE,0,0);end;client.Close;end;end.参考文献:1牛汉民Delphi应用开发教程2005.064、5、15

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号