模态窗口:程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。即只能操作弹出窗口,不能操作主窗口,只有当模态窗口退出后才能操作主窗口。
创建并显示一个模态窗口:
//创建一个模态对话框
CTestDialog td;// 创建窗口变量
td.DoModal(); // 已模态方式显示
非模态窗口:程序运行过程中,若弹出的窗口是非模态的,则既可以操作弹出窗口,又可以操作主窗口。
创建并显示一个非模态窗口
CTestDialog *m_picDlgPtr= new CTestDialog();
if (m_picDlgPtr->m_hWnd == NULL)
{
m_picDlgPtr->Create(IDD_DIALOG_TEST, this); // 创建非模态窗口
}
m_picDlgPtr->ShowWindow(SW_SHOW); //显示非模态窗口
总结
if (!m_picDlgPtr)
{
m_picDlgPtr = new CShowPicDlg(this);
}
#if 1
// 创建并显示非模态窗口
if (m_picDlgPtr->m_hWnd == NULL)
{
m_picDlgPtr->Create(IDD_DIALOG_SHOWPICTURE, this);
}
m_picDlgPtr->ShowWindow(SW_SHOW); // 不会阻塞在这里
OutputDebugStringA("\n ********** Not ModalDlg here! **********\n");
#else
// 创建并显示模态窗口
m_picDlgPtr->DoModal(); // UI线程会阻塞在模态窗口中 阻塞在这里
OutputDebugStringA("\n ********** ModalDlg here! **********\n");
#endif