【问题标题】:C++ MFC Button on a second Dialog does nothing第二个对话框上的 C++ MFC 按钮什么也不做
【发布时间】:2021-03-01 15:33:27
【问题描述】:

我使用 Visual Studio 向导创建了一个 C++ MFC 程序。在那里我将应用程序类型设置为“基于对话框”。

我在第一个对话框上有一个按钮,可以打开另一个对话框。我通过右键单击项目 -> 添加 -> 资源 -> 对话框 -> 新建来创建第二个对话框。 然后我通过在资源视图中双击它来将 MFC 类添加到新对话框中。

second 对话框中,我还创建了一个按钮。我双击按钮并添加了一些应该执行的代码。

当我运行程序并单击第二个对话框上的按钮时,什么也没有发生,代码也没有执行。我用第一个对话框上的按钮做了所有的事情。那个很好用。为什么第二个按钮不起作用,我需要做什么?

第一个对话框

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    CDialogEx secondDialog(IDD_DIALOG1);
    secondDialog.DoModal();
}

第二个对话框

void SettingsDlg::OnBnClickedButton1()
{
    MessageBox(L"Button clicked", L"Button clicked", MB_OK);
}

【问题讨论】:

  • 必读:Message Maps (MFC)。这不仅解释了如何正确地做到这一点,而且使您能够理解所提供的代码不足以回答问题。
  • 双击对话框资源上的控件是创建单击事件处理程序的完全可接受的方式,系统应添加所有锅炉位置代码。确保您的消息映射条目也存在(在类文件中较高)。
  • 旁注:您将变量声明为CDialogEx,而您的对话框实际上是SettingsDlg 类(很可能派生自CDialogEx)。那么为什么不将您的变量声明为正确的对象类型...?

标签: c++ winapi button mfc dialog


【解决方案1】:

@andrew-truckle,你的侧节点就是答案!我把它改成:

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    SettingsDlg settingsDialog;
    
    settingsDialog.DoModal();
}

现在按钮可以正常工作了。非常感谢!


更多信息(来自@andrew-truckle)

为了其他人的利益,这里的问题是原始代码声明了这样的对话框:

CDialogEx secondDialog(IDD_DIALOG1);

这是错误的,因为对话框实际上与类 SettingsDlg 相关联。这是具有消息映射和事件处理程序等的类。CDialogExbase 类。

我将此更新添加到答案中,以免读者找到我对问题的评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2020-04-17
    • 2021-01-24
    • 2013-06-18
    相关资源
    最近更新 更多