MFC实现点击按钮弹出独立窗口,关闭后销毁主窗口

⌚Time: 2022-09-22 20:09:31

👨‍💻Author: Jack Ge

1

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

建立一个弹出窗口IDD_DIALOG1

如何实现点击主窗口的按钮,弹出新的窗口

在主窗口类中定义一个CDialog指针


private:

    CDialog *m_pDialog;

在主窗口的按钮点击事件处理程序中,初始化窗口指针,建立窗口并且显示


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的映射关系,

即在自定义类中加入以下代码


//IDD_DIALOG1是窗体ID

enum { IDD = IDD_DIALOG1 };

并且包含资源头文件


#include "Resource.h"

2.3

对于主窗口类,需要包含自定义类的头文件


#include "MyDialog.h"


建立自定义类的指针




private:

    CMyDialog *m_pDialog;

在按钮的事件响应程序中




void CTESTPOPWINDOWDlg::OnBnClickedOk()

{

    // TODO: 在此添加控件通知处理程序代码

    m_pDialog = new CMyDialog();

    m_pDialog->Create(IDD_DIALOG1,this);

    m_pDialog->ShowWindow(true);

    //点击按钮后隐藏主窗口

    ShowWindow(false);

}

效果