模态对话框和非模态对话框的在关于消息处理方面的区别
来源:互联网 发布:网络舆论负面案例 编辑:程序博客网 时间:2024/05/17 23:47
Windows是一个巨大的消息驱动结构,由用户发出消息,系统响应处理。
windows的消息机制:
Windows是一种面向对象的体系结构,Windows环境和应用程序都是通过消息来交互的。Windows应用程序开始执行后,Windows为该程序创建一个"消息队列(message queue)",用以存放邮寄给该程序可能创建的各种不同窗口的消息。消息队列中消息的结构(MSG)为:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG;
其中第一个成员变量是用来标识接收消息的窗口句柄;第二个参数便是消息标识号,如WM_PAINT;第三个和第四个参数的具体意义同message值有关,均为消息参数。前四个参数是非常重要和经常用到的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐标)。把消息传送到应用程序有两种方法:一种是由系统将消息"邮寄(post)"到应用程序的"消息队列"这是"进队消息"Win32 API有对应的函数: PostMessage(),此函数不等待该消息处理完就返回;而另一种则是由系统在直接调用窗口函数时将消息"发送(send)"给应用程序的窗口函数,属于"不进队消息"对应的函数是SendMessage()其必须等待该消息处理完后方可返回。
对于每一个正在执行的Windows应用程序,系统为其建立一个"消息队列",即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作"消息循环"的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。
消息循环代码是应用程序中主函数winmain ( )中类似如下的程序段:
while(GetMessage(&&msg,NULL,NULL,NULL))
{ file://从消息队列中取得消息
TranslateMessage(&&msg);
file://检索并生成字符消息WM_CHAR
DispatchMessage(&&msg);
file://将消息发送给相应的窗口函数
}
由此可见,所谓"消息循环",实际是程序循环。
Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的switch 语句,用以处理由消息循环发送到该窗口的消息,窗口函数由Windows 采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给Windows。
非模态对话框是响应一个消息,系统处理一个消息,处理完毕后返回控制权给Windows。
模态对话框在对话框创建后,挂起外部的消息,只是响应对话框内部的消息,而外部消息则全部"过滤"掉了,直到系统接收到WM_DESTROY或WM_CLOSE后,系统返回控制权给模态对话框创建前的线程,继续模态对话框创建前的线程将执行的代码.
- 模态对话框和非模态对话框的在关于消息处理方面的区别
- 系统处理非模态对话框和模态对话框的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 模态对话框和非模态对话框的消息循环
- 关于模态对话框与非模态对话框的区别
- 非模态对话框的消息处理
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别1
- 模态对话框和非模态对话框的区别2
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别
- 模态和非模态对话框的区别
- Android动画及图片的缩放和旋转
- Preference 也是可以响应Click事件的
- 【转】Linux下使用diff和patch制作及打补丁
- 真正的BOOTSECT.S
- 谈谈C++里的IO
- 模态对话框和非模态对话框的在关于消息处理方面的区别
- Dynamics Ax X++类继承特性的几点说明
- ictclas4j的一个bug
- JavaScript库的事件处理的几种类型(mootool)
- Linux下的C语言多线程编程
- 《黑马程序员》java 内省
- Objective C 除去字符串中的空格
- Microsoft® SQL Server® 2008 R2 Service Pack 1正式版
- Wifi模块分析