admin 管理员组

文章数量: 1086019


2024年3月19日发(作者:gradle中文网)

模式对话框与非模式对话框的区别

模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话

框也可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面

的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式

对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,

现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。

在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。而非模式对

话框则是利用CreateWindow来创建的。在MFC或是WTL中,模式对话框一般是使用

DoModal,而非模式对话框的创建则是使用Create。

一、使用中的区别

模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗

口才能进行操作。而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他

窗口同时接受用户操作。

二、消息响应的区别

在消息响应方面,模式对话框和非模式对话框之间又有着很大的区别。模式对话框工

作的时候,它有内部的消息泵机制,控件之间的交互不用我们人为的去控制,系统会帮助

我们去处理。非模式对话框则像普通窗口一样,则由WinMain中书写的消息循环驱动。

但由于是对话框,它对一些消息有特殊的处理。因此,在消息循环中,需要先对对话框提

供截获消息的机会。

While (GetMessage(&msg, NULL, 0, 0))

{

if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg))

{

TranslateMessage(&msg);

DispatchMessage( &msg);

}

}

如果当前取得的消息是对话框的消息,IsDialogMessage 将它交由对话消息处理函

数处理,并返回TRUE。不需要再派发了。

注意:这个方法并不是很好用,因为当对话框过多的时候,处理起来就比较麻烦了。

另一种处理的方法是利用子类化控件的方法,来处理控件间的交互。

三、销毁的区别

模式对话框的销毁是使用EndDialog,而非模式对话框的销毁是使用

DestroyWindow.。所以我们在销毁对话框的时候,也要对其进行区别。


本文标签: 对话框 模式 处理 消息 操作