MFC模态窗口和非模态窗口

模态窗口:程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。即只能操作弹出窗口,不能操作主窗口,只有当模态窗口退出后才能操作主窗口。


创建并显示一个模态窗口:

//创建一个模态对话框
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



猜你喜欢

转载自blog.csdn.net/u010275850/article/details/79048646