资料介绍
文章简单介绍了Visual C++ 中模式对话框在创建、使用和销毁中的区别与各自的使用条件。
模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也
可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的
技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式
对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗
口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。
在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。而非模式对话框则
是利用CreateWindow来创建的。在MFC或是WTL中,模式对话框一般是使用DoModal,而非
模式对话框的创建则是使用Create。
一、使用中的区别
模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口
才能进行操作。而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他
窗口同时接受用户操作。
二、消息响应的区别
在消息响应方面,模式对话框和非模式对话框之间又有着很大的区别。模式对话框工作
的时候,它有内部的消息泵机制,控件之间的交互不用我们人为的去控制,系统会帮助
我们去处理。非模式对话框则像普通窗口一样,则由WinMain中书写的消息循环驱动。但
由于是对话框,它对一些消息有特殊的处理。因此,在消息循环中,需要先对对话框提
供截获消息的机会。
While (GetMessage(&msg, NULL, 0, 0))
{
if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg))
{
TranslateMessage(&msg);
DispatchMessage( &msg);
}
}
如果当前取得的消息是对话框的消息,IsDialogMessa