About Messages and Message Queues
来源:互联网 发布:raphael min.js 下载 编辑:程序博客网 时间:2024/05/12 03:13
和DOS系统不同的是,Windows系统的程序是基于事件驱动。它们没有显式函数调用(比如C运行时库调用)来获取输入。相反,它们等待系统将输入传递给它们。
系统将所有的输入传给应用程序的每个窗口。每一个窗口都有一个过程函数,当系统接收到输入时,就会调用它。窗口过程函数处理完后,再返回给系统。更多有关过程函数的,请见Window Procedures.如果一个顶级窗口没有处理消息超过几秒钟,系统就认为窗口近期不会有消息。这种情况下,系统就隐藏这个窗口,并用一个相同大小,位置等视觉效果的窗口来代替。用户可以移动和改变它的大小。甚至关闭它。但是,这都是一些无效的行为,因为窗口已经没有响应。在调试模式下,系统不会生成幽灵窗口。
本节将讨论以下主题:
- Windows Messages
- Message Types
- System-Defined Messages
- Application-Defined Messages
- Message Routing
- Queued Messages
- Nonqueued Messages
- Message Handling
- Message Loop
- Window Procedure
- Message Filtering
- Posting and Sending Messages
- Posting Messages
- Sending Messages
- Message Deadlocks
- Broadcasting Messages
- Query Messages
Windows Messages
系统用消息的形式将用户输入发送给窗口过程函数,消息由系统和应用程序中生成。系统生成将每一个输入事件转换成消息--举个例子,当用户打字,移动鼠标或点击滚动条时。系统也会根据应用程序的变化来生成消息,例如,当应用程序的字体或大小发生改变时。一个程序可以生成消息指挥自己的窗口执行或与其它的窗口通信。系统用消息的形式将用户输入发送给窗口过程函数,消息由系统和应用程序中生成。系统生成将每一个输入事件转换成消息--举个例子,当用户打字,移动鼠标或点击滚动条时,系统也会根据应用程序的变化来生成消息,例如,当应用程序的字体或大小发生改变时。一个程序可以生成消息指挥自己的窗口执行或与其它的窗口通信。系统发送给过程函数的消息带有四个参数;窗口句柄,消息标识符,和两个消息参数。窗口句柄为要接受消息的窗口,系统使用它来确定应该接收消息的窗口过程。
消息标识符是标识消息目的的命名常量。当窗口过程接收消息时,它使用消息标识符来决定如何处理消息。例如,消息标识符WM_PAINT告诉窗口过程,窗口的客户区域已经更改,必须重新绘制。
消息参数指定在处理消息时使用的数据或数据的位置。消息参数的含义和值取决于消息。消息参数可以包含一个整数、填充的位标志、指向包含附加数据的结构的指针等等。当消息不使用消息参数时,它们通常被设置为NULL。窗口过程必须检查消息标识符,以确定如何解释消息参数。
Message Types
这一节描述两个消息(Message)类型:- System-Defined Messages
- Application-Defined Messages
System-Defined Messages
系统在与应用程序通信时发送一个系统定义的消息。它使用这些消息来控制应用程序的操作,并为应用程序提供输入和其他信息。应用程序也可以自己发送system-defined消息。程序通常使用这些消息控制使用预先窗口类创建的窗口控件。
每一个system-defined消息都有一个唯一的消息标识符和符号常量(在软件开发包(SDK)的头文件中有定义)。举个例子,WM_PAINT常量请求窗口重新绘制自己。
符号常量指定每一个system-define消息所属的类别。每个消息前缀表示了消息的目的,下面为消息前缀和相关消息类别。
- Clipboard Messages
- Clipboard Notifications
- Common Dialog Box Notifications
- Cursor Notifications
- Data Copy Message
- Desktop Window Manager Messages
- Device Management Messages
- Dialog Box Notifications
- Dynamic Data Exchange Messages
- Dynamic Data Exchange Notifications
- Hook Notifications
- Keyboard Accelerator Messages
- Keyboard Accelerator Notifications
- Keyboard Input Messages
- Keyboard Input Notifications
- Menu Notifications
- Mouse Input Notifications
- Multiple Document Interface Messages
- Raw Input Notifications
- Scroll Bar Notifications
- Timer Notifications
- Window Messages
- Window Notifications
- About Messages and Message Queues
- About Messages and Message Queues
- About Messages and Message Queues
- About Messages and Message Queues
- VC++ Messages and Message Queues
- Using Messages and Message Queues (Windows)
- 消息和消息队列(Using Messages and Message Queues)
- 消息和消息队列(About Message and Message Queues)
- 091021(星期三)MFC线程消息循环4,Using Messages and Message Queues的msdn描述
- Lecture 22: Queues and Message-Passing
- about messages
- System V IPC message queues, semaphores, and shared memory
- new messages about TNC
- about Oops Messages
- Message Queues小结
- linux message queues
- Optimizing Data Access and Messaging - Idempotency for Windows Azure Message Queues
- JMS:Messages Redelivery & Pending Message
- C语言的文件系统
- 无穷小微积分放飞互联网,持之以恒,效果初现
- Javase—数组习题二
- Uber投资新进展,传软银下周公布购股报价
- DeepMind 最新进展:利用AI治疗乳腺癌
- About Messages and Message Queues
- 开发者的4个层级和6大差异
- 从0开始搭建自动部署环境(续)
- codeforces 895C Square Subsets 线性基 或 状压DP
- [C#] 谈谈异步编程async await
- 明佳巴巴新管理之“经营人”
- 用C语言实现一个自己的文件拷贝工具
- Nature Reviews:拥抱未知:解析土壤微生物组的复杂性
- pickle 在python 2和python 3中兼容性问题