对话框主要分为两个类型,即模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。图4-3 插入对话框资源用于测试模式对话框图4-4 修改对话框的外观和属性5)选中编辑好的对话框资源,执行View→ClassWizard命令,或按快捷键<Ctrl+W>打开类向导。图4-8 查看运行结果单击“关于”按钮弹出关于对话框,在关闭关于对话框前,主对话框是不可以操作的,这就是模式对话框的特点。......
2025-09-30
一个单机版软件,登录账号和密码通常不止一个,而且使用不同账号登录权限是不一样的。例如,高级权限可以添加和删除账号,普通权限则不能等。
打开本章第1节建立的“QQ”工程,本节继续演示账号及权限管理与登录对话框的组合。
1)在类视图中双击CQQApp类,修改头文件代码。
添加一个结构体SUser用于存储权限管理数据,并在CQQApp类中添加一个类成员变量。

2)添加一个新的对话框资源,ID为IDD_PRIOR_DLG,标题为“权限管理”,如图5-7所示。

图5-7 插入权限管理主对话框
3)修改对话框字体和外观,添加一些控件并修改控件的属性,见表5-2。
表5-2 “权限管理”对话框的控件属性

4)通过类向导为IDD_PRIOR_DLG建立一个对话框类“CPriorDlg”,如图5-8所示。

图5-8 创建权限管理对话框的关联类
5)在类视图中的CPriorDlg对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Member Function”命令,添加一个普通成员函数,如图5-9所示。

图5-9 添加普通成员函数
6)填写函数名为ReadUsers,返回值是void,然后单击“OK”按钮完成添加函数,如图5-10所示。

图5-10 填写函数信息
7)修改新添加的类成员函数的代码。


8)在权限管理对话框中,添加WM_INITDIALOG的消息映射函数OnInitDialog,如图5-11所示。

图5-11 添加WM_INITDIALOG消息映射函数
9)修改函数代码。

10)为CPriorDlg类添加WM_DESTROY的消息映射函数,如图5-12所示。

图5-12 添加WM_DESTROY的消息映射函数
11)修改消息映射函数CPriorDlg::OnDestroy()的代码。(https://www.chuimin.cn)

12)在权限管理对话框中,分别双击增、删、改的3个按钮,建立消息映射函数。



13)在主对话框中添加一个按钮,ID为IDC_PRIOR,标题为“权限管理”,如图5-13所示。

图5-13 编辑主对话框
14)双击“权限管理”按钮建立消息映射函数,并编写代码。

15)在类视图中的CLoginDlg对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Member Function”命令,添加一个成员函数,如图5-14所示。

图5-14 在CLoginDlg类中添加一个普通成员函数
16)单击“OK”按钮添加CheckUser函数并修改代码。

17)在类视图中的CLoginDlg对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Member Function”命令,再添加一个成员函数,如图5-15所示。

图5-15 在CLoginDlg类中再添加一个普通成员函数
18)单击“OK”按钮添加普通成员函数并修改代码。

19)修改CLoginDlg中的OnOK函数的代码。

20)修改主对话框初始化函数OnInitDialog的代码。

21)修改主对话框“重新登录”按钮的消息映射函数代码。


22)编译并运行,测试代码。
首次登录使用的账户和密码都是“admin”。登录成功主对话框的标题是“admin高级”,权限管理的按钮是激活状态。登录成功后进入主对话框单击“权限管理”按钮,进入“权限管理”对话框添加一些账户信息,然后使用新添加的账户重新登录,如图5-16所示。

图5-16 查看运行结果
相关文章
对话框主要分为两个类型,即模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。图4-3 插入对话框资源用于测试模式对话框图4-4 修改对话框的外观和属性5)选中编辑好的对话框资源,执行View→ClassWizard命令,或按快捷键<Ctrl+W>打开类向导。图4-8 查看运行结果单击“关于”按钮弹出关于对话框,在关闭关于对话框前,主对话框是不可以操作的,这就是模式对话框的特点。......
2025-09-30
打开本章第1节建立的“Test”工程,本节继续演示非模式对话框的调用过程。1)通过菜单命令或者按快捷键<Ctrl+1>再插入一个对话框,用于测试非模式对话框,如图4-9所示。7)非模式对话框的特点如下。①在关闭模式对话框前,不阻挡对背景窗口的操作。②使用CDialog::Create函数创建非模式对话框,该函数是非阻塞函数。......
2025-09-30
当用户单击对话框标题栏上的关闭按钮后,可能顺次发生的回调包括WM_SYSCOMMAND消息、WM_CLOSE消息、CDialog::OnCancel虚函数和WM_DESTROY消息等。打开第1节建立的“Test”工程,本节继续演示对话框关闭过程的回调函数。当单击系统关闭菜单或按钮,或者按<Alt+F4>组合键都不能关闭对话框,对话框不是真正地关闭而只是最小化了。所有以上其他回调函数都发生在对话框消失之前,并且可以取消继续关闭对话框窗口。图4-26 关闭对话框消息的流程......
2025-09-30
通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口作预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。打开第1节建立的“Test”工程,本节继续演示对话框启动过程的回调函数。......
2025-09-30
打开本章第7节建立的“Tp”工程,继续演示CWinApp类的开发应用。1)修改启动函数CWinApp派生类的构造函数代码。m_pszAppName成员变量有三种途径赋值,首先在CWinApp构造函数中获得字符串。在App派生类以外,调用CWinApp类成员函数的方法有两种。CWinApp类的成员函数LoadIcon和LoadStandardIcon,实际上是封装了API函数LoadIcon的结果。和加载图标的两个函数一样,CWinApp类的成员函数LoadCursor和LoadStandardCursor,分别用于加载程序光标和系统光标资源,它们封装的也是同一个API函数LoadCursor。......
2025-09-30
本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2025-09-30
在本章第5节中,通过“Win32 Application”建立的MFC32工程,目的是为了演示MFC工程的架构原理。一个MFC工程必须包含一个CWinApp的派生类,并定义一个派生类的全局变量theApp,最后重写InitInstance虚函数用于处理进程启动过程。本节直接通过“MFC AppWizard”来创建MFC工程,用于对照以上说明的MFC必备因素。图3-54 程序向导生成的代码图3-55 MFC类向导在Class name下拉列表中选择CTestMFCDlg类,在Member functions列表框中显示4个已添加的回调函数。......
2025-09-30
对话框资源编辑既包括对话框自身的属性设置,还包括对话框内的每个控件的属性设置。对话框和内部的每个控件都有自己的资源ID,ID是一些不重复的数字标志,就如同学号或者身份证号是不重复的数字一样。#define IDD_FIRSTMFC_DIALOG 102#define IDR_MAINFRAME 128#define IDC_NUMB 1000#define IDC_NAME 1001#define IDC_SALA 1002#define IDC_LIST 1003#define IDC_ADD 1004#define IDC_DEL 1005#define IDC_MOD 10061)对话框资源自身的属性包括5个分页,如图2-34所示。Control:对话框启动后去掉标题栏。Accept files:允许从外部拖放一些文件放入对话框内,并在拖放后产生WM_DROPFILES消息。......
2025-09-30
相关推荐