2017-09-17 35 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()调用,它也负责关闭父对话框。删除该行解决了问题。 –