创建一个继承cformview 的Dialog和继承CDIALOG有什么区别
时间: 2023-11-14 16:06:10 浏览: 274
继承 CFormView 的对话框和继承 CDialog 的对话框之间有以下几点区别:
1. CFormView 可以包含控件,而 CDialog 不能。因此,CFormView 可以用于创建具有复杂界面的对话框,而 CDialog 适用于简单的对话框。
2. CFormView 可以用于实现基于文档/视图架构的应用程序,因为它是视图类,可以与文档类关联。而 CDialog 不是视图类,不能与文档类关联。
3. CFormView 可以响应 WM_INITDIALOG 消息,而 CDialog 不可以。WM_INITDIALOG 是在对话框创建后发送给对话框的第一个消息,可以用于执行一些初始化工作。
4. CFormView 的 OnOK 和 OnCancel 函数会自动调用 UpdateData 函数,从控件中读取数据并将其保存到视图类中。而 CDialog 需要手动调用 UpdateData 函数来完成这些操作。
总之,CFormView 适用于需要具有复杂界面和与文档类关联的对话框,而 CDialog 适用于简单的对话框。
相关问题
继承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 子类就会被正确初始化,并显示在对话框中。
Cformview 中的dialog如何初始化成和视图一样大小
在 CFormView 中,可以通过以下步骤将对话框初始化为与视图一样的大小:
1. 在 CFormView 的派生类中重载 OnInitialUpdate 函数。
2. 在 OnInitialUpdate 函数中获取视图的客户区大小。
3. 调用对话框的 SetWindowPos 函数,将其位置和大小设置为与视图的客户区相同。
以下是示例代码:
```
void CMyFormView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// 获取视图的客户区大小
CRect rectClient;
GetClientRect(&rectClient);
// 获取对话框控件
CDialog* pDialog = GetDlgItem(IDC_MY_DIALOG);
// 将对话框位置和大小设置为与视图的客户区相同
pDialog->SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(), SWP_NOZORDER);
}
```
在这个示例中,OnInitialUpdate 函数首先调用基类的 OnInitialUpdate 函数进行初始化。然后,它获取视图的客户区大小,并获取对话框控件的指针。最后,它调用对话框的 SetWindowPos 函数,将其位置和大小设置为与视图的客户区相同。这样,对话框就会初始化为与视图一样的大小。
阅读全文