Cformview初始化时在哪个函数里加载dialog的
时间: 2023-12-27 21:04:55 浏览: 86
CFormView初始化时在`OnInitialUpdate`函数里加载dialog。`OnInitialUpdate`函数是在CFormView对象初始化完成后第一次显示视图前被自动调用的。在该函数中可以进行控件的初始化、数据的加载等操作。同时,在该函数中也可以通过GetDlgItem函数获取到视图上的控件句柄,并进行控件的设置。
相关问题
Cformview初始化时是如何加载dialog,后面我想更换已经加载好的dialog怎么操作
在 MFC 中,`CFormView` 是一个对话框视图类,它可以显示一个包含控件的对话框。`CFormView` 的初始化过程中会自动加载对应的对话框资源,可以通过重载 `CFormView` 的 `DoDataExchange` 函数将控件与类成员变量绑定。
如果你想更换已经加载好的对话框,可以使用 `CFormView` 的 `OnInitDialog` 函数。该函数在对话框创建后被调用,你可以在该函数中进行对话框的修改。
以下是一个示例代码,假设你已经有一个名为 `IDD_DIALOG1` 的对话框资源,并且已经通过 `CFormView` 加载了该对话框:
```c++
class CMyFormView : public CFormView
{
public:
CMyFormView() : CFormView(IDD_DIALOG1) {}
// 在对话框创建后被调用
virtual void OnInitDialog()
{
// 更换对话框
if (m_hWnd != NULL) // 确保窗口句柄有效
{
// 销毁原有的对话框
CWnd* pWnd = GetDlgItem(IDC_STATIC1); // 获取原有的控件
pWnd->DestroyWindow(); // 销毁控件
// 加载新的对话框
CDialog dlg(IDD_DIALOG2); // 加载 IDD_DIALOG2 对话框资源
dlg.Create(this); // 创建对话框
dlg.MoveWindow(0, 0, 500, 500); // 设置对话框大小和位置
dlg.ShowWindow(SW_SHOW); // 显示对话框
}
}
};
```
在上述代码中,我们重载了 `CFormView` 的 `OnInitDialog` 函数,并在其中销毁了原有的对话框,并加载了新的对话框资源 `IDD_DIALOG2`。你需要根据自己的实际情况,在对话框中添加控件,并将其与类成员变量绑定。
继承CFORMVIEW的DIALOG怎么初始化
继承 CFormView 的对话框的初始化可以通过以下步骤实现:
1. 在 CFormView 子类的头文件中添加以下构造函数声明:
```c++
public:
MyFormView();
```
2. 在 CFormView 子类的源文件中实现构造函数,调用 CFormView 构造函数并传递资源 ID。
```c++
MyFormView::MyFormView() : CFormView(IDD_MYFORMVIEW)
{
}
```
3. 在对话框类的源文件中实现 OnInitDialog 函数,并将其重写为以下形式:
```c++
BOOL MyDialog::OnInitDialog()
{
BOOL bResult = CDialog::OnInitDialog();
MYFORMVIEW.Create(IDD_MYFORMVIEW, this);
return bResult;
}
```
其中,MYFORMVIEW 是在对话框类的头文件中声明的 CFormView 子类对象。
4. 在对话框类的头文件中添加以下声明:
```c++
protected:
MyFormView MYFORMVIEW;
```
5. 在对话框类的 DoDataExchange 函数中添加以下代码:
```c++
DDX_Control(pDX, IDC_MYFORMVIEW, MYFORMVIEW);
```
其中,IDC_MYFORMVIEW 是包含 CFormView 子类的控件的 ID。
6. 在资源编辑器中添加一个 CFormView 对象,并设置其 ID。
7. 在对话框类的头文件中添加以下声明:
```c++
enum { IDD = IDD_MYDIALOG };
```
其中,IDD 是对话框的资源 ID。
完成上述步骤后,CFormView 子类就会被正确初始化,并显示在对话框中。
阅读全文