簡體   English   中英

如何使用do modal關閉對話框

[英]How to close a dialog box using do modal

好的,基本上我有一個MFC應用程序,其中包含許多需要循環瀏覽的對話框。 基本上,當您單擊一個按鈕轉到另一個對話框時,我希望關閉上一個對話框。 現在,對話框僅顯示在彼此之上。 打開新對話框后,如何關閉對話框? 這是一些示例代碼:

void CMachine2Dlg::OnBnClickedNewmc()
{
    NameDlg Dlg;
    Dlg.DoModal()       

    }

您可以做的是在DoModal()新對話框時隱藏父對話框,並在新對話框結束后銷毀它。 我沒有測試下面的ShowWindow() ,但是您知道了,如果它沒有隱藏對話框,請尋找另一個類似的函數。

void CMachine2Dlg::OnBnClickedNewmc()
{
   ShowWindow( SW_HIDE);

   NameDlg Dlg;
   Dlg.DoModal();

   EndDialog( 0 );

}

IT部門很難以您提到的方式鏈接這些對話框。 做模態通常意味着完全實現您正在經歷的事情。 即:對話框彈出。

一種實現方法是在調用第一個對話框的類中創建模態對話框序列,並使用前一個對話框的返回值確定是否需要顯示第二個對話框,依此類推。

例如:

// define a bunch of constants, any number would do,
// I would avoid 0 and 1 as they usually mean success/error
// This code can be returned in the EndDialog call in a method of your choice (say button click handler).

const int c_needNextDialog = 101; 


dialog1 dlg1;

if( dlg1.DoModal() == c_needNextDialog )
{
   dialog2 dlg2;

   if( dlg2.DoModal() == c_needNextDialog )
   {
      ... and so forth
   }
}

我敢肯定你有主意...

在對話框中,您將像這樣返回(直接從msf獲取)

void dialog1::OnSomeAction()
{
   // Do something
   EndDialog(c_needNextDialog); // This value is returned by DoModal!

   // Do something

   return; // Dialog closed and DoModal returns only here!
}

我將避免無模式對話框,您將面臨另一個問題,例如如何控制對話框的流程並防止人們單擊后面的應用程序主窗口。

您可以嘗試致電

EndDialog(nResult);

OnOK()OnCancel()EndDialog(nResult)將回答您的標題問題。

但是,就像建議的@tenfour一樣,您應該使用屬性表/向導。 它也可以是具有多個子屬性頁面窗口的單個對話框窗口,您可以根據需要查看或隱藏它們。

為此,您將需要:

  • 1個對話框窗口,可能帶有“上一個/下一個”按鈕
  • 希望子窗口出現在對話框中的1個圖片框,框架樣式,不可見
  • n屬性頁,子樣式,無邊框,您在其中放置了所有控件。

為對話框和每個屬性頁創建一個類,將每個屬性頁的成員變量添加到對話框,創建屬性頁,並使用框架作為放置它們的參考。 在按鈕上單擊僅顯示/隱藏必要的頁面。

您可以在對話框類中調用OnCancel() 像這樣: this->OnCancel();

@tenfour提供了一個好的解決方案,但是如果您無法解決,則應從一個基本的Windows / Dlg創建對話框

Mydialog  dlg1
if(dlg1.DoModal() )
{
   //do something
}
else
   // do something else

Mydialog  dlg2
if(dlg2.DoModal() )
{
   //do something
}
else
   // do something else

等等....

這樣,您就不容易控制“發生了什么”,也不必弄亂其他窗口,消息循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM