Windows对话框分为两类:
1>模态对话框:
弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互,例如:登录界面。
2>非模态对话框:
弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。
IMPLEMENT-模态对话框
新建一个窗口,该窗口用于在主窗口上弹出,实现模态对话框操作;
给该窗口添加一个类,继承父类CDialogEx,派生出CLOGIN(名字自己定);
该模态对话框的内容不再介绍需要添加什么东西,自由发挥;
#include "login.h"//将头文件包含进来,具体看自己定义的是哪个头文件
BOOL CEditDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
/*--------------------------------------------------------------------------*/
INT_PTR nRes; //用于保存DoModal函数的返回值,方便判断下一步走向?建立?销毁?
CLOGIN logindlg; //构造CLOGIN的实例化类
nRes = logindlg.DoModal();// 弹出对话框,并接收返回值
if (IDCANCEL == nRes) //返回值是IDCANCEL,则return ,否则继续向下执行
{
CDialog::EndDialog(0);
return false;
}
//在这里可以新增一些跟对话框相匹配的功能,比如如果logindlg.XXX=??然后怎样
//else if(logindlg.m_user == L"yujia" && logindlg.m_password == L"123456")
//{
// return TRUE;
//}
else
{
MessageBox(L"提示内容请自行发挥");
CDialogEx::OnDestroy();
return false;
}
/*----------------------------------------------------------------------------*/
return TRUE;
}
上述代码生成的窗口不再接受其余用户的输入,只能在当前窗口操作,除非关闭该窗口。
IMPLEMENT-非模态对话框
//Dlg类的.h文件加进来以下参数
#include "login.h"//将头文件包含进来,具体看自己定义的是哪个头文件
pubilc:
CLOGIN *dlg;
//Dlg类的.cpp加进来以下参数
//析构函数(显式定义-具体去看析构函数)
CEditDlg::~CEditDlg()
{
if (NULL != dlg){
delete dlg; //删除非模态对话框对象
}
}
//初始化函数,初始化指针
BOOL CEditDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
/*----------------------------------------------------------------*/
dlg = NULL; //初始化指针
/*----------------------------------------------------------------*/
return TRUE;
}
//找一个按钮、复选框、或者一个消息调出非模态对话框,
void CEditDlg::OnBnClickedButton2()
{
/*----------------------------------------------------------------*/
if(NULL == dlg)
{
// 创建非模态对话框实例
dlg = new CLOGIN(); //new完要用delete删除,此处用析构函数解决
dlg->Create(IDD_LOGIN,this);
}
dlg->ShowWindow(SW_SHOW);
/*-----------------------------------------------------------------*/
}
上述代码生成的窗口可以和你调用该窗口的对话框并行,互不干涉。