Mfc中cformview里如何切换dialog
时间: 2024-03-22 16:42:27 浏览: 31
在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如何初始化成和视图一样大小
在 MFC 中,CFormView 的 dialog 可以通过以下几个步骤初始化成和视图一样大小:
1. 在 CFormView 的 OnInitialUpdate 函数中获取该视图的尺寸,可以通过 GetClientRect 函数来获取。
2. 在 OnInitDialog 函数中设置对话框的尺寸为视图的尺寸。可以使用 SetWindowPos 函数来实现。
下面是代码示例:
```
void CMyFormView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// 获取视图的尺寸
CRect rect;
GetClientRect(rect);
// 将对话框的尺寸设置为视图的尺寸
CWnd* pWnd = GetDlgItem(AFX_IDC_FORMVIEW);
if (pWnd != NULL)
{
pWnd->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(), SWP_NOZORDER | SWP_NOMOVE);
}
}
BOOL CMyFormView::OnInitDialog()
{
CFormView::OnInitDialog();
// 将对话框样式设置为无边框
ModifyStyleEx(WS_EX_DLGMODALFRAME, 0, SWP_FRAMECHANGED);
return TRUE;
}
```
需要注意的是,在 OnInitDialog 函数中,还需要将对话框的样式设置为无边框,以免出现窗口边框的重叠。
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);
}
```