1. 程式人生 > >MFC模態視窗和非模態視窗

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