MFC模態視窗和非模態視窗
阿新 • • 發佈:2019-01-04
模態視窗:程式執行的過程中,若出現了模態對話方塊,那麼主視窗將無法傳送訊息,直到模態對話方塊退出才可以傳送。即只能操作彈出視窗,不能操作主視窗,只有當模態視窗退出後才能操作主視窗。
建立並顯示一個模態視窗:
//建立一個模態對話方塊
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