MFC基于对话框-常用控件及其使用

tech2022-09-06  105

目录

对话框模态对话框非模态对话框 编辑框

对话框

模态对话框

模态对话框:当从上一级对话框弹出这个模态对话框过后,之后只能在这个对话框进行操作,其它对话框操作(包括鼠标点击等)不了

如何弹出一个模态对话框?

在资源文件的.rc2文件下的Dialog文件夹处右键单击,选择插入Dialog 我们将新插入的对话框的ID改为IDD_DIALOG_EXEC

给新插入的对话框添加一个类,右键单击,选择新建类

将添加的类命名为DlgEXEC,其余默认,点击确定 3. 给初始对话框从工具箱里添加两个按钮,命名为“模态对话框”和“非模态对话框”,我们的目的是,单击按钮会弹出一个对应类型的对话框

右键单击第一个按钮,选择“添加事件处理程序”;消息类型选择“BN_CLICKED”(意为鼠标单击),函数名改为“OnBnClickedButton1”,点击确定,则会出现与该按钮绑定的一个函数。(整个步骤可以通过双击“模态对话框”按钮实现) 在该cpp文件顶部包含“DlgEXEC.h”,在OnBnClickedButton1()函数里新建一个DlgEXEC的变量dlg , 使用函数dlg.DoModal(). 6.函数写好后,f5编译并运行,点击“模态对话框”,弹出一个模态对话框,并且操作不了上一个对话框。

非模态对话框

非模态对话框:当从上一级对话框弹出这个非模态对话框过后,之后可以在这个对话框进行操作,也可以在其它对话框进行操作

如何弹出一个非模态对话框?(该案例和模态对话框的案例同时进行)

插入一个Dialog,ID命名为IDD_DIALOG_SHOW;

给该对话框新建类,类名为DlgSHOW;

给按钮“非模态对话框”添加一个事项处理程序

由于其中的Dlg是个局部变量,函数调用完就会被释放,故编译运行时,该非模态对话框会一闪而过;(由于模态对话框会有阻塞机制,不会一闪而过,二回继续等待消息);所以我们把类型为DlgSHOW的Dlg创建在CMFCApplicationDLGDlg类里面。

编译运行,弹出了一个非模态对话框,并未一闪而过;但我们再次点击“非模态对话框”时,程序崩溃了。原因是.Creat()函数只能调用一次,运行多次会崩溃,故我们把这个函数移到OnBnClickedButton2()的外面,放进BOOL CMFCApplicationDLGDlg::OnInitDialog()这个函数里面,让主对话框初始化的时候就调用Dlg.Creat(IDD_DIALOG_SHOW);至此,OnBnClickedButton2()里就留一个Dlg.ShowWindow(SW_NORMAL);

编译运行,点击“非模态对话框”按钮,弹出了非模态对话框,且“非模态对话框”按钮可以重复点击。

编辑框

待更新…

最新回复(0)