Mfc中cformview里如何切换dialog
时间: 2024-03-22 17:42:27 浏览: 144
在MFC中,可以使用CreateDialog函数和DestroyWindow函数来实现在CFormView中切换对话框。具体步骤如下:
1. 在需要切换对话框的地方,使用CreateDialog函数创建新的对话框。
2. 在需要删除前一个对话框的地方,使用DestroyWindow函数销毁前一个对话框。
3. 在需要跟随view一起动的地方,使用MoveWindow函数将新的对话框移动到CFormView的适当位置。
示例代码如下:
```
// 切换对话框
void CMyFormView::OnButtonSwitchDialog()
{
// 创建新的对话框
CMyDialog2 dlg2;
dlg2.Create(IDD_MY_DIALOG2, this);
// 销毁前一个对话框
m_pDlg1->DestroyWindow();
// 将新的对话框移动到CFormView的适当位置
CRect rect;
GetClientRect(&rect);
dlg2.MoveWindow(rect);
// 将新的对话框设置为当前对话框
m_pDlg1 = &dlg2;
}
```
需要注意的是,每次切换对话框时,都需要将新的对话框的指针保存下来,以便下一次切换时可以销毁前一个对话框。
相关问题
Mfc中cformview里如何切换dialog,并切换后把前一个dialog删除,并跟随view一起动
在MFC中,可以使用CPropertySheet和CPropertyPage来实现在CFormView中切换对话框。具体步骤如下:
1. 在CFormView中添加一个CPropertySheet成员变量,并在OnInitDialog函数中创建它。
2. 在CPropertySheet中添加需要切换的CPropertyPage对话框。
3. 在需要切换对话框的地方,通过CPropertySheet的SetActivePage函数设置当前活动的CPropertyPage。
4. 在需要删除前一个对话框的地方,通过CPropertySheet的RemovePage函数移除前一个CPropertyPage。
5. 在需要跟随view一起动的地方,通过CPropertySheet的MoveWindow函数将CPropertySheet移动到CFormView的适当位置。
示例代码如下:
```
// 在CFormView中添加一个CPropertySheet成员变量
CPropertySheet m_PropertySheet;
// 在OnInitDialog函数中创建CPropertySheet和CPropertyPage
BOOL CMyFormView::OnInitDialog()
{
CFormView::OnInitDialog();
// 创建CPropertySheet
m_PropertySheet.Create(this, WS_CHILD | WS_VISIBLE, 0);
// 创建CPropertyPage并添加到CPropertySheet中
CMyPropertyPage1 page1;
CMyPropertyPage2 page2;
m_PropertySheet.AddPage(&page1);
m_PropertySheet.AddPage(&page2);
return TRUE;
}
// 切换对话框
void CMyFormView::OnButtonSwitchDialog()
{
// 设置当前活动的CPropertyPage
m_PropertySheet.SetActivePage(1);
// 移除前一个CPropertyPage
m_PropertySheet.RemovePage(0);
// 将CPropertySheet移动到CFormView的适当位置
CRect rect;
GetClientRect(&rect);
m_PropertySheet.MoveWindow(rect);
}
```
MFC中Cformview 中的dialog如何初始化成和视图一样大小
在 MFC 中,CFormView 类派生自 CScrollView 类,因此它可以支持滚动视图的功能。默认情况下,CFormView 中的对话框是根据对话框模板的大小来创建的,而不是根据视图的大小来创建的。如果你想要让对话框和视图一样大小,可以按照以下步骤操作:
1. 打开 CFormView 对应的类文件,在 OnInitDialog 函数中添加以下代码:
```
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 函数获取。
2. 在 CFormView 的 OnInitialUpdate 函数中添加以下代码:
```
CSize sizeTotal;
// TODO: 计算视图的大小
sizeTotal.cx = /* 视图的宽度 */;
sizeTotal.cy = /* 视图的高度 */;
SetScrollSizes(MM_TEXT, sizeTotal);
```
其中,TODO 后面的代码需要根据你的具体需求进行修改,计算出视图的大小,并将其赋值给 sizeTotal。这里的 MM_TEXT 表示使用像素作为单位,如果你使用的是其他的单位,可以根据需要进行修改。
这样,对话框就会根据视图的大小来进行调整,从而实现和视图一样大小的效果。
阅读全文