c++ - MFC DoModal 对话框

标签 c++ mfc

好吧,我承认我对 Windows API 甚至 MFC 都一无所知。

当出现问题(文件名字符串中的非法字符)时,我会弹出一个错误窗口,我希望错误框是模态的。

我一直想不通为什么它在访问 doModal 时会崩溃。

这是我认为可以解决此问题的代码。此代码位于主窗口中按钮的事件处理程序中。

CDialog *BadFileD = new CDialog();
BadFileD->Create(IDD_STATUS, this); 
BadFileD->DoModal();

我是不是有点智障了?

最佳答案

MFC对话框分为模态对话框和非模态对话框两种模式。

(1)模态对话框的使用:

CDialog dlg;
dlg.DoModal();

(2) 无模式对话框的使用:

CMyDialog *pDlg = new CMyDialog();
pDlg->Create(ID_DLG, this);
pDlg->ShowWindows(SW_SHOW);

如您所见,我们需要一个新指针,但不要删除它。因此,您需要在我们的 CMyDialog 类中执行以下操作:

  1. OnOk()OnCancel() 中添加DestroyWindow() 方法。
  2. PostNcDestroy() 方法中添加“delete this;”。

如果不这样做,您的代码可能会导致内存泄漏。 BadFileD 是类成员,您在析构函数中将其删除。我建议使用无模式对话框。

关于c++ - MFC DoModal 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528694/

相关文章:

c++ - “virtual bool QAbstractScrollArea::eventFilter(QObject*, QEvent*)”受到保护

c++ - 具有不同成员变量的多个 Action 的通用类

c++ - 如何以编程方式激活 Windows Mobile 中的菜单

c++ - 不允许在 CMFCRibbonBar 上弹出工具提示

c++ - CUB 选择是否有返回的索引

c++ - 如果指针在 C++ 中为 NULL,则修改它

c++ - 快速解析和打印 Google Protobuf 的方法

c++ - Qt 中的 Win32 API

c++ - 使用 P/Invoke 从 MFC DLL 函数读取 VB.NET 中的结构化数据

c++ - 从不在子对话框中调用子的 DoDataExchange? - MFC