1
首先建立一个主窗口界面IDD_TESTPOPWINDOW_DIALOG

建立一个弹出窗口IDD_DIALOG1

如何实现点击主窗口的按钮,弹出新的窗口
在主窗口类中定义一个CDialog指针
在主窗口的按钮点击事件处理程序中,初始化窗口指针,建立窗口并且显示
void CTESTPOPWINDOWDlg::OnBnClickedOk()
{
m_pDialog = new CDialog();
//建立的窗口关联窗口资源ID,也就是要显示的新建窗口
m_pDialog->Create(IDD_DIALOG1,this);
m_pDialog->ShowWindow(true);
}
这样点击主窗口的按钮后,就可以弹出新的窗口了

2
如何让主窗口点击按钮后消失,并且弹出新的窗口?在新窗口关闭后,重新显示或者销毁主窗口?
通过在窗体的onclose函数中去实现退出时,对主窗口的显示等操作,但是可以看到,对于一个新建的窗体资源,它的属性,消息中,是没有任何消息的

2.1
这就需要自定义类,直接对于窗体右键,添加类,基类要是窗体所属的类,也就是CDialog

之后在窗体的属性,消息列表中,可以看到消息类型,直接点击WM_CLOSE,添加事件响应程序

在自定义类的onclose函数中,实现对主窗口的重新显示或者销毁
void CMyDialog::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//重新显示主窗口
AfxGetMainWnd()->ShowWindow(TRUE);
//AfxGetMainWnd()->DestroyWindow();
CDialog::OnClose();
}
2.2
也可以在解决方案中直接添加类,使用类向导,添加一个自定义类。
而对于事件响应的添加,在类视图中右键,属性

也可以看到该类的消息,直接添加onclose的事件处理程序

但是如果想要在窗体的属性中看到消息类型,需要手动将此类建立与窗体资源ID的映射关系,
即在自定义类中加入以下代码
并且包含资源头文件
2.3
对于主窗口类,需要包含自定义类的头文件
建立自定义类的指针
在按钮的事件响应程序中
void CTESTPOPWINDOWDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
m_pDialog = new CMyDialog();
m_pDialog->Create(IDD_DIALOG1,this);
m_pDialog->ShowWindow(true);
//点击按钮后隐藏主窗口
ShowWindow(false);
}
效果
