2017-09-17 53 views
-1

我是MFC世界的新手。我需要爲舊應用程序提供一些基於對話框的操作。在那裏我遇到了一個非常明顯的事情,那就是我似乎無法找到一種方法來關閉我從父母(也是Modal)調用的子對話框(Modal)。在我嘗試的所有方式中,孩子和父母都會一次關閉。 這裏是我的嘗試: 我在VS創建一個默認的MFC應用程序2012專業 ParentDlg.cpp在MFC中只關閉子對話框,而不是父對象

void ParentDlg::OnBnClickedOk() 
{  
    ChildDlg childDlg; 
    dialogOutput.DoModal(); 

    CDialogEx::OnOK(); 
} 

在我Child.cpp的關閉按鈕(ID:IDCLOSE) ChildDlg.cpp

void ChildDlg::OnBnClickedClose() 
{ 
    // TODO: Add your control notification handler code here 
    EndDialog(IDCLOSE); 
} 

但這關閉了兩個父母和孩子,但我只需要孩子對話框被關閉(父對話框應該保持開放),因爲我點擊子對話框的「關閉」布通。

總之,我喜歡'IDD_ABOUTBOX'對話框的默認IDOK按鈕的相同行爲,這也是一個模式對話框,當我點擊'確定'按鈕時,只關閉關於框。

+0

1)這是真實的代碼嗎? 'ParentDlg :: OnBnClickedOk'中未定義'dialogOutput'。 2)如果它是'childDlg',爲什麼你在'DoModal'調用後立即調用'CDialogEx :: OnOK',如果你不想關閉'ParentDlg'呢?它在[文檔](https://msdn.microsoft.com/en-us/library/132s802t.aspx#cdialog__onok)中解釋,調用基礎處理程序將關閉對話框。 –

+0

@AlgirdasPreidžius是的,應該有一直ChildDlg,我糾正了我的帖子。並刪除默認的CDialogEx :: OnOK工作:)我忽略了,因爲當我在那裏創建'click'事件時,MFC正在寫這行。非常感謝。 –

回答

0

您應該只將IDOK放置在關閉按鈕的ID屬性中。只有子對話框會關閉。你不應該再創建一個事件處理程序,如果你這樣做,刪除事件處理程序。

+0

謝謝,但主要問題發生在ParentDlg中,在按鈕單擊事件中,我保留了默認的CDialoxEx :: OnOK()調用,它也負責關閉父對話框。刪除該行解決了問題。 –

相關問題