按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
(6 )设置对话框中各种控件的响应顺序,即运行时按下 Tab 键,输入焦点从一个控件切
换到另一个控件的顺序。
·65 ·
…………………………………………………………Page 75……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
在对话框编辑界面中,可以通过选择主菜单“Layout|Tab Order ”或者按快捷键 Ctrl+D,
进入 tab 顺序的设置界面,此时对话框资源编辑器的客户区如图 4…11 所示。
图 4…11 设置登录对话框的响应顺序
如图 4…11 所示,每个控件左上角的数字就是它的响应顺序 。标明数字 1 的“确认”按钮
控件表示对话框打开时输入焦点最初的位置。然后按下 Tab 键,输入焦点转移到标明数字 2
的“取消”按钮。再按下 Tab 键,输入焦点转移到标明数字 3 的“用户名:”静态文本框,由
于静态文本框不接受输入,因此输入焦点自动转移到标明数字 4 的输入框。其他数字以此类
推。
设置 Tab 顺序是通过按所需的顺序依次单击各个控件完成,如进入如图 4…11 所示的界面
后,依次单击“用户名”输入框,“用户名”静态文本框,“密码”输入框,“密码”静态文本
框,“确认”按钮和“取消”按钮,就可设置成如图 4…12 所示的程序。
最后按 ESC 键,就可以确认修改并退出设置界面。
图 4…12 比较合理的登录对话框的 tab 顺序
技巧:调用 CWinApp::SetDialogBkColor()可以改变对话框的背景颜色和文本颜色。该函数一般在
应用程序类的 InitInstance 函数中调用,设置应用程序中对话框与消息对话框的默认背景颜
色和文本颜色。例如:
BOOL CMyApp::InitInstance()
{
// Standard initialization
……
//将对话框背景颜色设置为黄色(第一个参数)
//将对话框文本颜色设置为蓝色(第二个参数)
·66 ·
…………………………………………………………Page 76……………………………………………………………
第 4 章 对话框
SetDialogBkColor(RGB(255;255;0);RGB(0;0;255));
//装入标准的 INI 文件设置(包括 MRU )
LoadStdProfileSettings();
……
}
4。1。3 创建对话框类
创建对话框的第二步是创建对话框类,即创建一个 CDialog 类的派生类与新建的对话框
资源关联。对话框类 CDialog 提供了访问控件属性,以及响应控件和对话框自身消息的功能。
1.创建对话框类
创建与关联的对话框类的派生类的过程如下:
(1)在 IDE 主菜单栏中依次选择菜单“View|ClassWizard ”,或者在开发环境的界面中直
接使用快捷键 Ctrl+W,打开“ClassWizard ”对话框。同时系统会检测到添加了新的对话框资
源,并自动打开如图 4…13 所示的对话框,提示用户是否为新建的对话框添加一个对话框类。
(2 )在如图 4…13 所示的对话框中,选中“Create a new class ”单选项,为对话框资源创
建一个新的类,单击“OK ”按钮确认后打开如图 4…14 所示的“New Class ”对话框。
图 4…13 提示用户为新添加的对话框创建一个对话框类 图 4…14 创建新类的对话框
(3 )在“New Class ”对话框中,为 4。1。2 节中创建的实例 Sample4_1 的登录对话框创建
新的类。
o 在“Name ”输入框中输入“CLoginDialog ”,表明新建类的名称为 CLoginDialog 。
o 此时“File name ”输入框中的内容自动设置为“LoginDialog。cpp ”,表明类的源文件为
LoginDialog。cpp 。
o 在“Base class ”下拉列表框中选择“CDialog ”,表明 CLoginDialog 类的基类为 CDialog 。
o 在“Dialog ID ”下拉列表框中选择 IDD_LOGINDIALOG,表明 CLoginDialog 关联的
对话框资源为 IDD_LOGINDIALOG 。
o 单击“OK ”按钮后,关闭 New Class 对话框,返回 ClassWizard 对话框,同时 ClassWizard
·67 ·
…………………………………………………………Page 77……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
为登录对话框创建了一个新的类 CLoginDialog 。
2 .为对话框类添加控件成员变量
在返回的 ClassWizard 对话框中单击“Member Variables ”选项卡进入如图 4…15 所示的编
辑对话框控件成员变量的界面。这个界面用于设置为控件关联变量,使得在程序中通过这些
变量可以访问控件的属性。
介绍该界面中的主要内容如下。
o Project 下拉列表框:选择需要编辑的工程名。
o Class name 下拉列表框:选择需要编辑的类名。
o Control IDs 列表框:列出对话框的控件及其对应的控件成员变量信息。其中有 3 列,
“Control IDs ”列给出对话框的控件 ID,“Type ”列给出控件变量的类型,“Member ”
列给出控件变量的名称。选定某个控件,还可以编辑该控件对应的变量。
o Add Class 按钮:添加新类。
o Add Variable 按钮:为选定的控件添加变量。
o Delete Variable 按钮:为选定的控件删除原来的变量。
o Update Columns 和 Bind All 按钮:跟数据库有关,这里不作介绍。
图 4…15 ClassWizard 编辑对话框控件成员变量的界面
在如图 4…15 所示的“Project ”下拉列表框中已经默认选择 Sample4_1,在“Class name ”
下拉列表框中选择 CLoginDialog,从 Control IDs 列表框中可以看到登录对话框中有 4 个控件,
IDC_LOGINNAME 、IDC_PASSWORD、IDCANCEL 和 IDOK 。需要获得用户输入的用户名
和密码,因此需要为 IDC_LOGINNAME 和 IDC_PASSWORD 添加两个变量。步骤如下:
(1)在如图 4…15 所示的对话框的“Control IDs ”列表框中选择 IDC_LOGINNAME ,然
后单击“Add Variable ”按钮,打开如图 4…16 所示的添加成员变量对话框。
(2 )按如下方法设置 IDC_LOGINNAME 的成员变量。
o 在 “ Member variable name ” 输 入 框 中 输 入 m_szLoginName , 即 将 变 量 命 名 为
m_szLoginName 。
·68 ·
…………………………………………………………Page 78……………………………………………………………
第 4 章 对话框
图 4…16 添加成员变量对话框
o 在“Category ”下拉列表框中选择“Value ”,表明创建的变量是值,而不是控件。
o 在“Variable type ”下拉列表框中选择 CString,表明变量类型为 CString 。
单击“OK ”按钮,确认并返回 ClassWizard 对话框。
(3 )添加一个 m_szPassword 变量,对话框设置如下。
o 在 “ Member variable name ” 输 入 框 中 输 入 m_szPassword , 即 将 变 量 命 名 为
m_szPassword ;
o 在“Category ”下拉列表框中选择“Value ”,表明创建的变量是值,而不是控件;
o 在“Variable type ”下拉列表框中选择“CString ”,表明变量类型为 CString 。
单击“OK ”按钮,确认并返回 ClassWizard 对话框,如图 4…17 所示。
图 4…17 完成变量添加的编辑成员变量的界面
(4 )此时可以看到,在“Control IDs ”列表框中选择“IDC_LOGINNAME ”项后,在对
话框的下方将出现该变量的属性介绍和说明。对于 CString 变量,还有一个“Maximum
Characters ”输入框,用于设置 C_LOGINNAME 输入框中的输入字符的个数。在本实例中可
以不作这个限定,故此输入框设置为空。
(5 )单击“ClassWizard ”对话框中的“OK ”按钮后,回到 IDE 主界面,完成变量的添
加。
·69 ·
…………………………………………………………Page 79……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
此时在 IDE 左侧单击“ClassView ”选项卡,可以看到新建了一个类 CLoginDialog,展开
CLoginDialog 节点,可以看到该类中添加了 m_szLoginName 和 m_szPassword 两个控件变量。
3 .数据交换和检验
程序运行时,用户更改控件属性,如在输入框中输入文字或者改变复选框的选中状况后,
MFC 会修改对应控件变量的值。这个过程是通过 MFC 为对话框类自动添加的成员函数
DoDataExchange()实现的,称为对话框数据交换和检验机制。该函数在 LoginDialog。cpp 中的
代码如下: