【问题标题】:In MFC Close only the Child Dialog, not the Parent在 MFC 中仅关闭子对话框,而不是父对话框
【发布时间】:2017-09-17 17:58:00
【问题描述】:

我是 MFC 世界的新手。我需要对旧应用程序进行一些基于对话框的操作。在那里我遇到了一个明显的问题,那就是我似乎无法找到关闭我从父母(也是模态)调用的子对话框(模态)的方法。在我尝试的所有方式中,孩子和父母总是会立即关闭。 这是我尝试过的: 我在 VS 2012 Professional 中创建了一个默认的 MFC 应用程序 ParentDlg.cpp

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 按钮具有相同的行为,它也是一个模态对话框,当我单击其中的“确定”按钮时仅关闭关于框。

【问题讨论】:

  • 1) 这是真实的代码吗? dialogOutputParentDlg::OnBnClickedOk 中未定义。 2) 如果它是childDlg - 如果您不想关闭ParentDlg,为什么在DoModal 呼叫之后立即呼叫CDialogEx::OnOK?在documentation 中有解释,调用基本处理程序将关闭对话框..
  • @AlgirdasPreidžius 是的,那应该是 ChildDlg,我在帖子中更正了。并且删除默认的 CDialogEx::OnOK 有效:) 我忽略了这一点,因为当我在那里创建“点击”事件时 MFC 正在编写该行。非常感谢。

标签: c++ mfc dialog modal-dialog


【解决方案1】:

您应该只将 IDOK 放在关闭按钮的 ID 属性中。并且只有子对话框会关闭。您不应再创建事件处理程序,如果这样做了,请删除事件处理程序。

【讨论】:

  • 谢谢,但主要问题出在 ParentDlg 中,在按钮单击事件中,我保留了默认的 CDialoxEx::OnOK() 调用,它也负责关闭父对话框。删除该行解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多