MFC模态窗口与非模态窗口

MFC模态窗口与非模态窗口

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年07月25日
模态窗口的意思是指主窗口在打开模态窗口后,没法再操作主窗口,这就是模态窗口,而非模态窗口刚好和模态窗口相反,就是主窗口在打开非模态窗口后,还可以继续操作主窗口,即为非模态窗口。
那么项目创建就不说了,那么首先是我们在主窗口要有一个按钮,这个按钮的作用是点击打开模态窗口,即然要打开一个窗口那么我们首先要有一个窗口作为模态窗口,在资源视图中我们右键一个名为“Dialog”的文件夹,然后点击“插入Dialog”,如图1所示

在这里插入图片描述图1
在这里插入图片描述图2
在这里插入图片描述图3
插入窗口后清除窗口的默认控件,为让模态窗口能被主窗口弹出,我们需要建立一个关联,右键新窗口,点击“添加类”,如图2所示,然后会弹出一个添加类向导的窗口,如图3所示,从图3我们可以看到一个类名的文本框,我们把类名填上就可以了不需要理会其他。
然后会给我们打开一个头文件,也就是我们新建的那个类所在的头文件,没有修改的话头文件的名称就是类名,然后回到主窗口,我们在主窗口有一个按钮,双击该按钮就会自动创建该按钮的点击事件,那么系统会把该事件的函数创建到C++MFC_Test0Dlg.cpp的文件中,当然C++MFC_Test0是项目名称,函数体如下所示

void CCMFC_Test0Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
}

我们为了可以弹出模态窗口,所以我们给模态窗口创建了一个MTK类作为关联,那么现在我们需要引入这MTK类的头文件,也就是MTK.h头文件,然后创建MTK类对象,通过MTK对象点出DoModal()函数,就完成了模态窗口的建立,代码如下。

void CCMFC_Test0Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
//弹出模态框 阻塞
MTK dlg;
dlg.DoModal();
}
至于DoModal()函数是从哪里来,在图3中有一个基类的下拉框选项,DoModal()函数就来源于那个基类的基类。
非模态窗口和模态窗口基本相同,主要的不同是最后的那个点击事件那里的代码有所不同,我非模态窗口的关联类名为CdlgShow,不同则在于CdlgShow类对象的创建不在点击事件中创建而是到C++MFC_Test0Dlg.h中作为私有成员创建,然后在到C++MFC_Test0Dlg.cpp中的OnInitDialog()函数里面有一行注释为TODO: 在此添加额外的初始化代码的下面,把窗口创建为非模态窗口,再在点击事件函数中显示非模态窗口。
BOOL CCMFC_Test0Dlg::OnInitDialog(){
// TODO: 在此添加额外的初始化代码
dlg.Create(IDD_SHOW);//非模态窗口只能创建一次,不能创建多次
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
这是把把窗口创建为非模态窗口的那个函数,当然函数里面内容不只这些,那些都是系统自动生成包括上面的return语句,因为这些内容太多和我们创建非模态窗口没有关系,所以我就不粘出来了,下面就是点击事件函数的内容。
void CCMFC_Test0Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//弹出非模态对话框
//CDlgShow dlg;
//创建非模态框

dlg.ShowWindow(SW_SHOWNORMAL);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值