自定义dialog 控件报空指针

先来张博主的自拍镇楼!

由于项目需求 自定义了dialog 并且在很多地方要用到 只有里面显示的内容不同 当我给dialog里面的textview设置内容时候发现报了空指针

聪明的我 一下就想到了问题的可能性 


先来张错误代码:



dialog在new 的时候 并不会执行 oncreateView() 方法  因此里面的控件都未初始化 而调用dialog.show()的时候才会执行oncreateView() 方法

所以只需要把第三行和第四行交换一下位置就行了



行了 不装逼了 再不睡觉就要猝死了

### 实现方法 在 MFC 多文档界面 (MDI) 应用程序中实现打开自定义对话框功能涉及几个关键步骤。为了响应 `MainFrm` 的按钮事件来显示不同类型的窗口,通常的做法是在相应的消息处理函数中实例化并调用对话框对象。 #### 创建自定义对话框资源和类 首先,在资源视图中添加新的对话框模板作为应用程序的一部分,并为此对话框关联一个派生自 `CDialogEx` 或者 `CDialog` 的新类[^2]。这可以通过 Visual Studio 提供的设计工具完成,确保为每个特定用途设计独特的控件布局。 #### 编写代码逻辑 接着,在主框架窗口 (`CMainFrame`) 中声明成员变量用于存储指向所需对话框类的对象指针,并编写相应命令处理器以初始化这些对象并在适当时候展示出来: ```cpp // 在 CMainFrame 类头文件 (.h) 添加私有成员变量 class CMainFrame : public CMDIFrameWnd { ... private: CMyCustomDialog* m_pDlg; // 替换为实际的对话框类名 }; // 在 CMainFrame 构造函数内初始化该指针为空 CMainFrame::CMainFrame() { m_pDlg = nullptr; } // 定义 OnButtonClicked 成员函数处理按钮点击事件 afx_msg void OnButtonClicked(); BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) ON_BN_CLICKED(IDC_BUTTON_OPEN_DIALOG, &CMainFrame::OnButtonClicked) END_MESSAGE_MAP() void CMainFrame::OnButtonClicked() { if (!m_pDlg || !m_pDlg->IsWindow()) { delete m_pDlg; m_pDlg = new CMyCustomDialog(this); } m_pDlg->DoModal(); // 对于模式对话框;如果是非模态则使用 Create() 方法代替 DoModal(). } ``` 上述代码片段展示了如何在一个基于 MDI 的 MFC 应用里集成自定义对话框的行为。这里假设目标是创建一种模式化的对话框体验——即用户必须先关闭当前弹出的小窗才能继续与主应用交互。如果希望是非阻塞式的,则应考虑采用 `Create()` 函数启动非模态对话框[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值