CDialog* pDlg = GetDlgItem(IDC_MY_DIALOG);m_pDialog = dynamic_cast<MyDialog*>(pDlg);不对
时间: 2024-03-26 19:35:18 浏览: 17
是的,你说的对,这个代码是有问题的。因为 GetDlgItem 会返回一个 CWnd 指针,而不是一个 CDialog 指针,因此在将其转换为 CDialog 指针时需要进行动态类型转换。
正确的代码应该是:
```
CWnd* pWnd = GetDlgItem(IDC_MY_DIALOG);
m_pDialog = dynamic_cast<MyDialog*>(pWnd);
```
这里的 IDC_MY_DIALOG 是对话框模板中对话框控件的 ID,MyDialog 是对话框类的名称,可以根据你的实际情况进行修改。
另外,需要注意的是,在进行动态类型转换时,需要确保指针指向的对象实际上是一个 MyDialog 类型的对象,否则转换会失败,导致 m_pDialog 指针为空。
相关问题
CDialog* pDialog = GetDlgItem(IDC_MY_DIALOG)这个不对
这个代码片段在 MFC 中是有问题的。GetDlgItem 函数的返回类型是 CWnd*,而不是 CDialog*。如果 IDC_MY_DIALOG 对应的控件是一个 CDialog 对象,那么需要进行强制类型转换,例如:
```
CWnd* pWnd = GetDlgItem(IDC_MY_DIALOG);
CDialog* pDialog = dynamic_cast<CDialog*>(pWnd);
if (pDialog != nullptr)
{
// 处理逻辑
}
```
DDX_Control(pDX, IDC_MY_DIALOG, m_pDialog);有问题
如果使用 DDX_Control 时出现问题,可能是因为以下原因之一:
1. 没有在对话框模板中添加 IDC_MY_DIALOG 对应的控件,或者控件的类型不是 CDialog。
2. 在 DoDataExchange 函数中没有声明 m_pDialog,或者声明的类型不是 CDialog*。
3. 控件的类型是 CDialog,但是对话框类没有包含相应的头文件。
4. 对话框类没有正确地包含资源文件的头文件,导致 IDC_MY_DIALOG 没有被定义。
5. 在 DoDataExchange 函数中没有调用 DDX_Control 函数。
如果以上情况都不是问题所在,你可以尝试使用另外一种方式来获取对话框指针:
```
CDialog* pDialog = GetDlgItem(IDC_MY_DIALOG);
```
这个代码片段将 IDC_MY_DIALOG 对应的控件强制转换为 CDialog 类型,从而获取对话框指针。如果你需要在 CFormView 中对对话框进行操作,可以将其作为成员变量来使用。