區別
模態對話框壟斷了用戶的輸入。當一個模態對話框打開時,用戶只能與該對話框進行互動,而其他用戶界面對象收不到輸入信息。模態對話框下,用戶需要操作目標對話框就必須先操作模態對話框。用戶對模態對話框的處理如圖所示。
非模態對話框(Nonmodal Dialogue Box,又叫做無模式對話框),與模態對話框不同,當用戶打開非模態對話框時,依然可以操作其他視窗。
建立模態對話框
1.選擇File/New/MFC AppWizard[exe],Project name為Test,單擊OK.
2.選擇Single document,單擊Finish.
3.選擇左側Workspace/ResourceView,在Dialog上單擊右鍵,選擇Insert Dialog,默認名字為IDD_DIALOG1.
4.雙擊右側工作區中的對話框,彈出一對話框Adding a Class,默認選擇Create a new class,單擊OK.
5.在對話框New Class中,在Name中填入CDialogproty,Base class選擇預設名字CDialog,單擊OK.在MFC ClassWizard 上選擇OK.
6.選擇左側Workspace/ClassView,雙擊CTestView
#include "Dialogproty.h"
class CTestView : public CView
{
protected: // create from serialization only
7.選擇左側Workspace/ResourceView/Menu,雙擊IDR_MIANFRAME,在右側工作區上方,"幫助(H)"後雙擊,彈出對話框Menu Item Properties,點擊General/Pop-up,選為非選擇狀態,在ID內輸入IDR_TEST,Caption中輸入Test,關閉對話框Menu Item Properties,
8.在按鈕Test上點擊右鍵,選擇ClassWizard...,在Messages中選擇COMMAND,點擊Add Function...,彈出對話框Add Member Function,點擊OK,選擇Edit Code.
9.在以下函式中添加代碼
void CTestView::OnTest()
{
// TODO: Add your command handler code here
CDialogproty dlg;
dlg.DoModal();
}
10.編譯,運行。點擊選單按鈕Test,彈出對話框,點擊OK!完成!