// MFC无模态对话框架构 //
/*
设置:
1.在VS2019中创建一个空项目
2.项目->属性->配置属性->高级->MFC的使用 选"在静态库中使用MFC"
3.项目->属性->配置属性->高级->字符集 选"使用多字节字符集"
4.项目->属性->配置属性->链接器->系统->子系统 选"窗口"
5.添加对话框资源 右键方案名称->添加->资源->Dialog->新建(资源ID:IDD_DIALOG1)
*/
#include<afxwin.h>
#include "resource.h"
//第1步:公开继承CDialog声明CMyDlg(对话框类)
class CMyDlg :public CDialog {
//1.1 类内声明消息处理宏
DECLARE_MESSAGE_MAP(CMyDlg)
public:
//1.2 类内声明消息处理函数
void OnMyOK();
void OnMyCancel();
};
//1.3 类外实现消息处理函数OnMyOK
void CMyDlg::OnMyOK() {
//CDialog::OnOK();// 父类CDialog::OnOK()函数中调用了EndDialog(IDOK),EndDialog是对话框类的成员函数,
// 会在对话框关闭前被调用,类似于析构函数。在无模态对话框中仅能将窗口隐藏(不能退出)
//1.4 点击确定时窗口关闭退出
::DestroyWindow(this->m_hWnd);//全局函数DestroyWindow可以用来销毁对话框窗口,参数为窗口句柄
//这里this是对话框类对象指针pdlg,通过其成员函数m_hWnd取得对话框句柄
}
//1.5 类外实现消息处理函数OnMyCancel
void CMyDlg::OnMyCancel() {
this->DestroyWindow();//利用CMyDlg的成员函数销毁对话框;函数前this指针即后边的pdlg,因此不用参数
}
//1.6 类外实现消息处理宏
BEGIN_MESSAGE_MAP(CMyDlg,CDialog)
ON_COMMAND(IDOK,OnMyOK) //OK按钮点击消息及处理函数
ON_COMMAND(IDCANCEL,OnMyCancel)//Cancel按钮点击消息及处理函数
END_MESSAGE_MAP()
//第2步 公开继承CWinApp声明CMyWinApp(应用程序类)
class CMyWinApp :public CWinApp {
public:
//2.1类内声明重写InitInstance虚函数
virtual BOOL InitInstance();
};
//2.2类外实现InitInstance虚函数
BOOL CMyWinApp::InitInstance() {
CMyDlg* pdlg = new CMyDlg;//new方式生成CMyDlg对象指针
pdlg->Create(IDD_DIALOG1);//CMyDlg对象调用Create生成对话框窗口,参数对话框资源ID
m_pMainWnd = pdlg;//将new方式生成CMyDlg对象指针存储到应用程序类对象theApp成员变量中
pdlg->ShowWindow(SW_SHOW);//显示对话框窗口
pdlg->UpdateWindow();//更新对话框窗口
return TRUE;
}
//第3步 生成应用程序类对象
CMyWinApp theApp;//程序关键结点,main函数在其中,无此语句程序不能运行。