Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。
Windows系统中有两种消息队列:系统消息队列和应用程序消息队列。计算机的所有输入设备由Windows监控。当一个事件发生时,Windows先将输入的消息放入系统消息队列中,再将消息拷贝到相应的应用程序消息队列中。应用程序的消息处理程序将反复检测消息队列,并把检测到的每个消息发送到相应的窗口函数中。这便是一个事件从发生至到达窗口函数必须经历的过程。
必须注意的是,消息并非是抢占性的,无论事件的缓急,总是按照到达的先后派对,依次处理(一些系统消息除外),这样可能使一些实时外部事件得不到及时处理。
Windows中的消息是放在对应的进程的消息队列里的。可以通过GetMessage取得,并且对于一般的消息,此函数返回非零值,但是对于WM_QUIT消息,返回零。可以通过这个特征,结束程序。当取得消息之后,应该先转换消息,再分发消息。所谓转换,就是把键盘码的转换,所谓分发,就是把消息分发给对应的窗口,由对应的窗口处理消息,这样对应窗体的消息处理函数就会被调用。两个函数可以实现这两个功能:TranslateMessage和DispatchMessage。
另外,需要注意,当我们点击窗口的关闭按钮关闭窗口时,程序并没有自动退出,而是向程序发送了一个WM_DESTROY消息(其实过程是这样的,首先向程序发送WM_CLOSE消息,默认的处理程序是调用DestroyWindow销毁窗体,从而引发WM_DESTROY消息),此时在窗体中我们要响应这个消息,如果需要退出程序,那么就要向程序发送WM_QUIT消息(通过PostQuitMessage实现)。一个窗体如果想要调用自己的消息处理函数,可以使用SendMessage向自己发消息。
如上所述,大部分(注意是大部分)的消息是这样传递的:首先放到进程的消息队列中,之后由GetMessage取出,转换后,分发给对应的窗口。这种消息成为存储式消息。存储式消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP讯息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。存储式消息还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。但是也有的消息是直接发送给窗口的,它们被称为非存储式消息。例如,当WinMain调用CreateWindow时,Windows将建立窗口并在处理中给窗口消息处理函数发送一个WM_CREATE消息。当WinMain调用ShowWindow时,Windows将给窗口消息处理函数发送WM_SIZE和WM_SHOWWINDOW消息。当WinMain调用UpdateWindow时,Windows将给窗口消息处理函数发送WM_PAINT消息。
分享到:
相关推荐
Windows消息机制,有助于学习windows 消息机制。
本PDF主要讲Windows系统的消息机制,讲如何通过windows系统提供的消息队列API,在WINDOWS上的应用内以及应用之间进行通信,欢迎下载
windows消息机制windows消息机制windows消息机制windows消息机制windows消息机制windows消息机制
Windows消息机制要点,Windows消息机制要点,Windows消息机制要点
windows消息机制简单介绍,对消息过程的简单介绍和解释
Windows消息机制视频介绍,非常有助于学习消息机制的人。
Windows消息机制及HOOK应用,试用于初学者
描述的是Windows操作系统的消息机制,通过一些简单的Win32程序,来理解Windows消息。
NULL 博文链接:https://jacky-dai.iteye.com/blog/1074484
Windows进程之间是相互独立的,通过Windows消息机制,我们可以在进程之间进行通信,适合一台电脑的windows平台下进行消息交换,该例是两个winform之间通过windows消息发送和接收数据。 1、进程间通信 2、SendMessage...
WinSDK编程(续)_windows消息机制
windows消息机制及其应用
用Windows消息机制传数据 使用SendMessage配合WM_COPYDATA消息来传递数据
内含多道c++ 笔试题目以及答案 c++经典笔试宝典 C,C++经典问题,及面试笔试题 基本概念 Windows的消息机制
跨进程通信,利用句柄,可以用来理解windows消息机制,两个程序间通信,高效通信。功能是将程序1TextBox1.Text传递给程序2的label。程序2的TextBox1.Text传递给程序1的lable. 不在需要内存共享等。可以用来做看门狗...