您能帮我通过介绍一些优秀的教程链接,让我全面了解模态对话框与非模态对话框之间的区别吗?
例如,您能否向我解释一下这里链接的程序?它们是模态对话框还是非模态对话框?
迄今为止,我认为仅使用代码设计对话框意味着非模态,而使用工具箱
设计对话框则意味着模态,但我搜索得越多,就越感到困惑。您能帮我更好地理解吗?
您能帮我通过介绍一些优秀的教程链接,让我全面了解模态对话框与非模态对话框之间的区别吗?
例如,您能否向我解释一下这里链接的程序?它们是模态对话框还是非模态对话框?
迄今为止,我认为仅使用代码设计对话框意味着非模态,而使用工具箱
设计对话框则意味着模态,但我搜索得越多,就越感到困惑。您能帮我更好地理解吗?
模态对话框和非模态对话框的区别不仅限于MFC。
当一个模态对话框打开时,只要该模态对话框一直处于打开状态,您就不能与程序中除此模态对话框之外的任何其他内容进行交互。大多数对话框都是模态的,例如“文件另存为”对话框就是模态的。
另一方面,非模态对话框的行为就像普通窗口一样,只要它打开,您就可以做任何想做的事情。Microsoft Word中的拼写检查对话框就是这样的一个例子。
您在问题中提到的链接与模态和非模态对话框无关。
MFC中处理模态对话框很简单。
而处理非模态对话框则有些复杂,但你可以在谷歌上搜索“mfc modeless dialog tutorial”找到大量的教程。
模态对话框是通过在MFC中调用您的CDialog派生类的DoModal成员函数或使用DialogBox API函数来创建的。
非模态对话框是通过在MFC中调用您的CDialog派生类的Create()(或CreateIndirect
)成员函数或使用CreateDialog API函数来创建的。
上述链接还解释了支持模态和非模态对话框所需的其他操作,对于MFC,this MSDN link有更多信息。
模态对话框:
CDialog
构造函数和DoModal
方法,在堆栈中创建了模态对话框。EndDialog()
函数关闭模态对话框,它会隐藏对话框。非模态对话框:
Modeless created by calling
CDialog::Create(......);
CDialog::Show Window(.....)
method. And created in Heap.
Destroy Window()
.模态对话框: 1. 模态对话框可以在单个窗口(即)所有者窗口中进行通信。如果我们打开子窗口,直到关闭该窗口时,我们才在父窗口上进行通信。 例如:保存,另存为 2. 创建模态对话框以调用domodel() 3. 关闭时,您要调用end dialog。此对话框不会被删除,只是隐藏起来。 4. 在模态对话框中有一个子消息循环
非模态对话框: 1. 当我们打开一个窗口(所有者窗口)时,同时我们也可以与子窗口进行通信。 例如:记事本查找,字词, 2. 模态对话框的创建是调用Create window()和ShowWindow() 3. 如果要关闭该窗口,请调用destroy window 这里窗口被销毁 4. 这里的消息处理父窗口