鱼C论坛

 找回密码
 立即注册
查看: 2435|回复: 0

[技术交流] MFC-005基于对话框编程

[复制链接]
发表于 2018-11-13 23:10:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-11-13 23:09 编辑

对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。在Visual C++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源
1、创建基于对话框的 MFC 应用程序框架
程序的创建过程:
        1> 选择“文件 | 新建 | 项目”菜单;
        2> 在“新建项目”对话框中,选择“ MFC 应用程序 ”,输入工程名称,选择“确定”。
2.png
        3> 选择“ 基于对话框”,即创建基于对话框的应用程序,选择“完成”。
1.png
2、对话框应用程序框架介绍
1. 资源视图
用 AppWizard 创建基于对话框的应用程序框架(假定工程名为 Dialog )后,项目工作区上增加了一个“资源视图”选项卡。
3.png

或者,通过视图找到“资源视图”选项卡:
4.png

在 MFC中,与用户进行交互的对话框界面被认为是一种资源。展开“Dialog”,可以看到有一个ID为IDD_ DIALOG _DIALOG(中间部分(DIALOG)与项目名称相同)的资源,对应中间的对话框设计界面。不管在何时,只要双击对话框资源的ID,对话框设计界面就会显示在中间。
5.png

2. 类视图
在类视图中,可以看到生成了3 个类:CAboutDlg、CDialogApp和CDialogDlg.
6.png

CAboutDlg:  对应生成的版本信息对话框。
CDialogApp:  应用程序类,从CWinApp 继承过来,封装了初始化、运行、终止该程序的代码。
CDialogDlg:  对话框类,从CdialogEx继承过来的,在程序运行时看到的对话框就是它的一个具体对象。
        DoDataExchange函数:  该函数主要完成对话框数据的交换和校验。
        OnInitDialog函数:  相当于对对话框进行初始化处理。
3. 设计界面和工具箱
7.png

3、 模态对话框
当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。
1)通过工具箱在界面上放一个Button,双击此按钮即可跳转到按钮处理函数:
8.png
//按钮处理函数
void CDialogDlg::OnBnClickedButton1()
{
        // TODO:  在此添加控件通知处理程序代码
}
2)资源视图 -> Dialog -> 右击 -> 插入 Dialog:
9.png
10.png 3)修改对话框ID:
11.png 4)点击对话框模板 -> 右击 -> 添加类:
12.png
13.png 5)类视图中多了一个自定义类:
14.png 6)按钮处理函数创建对话框,以模态方式运行。
实现模态对话框的创建需要调用CDialog类的成员函数CDialog::DoModel,该函数的功能就是创建并显示一个对话框:
//启动模态对话框按钮
void CDialogDlg::OnBnClickedButton1()
{
        //需要包含头文件:#include "DlgExec.h"
        CDlgExec dlg;
        dlg.DoModal(); //以模态方式运行
}
4、 非模态对话框
当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。
图形界面操作过程和模态对话框一样,只是,非模态对话框实现方式不一样,先创建(CDialog::Create)一次,然后再显示(CWnd::ShowWindow)。
1)主对话框.h类中声明对话框对象:
15.png
2)创建对话框放在主对话框类的构造函数或OnCreate()函数,目的只创建一次对话框:
//主对话框构造函数 
CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CDialogDlg::IDD, pParent)
{
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

        m_dlg.Create(IDD_DIALOG_SHOW); //IDD_DIALOG_SHOW为对话框ID
}
3)按钮处理函数显示对话框:
//启动非模态对话框按钮
void CDialogDlg::OnBnClickedButton2()
{
        // TODO:  在此添加控件通知处理程序代码

        m_dlg.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表