学习控件-对话框

首先对话框分为模态对话框和非模态对话框

模态对话框和非模态对话框的区别就是不关闭对话框时能否触发父对话框,模态对话框在未关闭对话框时不能触发父对话框,而非模态对话框在不关闭的情况下可以触发父对话框。

比如:在使用word的另存为时,如果这个框没有关闭,那么再使用word就使用不了了,如果你选的是word新建,那么你在新建这个对话框没有关闭的情况下也可以使用父对话框

开始

首先在vs2019下采用mfc对话框新建项目-一切采用默认就好

 

 

然后在rc视图里面选中两个button控件来触发响应显示对话框

 

 

文字随意编写

再在Dialog类中插入两个新的对话框

 

 

默认插入类名为IDD_DIALOG可以自行修改。这里相当于给对话框创建了UI文件,还需要对应的.h文件和.cpp文件来具体实现它

 

所以在对应的对话框里给对话框添加类

 

 

针对每个button响应的不同添加不同的类,对话框的类名通常以CD开头后面的随便取

 

添加完之后就可以在类视图里面看到对应的类的头文件和cpp文件

 

 

 

 

这时候就可以在主对话框里面响应添加的对话框了,首先返回到主对话框的CPP函数,通常以Dlg结尾表示生成的对话框类,将对应的对话框的类的头文件添加进去这样才可以使用。

 

可以使用对应的类和对应的UI的时候就可以添加响应来使得在主对话框中响应后就可以看到子对话框

双击主对话框的rc文件的对应的button控件可以直接添加进入用户单击button时的响应

然后在对应的函数里面来写代码:

同样的接下来使用第二个控件来处理第二个对话框

 

 

但是对于非模态对话框来说,如果直接创建并显示的话会进行闪退,因为点击button以下相当于函数处理一下函数调用完就会删除掉,所以需要在堆中或者在别的地方先保存这个对象,然后再在这里进行show就行了,所以需要进行的是先在全局中进行创建然后再函数中进行显示来处理显示

所以这里为了使得,非模态对话框只创建一次对象以及初始化一次对话框采用了再主对话框类里面申明了成员函数为CDNMT,然后再在主对话框的OninitDalog初始化函数里面初始化窗口来处理

 

 

 

 

 

就可以正常运行了

 

 

代码打包在github上面

https://github.com/skrandy/MFC_DLG_myself