m_pDialog 是 CFormView 中的对话框指针,可以通过 ClassWizard 工具生成的 DoDataExchange 函数中的 DDX_Control 函数获取。具体代码
时间: 2024-03-26 21:35:10 浏览: 17
是的,m_pDialog 是 CFormView 中的对话框指针,可以通过 ClassWizard 工具生成的 DoDataExchange 函数中的 DDX_Control 函数获取。具体的代码如下所示:
1. 打开 CFormView 对应的类文件,找到 DoDataExchange 函数。
2. 在 DoDataExchange 函数中添加以下代码:
```
DDX_Control(pDX, IDC_MY_DIALOG, m_pDialog);
```
其中,IDC_MY_DIALOG 是对话框模板中对话框控件的 ID,m_pDialog 是 CDialog 类型的成员变量。
这样,你就可以在 CFormView 中通过 m_pDialog 来操作对话框了。例如,在 OnInitDialog 函数中,你就可以使用以下代码来设置对话框大小:
```
CRect rect;
GetClientRect(&rect);
m_pDialog->SetWindowPos(nullptr, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER);
```
相关问题
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 中对对话框进行操作,可以将其作为成员变量来使用。
CFormView 对应的类文件中没有OnInitDialog 函数
是的,CFormView 没有 OnInitDialog 函数,因为它不是一个对话框类。如果你想要让 CFormView 中的对话框与视图一样大小,可以按照以下步骤操作:
1. 打开 CFormView 所在的 .cpp 文件,找到 OnInitialUpdate 函数。
2. 在 OnInitialUpdate 函数中添加以下代码:
```
CRect rect;
GetClientRect(&rect);
m_pDialog->SetWindowPos(nullptr, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER);
```
其中,m_pDialog 是 CFormView 中的对话框指针,可以通过 ClassWizard 工具生成的 DoDataExchange 函数中的 DDX_Control 函数获取。
3. 在 CFormView 的 OnInitialUpdate 函数中添加以下代码:
```
CSize sizeTotal;
// TODO: 计算视图的大小
sizeTotal.cx = /* 视图的宽度 */;
sizeTotal.cy = /* 视图的高度 */;
SetScrollSizes(MM_TEXT, sizeTotal);
```
其中,TODO 后面的代码需要根据你的具体需求进行修改,计算出视图的大小,并将其赋值给 sizeTotal。这里的 MM_TEXT 表示使用像素作为单位,如果你使用的是其他的单位,可以根据需要进行修改。
这样,对话框就会根据视图的大小来进行调整,从而实现和视图一样大小的效果。