BOOL CMfcSnakeDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return FALSE; // 除非将焦点设置到控件,否则返回 TRUE
时间: 2024-04-02 19:34:16 浏览: 114
这是一个 MFC 程序中的对话框类的成员函数,用于初始化对话框。在函数中,首先调用 CDialogEx::OnInitDialog() 进行基本的对话框初始化,然后将“关于...”菜单项添加到系统菜单中。接着设置对话框的图标,分别设置大图标和小图标。最后返回 FALSE,表示未将焦点设置到控件上,需要在后面的代码中手动设置。需要注意的是,在函数中还可以添加额外的初始化代码,但是需要放在 return 语句之前。
相关问题
BOOL san::OnInitDialog() { CDialogEx::OnInitDialog(); // 获取控件句柄 //CWnd* pStaticText = GetDlgItem(IDC_STATIC4); // 设置控件文本 //CString strText = _T(""); /*for (int num = 0; num < 7; num++) { CString str_num; str_num.Format(_T("%7d"), C彩票选号器MDlg::y[num]); strText += str_num; }*/ //CString strText = str_nu; CStatic* pStaticText1 = (CStatic*)GetDlgItem(IDC_STATIC4); // 获取静态文本控件指针 pStaticText1->SetWindowText(erd::strText1); CStatic* pStaticText1 = (CStatic*)GetDlgItem(IDC_STATIC5); // 获取静态文本控件指针 pStaticText1->SetWindowText(erd::strText2); return TRUE; }修改这段报错的代码
在该段代码中,有两个地方出现了重复定义变量的问题:
1. 在设置 IDC_STATIC4 控件文本时,变量 pStaticText1 已经定义,但在设置 IDC_STATIC5 控件文本时,又定义了一个同名变量 pStaticText1。
解决方法:将第二个变量重命名为 pStaticText2 或其他不同的变量名。
2. 在设置 IDC_STATIC4 控件文本时,使用了一个未定义的字符串变量 strText1。
解决方法:将 strText1 定义并初始化,或者使用其他已经定义的字符串变量。修改后的代码如下:
```c++
BOOL san::OnInitDialog() {
CDialogEx::OnInitDialog();
CString strText1 = _T("some text 1");
CString strText2 = _T("some text 2");
CStatic* pStaticText1 = (CStatic*)GetDlgItem(IDC_STATIC4);
pStaticText1->SetWindowText(strText1);
CStatic* pStaticText2 = (CStatic*)GetDlgItem(IDC_STATIC5);
pStaticText2->SetWindowText(strText2);
return TRUE;
}
```
CDialogEx::OnInitDialog();出现野指针
可能原因:
1. 未调用父类的`OnInitDialog()`函数;
2. `CDialogEx`对象未成功创建;
3. 对话框资源未正确加载。
解决方法:
1. 在子类的`OnInitDialog()`函数中首先调用父类的`OnInitDialog()`函数,例如:
```c++
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog(); //调用父类的OnInitDialog()函数
//其他初始化操作
}
```
2. 确保`CDialogEx`对象成功创建,可以在创建对话框的函数中检查返回值,例如:
```c++
CMyDialog dlg;
INT_PTR nRet = dlg.DoModal();
if (nRet == IDOK)
{
//对话框操作
}
```
3. 检查对话框资源是否正确加载,可以在资源文件中打开对话框资源查看是否存在问题。
阅读全文