Windows编程入门-Windows消息

来源:互联网 发布:淘宝可以卖杂货吗 编辑:程序博客网 时间:2024/04/29 02:11
Windows操作系统是基于消息响应机制的被动式系统。Windows应用程序是消息驱动程序,又称事件驱动程序。事件驱动意味着操作系统的每一部分之间以及操作系统与应用程序之间是通过“消息”进行通信联系的。因此,学习消息机制对于学习Windows应用程序编程是非常重要的。
1、消息定义
消息是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如鼠标单击,改变窗口大小,按下键盘按键等都会使Windows发送一个消息给应用程序。它可以由硬件、Windows、应用程序共同产生。消息通常分为一下四种:
(1)标准消息:除了WM_COMMAND消息外,所有的以WM_开头的消息都是标准消息。如鼠标移动,窗口移动,窗口大小改变等。程序启动或退出甚至每一段固定的时间都会产生标准Windows消息。
(2)命令消息:来自与菜单,加速键,工具栏按钮的消息,这类消息都是以WM_COMMAND形式呈现。
(3)通知消息:由空间产生的消息。按键和鼠标单击列表框都会产生这类消息,这类消息的目的是为了向父窗口通知事件的发生,他也是以WM_COMMAND形式呈现的。
(4)用户自定义的消息。
2、消息结构
在Windows程序中,消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息,由MSG结构体表示。MSG结构体的定义如下:
type struct tagMSG{
HWND hwnd; //窗口句柄
UINT message; //消息类型
WPARAM wParam; //消息附件参数,具体内容取决于消息类型
LPARAM lParam; //消息附件参数,具体内容取决与消息类型
DWORD time; //消息产生的时间
POINT pt; //消息被发送时,鼠标在屏幕上的位置
}MSG;
在MSG结构中,消息是由一个消息名称(UINT)和两个参数(WPARAM和LPARAM)组成。当用户进行了输入或着窗口的状态发生改变时,系统都会发送消息到某一个窗口。例如,当菜单点中之后会有WM_COMMAND消息发送。其中WPARAM的高字节(HIWORD(wParam))是命令的ID号,是菜单ID。同时,用户也可以自定义消息名称,也能利用自定义消息来发送通知和传递数据。
系统通过窗口句柄在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄,表明该消息由指定的窗口接收。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。句柄决定消息被发送到哪一个窗口。
3、消息发送
在Windows中发送消息时,一般使用PostMessage和SendMessage函数,但是他们在发送方式上有些差别。二者最基本的区别在于SendMessage()函数直接调用指定窗口处理函数并等待消息处理完成才返回,PostMessage()函数是把消息封装成一个MSG结构,投放到消息队列中,然后立即返回,无需等待消息处理。
注:PostMessage和SendMessage区别
1)、SendMessage函数要等到消息被处理后才返回
PostMessage 消息发出后马上返回
2)、PostMessage发向目标窗口的消息一定会进入消息队列
SendMessage向同一线程的窗口发消息,不会进入消息队列
SendMessage向其他线程的窗口发消息,则会进入消息队列
3)、PostMessage的返回值表示PostMessage函数执行是否正确
SendMessage的返回值表示其他程序处理消息后的返回值
0 0
原创粉丝点击