44
计计计计计计计计计 计计计计计计计计计 计计计 计计计

计算机高级程序设计 第五章

Embed Size (px)

DESCRIPTION

计算机高级程序设计 第五章. 对话框的基本概念. 对话框是一种次要窗体,通常在响应某个命令菜单时弹出。在对话框上可以添加各种通用控件。 所有对话框及对话框上的控件都由 CWnd 类派生而来。因而能对窗体进行的操作也适用于对话框及控件。 对话框是一种能包含各类通用控件的特殊窗口,通过添加到其上的控件,对话框可以完成指定的任务。分为两部分:. 对话框模板 开发人员可利用对话框模板往对话框上添加控件并进行合理布局。 对话框在创建时会收到 WM_INITDIALOG 的消息,响应该消息的事件处理函数为 OnInitDialog(), 其作用是对话框初始化. 对话框类 - PowerPoint PPT Presentation

Citation preview

Page 1: 计算机高级程序设计 第五章

计算机高级程序设计计算机高级程序设计

第五章第五章

Page 2: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 2

对话框的基本概念对话框的基本概念• 对话框是一种次要窗体,通常在响应某个命令菜单时弹出。在对话框对话框是一种次要窗体,通常在响应某个命令菜单时弹出。在对话框

上可以添加各种通用控件。上可以添加各种通用控件。• 所有对话框及对话框上的控件都由所有对话框及对话框上的控件都由 CWndCWnd 类派生而来。因而能对窗类派生而来。因而能对窗

体进行的操作也适用于对话框及控件。体进行的操作也适用于对话框及控件。• 对话框是一种能包含各类通用控件的特殊窗口,通过添加到其上的控对话框是一种能包含各类通用控件的特殊窗口,通过添加到其上的控

件,对话框可以完成指定的任务。分为两部分:件,对话框可以完成指定的任务。分为两部分:

• 对话框模板

开发人员可利用对话框模板往对话框上添加开发人员可利用对话框模板往对话框上添加控件并进行合理布局。控件并进行合理布局。

对话框在创建时会收到对话框在创建时会收到 WM_INITDIALOGWM_INITDIALOG

的消息,响应该消息的事件处理函数为的消息,响应该消息的事件处理函数为OnInitDialog(),OnInitDialog(), 其作用是对话框初始化其作用是对话框初始化

• 对话框类

开发人员可以为每个对话框开发人员可以为每个对话框定义一个派生定义一个派生 CDialogCDialog

的新类用来实现为对话的新类用来实现为对话框指定的特殊功能框指定的特殊功能

Page 3: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 3

5.1 5.1 模态对话框模态对话框• 以排他方式工作的对话框。这类对话框出以排他方式工作的对话框。这类对话框出

现时,用户虽然可以看见应用程序的其他现时,用户虽然可以看见应用程序的其他对象,但在其关闭之前,输入焦点不能切对象,但在其关闭之前,输入焦点不能切换到拥有该对话框的应用程序的其他窗口换到拥有该对话框的应用程序的其他窗口中去,也就是不能实现同其他对象的交互。中去,也就是不能实现同其他对象的交互。

• 在在 MFCMFC 单文档项目中,可以通过对话框类单文档项目中,可以通过对话框类的成员函数的成员函数 DoModal()DoModal() 来创建并显示一个来创建并显示一个模态对话框。模态对话框。

Page 4: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 4

创建模态对话框的流程创建模态对话框的流程(( 11 )创建一个)创建一个 MFCMFC 单文档项目,命名为“单文档项目,命名为“ ModelDialog”ModelDialog”

(( 22 )切换到“资源视图”,右键单击“)切换到“资源视图”,右键单击“ ModelDialog”ModelDialog” 。。右键菜单中选择“添加” →“资源” →“右键菜单中选择“添加” →“资源” →“ Dialog”Dialog” ;;

(( 33 )选择“)选择“ Dialog”Dialog” ,单击“新,单击“新建”建” ;;

此时屏幕上会出现一个对话框模此时屏幕上会出现一个对话框模板;板;

(( 44 )双击对话框模板,在“)双击对话框模板,在“ MFCMFC类向导”窗口中为新添加的对话框类向导”窗口中为新添加的对话框资源声明一个派生于资源声明一个派生于 CDialogCDialog 的类的类CModel;CModel;

(( 55 )单击“完成”;)单击“完成”;

Page 5: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 5

对话框模板

Page 6: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 6

新派生的类

基类

Page 7: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 7

创建模态对话框的流程(续)创建模态对话框的流程(续)(( 66 )切换到“解决方案资源管理器”;)切换到“解决方案资源管理器”;(( 77 )双击打开“)双击打开“ ModelDialog.hModelDialog.h”” ,添加 “,添加 “ #include “M#include “M

odel.h”odel.h” 的包含语名的包含语名 ;;

(( 88 )打开“)打开“ ModelDialog.cppModelDialog.cpp”” 文件,找到应用程序类的文件,找到应用程序类的初始化函数初始化函数 BOOL CModelDialogApp::InitInstance()BOOL CModelDialogApp::InitInstance() ,,在初始化函数中添加创建和显示模态对话框的代码。(见在初始化函数中添加创建和显示模态对话框的代码。(见下页图);下页图);

(( 99 )调试并运行程序。)调试并运行程序。

Page 8: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 8

Page 9: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 9

说明:成员函数说明:成员函数 DoModal() DoModal() 用来生成一个模态对话框用来生成一个模态对话框• CPropertySheet::DoModal CPropertySheet::DoModal //// 所属的类所属的类• virtual int DoModal(); virtual int DoModal(); //// 是一个虚函数是一个虚函数• 返回值: 返回值: • 如果函数生成成功则返回如果函数生成成功则返回 IDOKIDOK 或或 IDCANCELIDCANCEL ;否则返回;否则返回 00

或或 -1-1 。如果此属性表是作为一个向导(参见。如果此属性表是作为一个向导(参见 SetWizardModSetWizardModee )建立的,)建立的, DoModalDoModal 返回返回 ID_WIZFINISHID_WIZFINISH 或或 IDCANCELIDCANCEL 。。

• 说明: 说明: • 此成员函数用来显示一个模态对话框。其返回值对应于用来关此成员函数用来显示一个模态对话框。其返回值对应于用来关

闭对话框的控件的闭对话框的控件的 IDID 。此函数返回后,。此函数返回后, WindowsWindows 响应这个响应这个对话框,所有的属性页都会被销毁。而这些对象本身仍然存在。对话框,所有的属性页都会被销毁。而这些对象本身仍然存在。通常,在通常,在 DoModalDoModal 返回返回 IDOKIDOK 之后可以从之后可以从 CPropertyPageCPropertyPage对象检取数据。 对象检取数据。

Page 10: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 10

5.2 5.2 非模态对话框非模态对话框• 非排他方式工作的对话框为非模态对话框。在非模态对话非排他方式工作的对话框为非模态对话框。在非模态对话

框出现时,用户仍然可以实现与应用程序其他对象的交互。框出现时,用户仍然可以实现与应用程序其他对象的交互。• 要生成一个非模态对话框,需调用要生成一个非模态对话框,需调用 CDialogCDialog 类的类的 Create()Create()

函数 和函数 和 CWndCWnd 类的类的 ShowWindow() ShowWindow() 函数来实现。函数来实现。

• Create()Create() 函数说明如下:函数说明如下:• Virtural BOOL Create(LPCTSTR lpszTemplateName,Virtural BOOL Create(LPCTSTR lpszTemplateName,

CWnd* pParentWnd=NULL);CWnd* pParentWnd=NULL);

• Virtural BOOL Create(UNIT nIDTemplate, CWnd* pPaVirtural BOOL Create(UNIT nIDTemplate, CWnd* pParentWnd=NULL);rentWnd=NULL);

• 两种形式中,参数两种形式中,参数 lpszTemplateNamelpszTemplateName 和和 nIDTemplatenIDTemplate分别指明所使用的对话框模板资源的名字和分别指明所使用的对话框模板资源的名字和 IDID 值,参数值,参数pParentWndpParentWnd 则指向该对话框的父窗体对象。则指向该对话框的父窗体对象。

Page 11: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 11

ShowWindow()ShowWindow() 函数说明如下:函数说明如下:• BOOL ShowWindow(int nCmdShow);BOOL ShowWindow(int nCmdShow);• 该函数作用:为窗口设置可见的状态。其中参数该函数作用:为窗口设置可见的状态。其中参数 nCmdShownCmdShow 的取值的取值

规定了当前窗口将以何种方式被显示。其取值和含义如下表:规定了当前窗口将以何种方式被显示。其取值和含义如下表:

nCmdShownCmdShow 可取 值可取 值 含 义含 义SW_HIDESW_HIDE 隐藏窗口,并将活动权交给其他窗体隐藏窗口,并将活动权交给其他窗体SW_MINIMIZESW_MINIMIZE 最小化窗口,并激活位于系统列表最前端的窗体最小化窗口,并激活位于系统列表最前端的窗体SW_RESTORESW_RESTORE 激活并显示窗口激活并显示窗口SW_SHOWSW_SHOW 激活窗口,并以当前位置和大小显示激活窗口,并以当前位置和大小显示SW_SHOWMAXMIZEDSW_SHOWMAXMIZED 激活窗口,并以最大化方式显示激活窗口,并以最大化方式显示SW_SHOWMINIMIZEDSW_SHOWMINIMIZED 激活窗口,并以图标形式显示激活窗口,并以图标形式显示SW_SHOWMINNOACTIVESW_SHOWMINNOACTIVE 保持窗口的当前状态,并以图标方式显示保持窗口的当前状态,并以图标方式显示SW_SHOWNASW_SHOWNA 令窗口以当前的状态显示令窗口以当前的状态显示SW_SHOWNOACTIVATESW_SHOWNOACTIVATE 保持窗口的当前状态,并令其以最近的位置和大小保持窗口的当前状态,并令其以最近的位置和大小

显示显示SW_SHOWNORMALSW_SHOWNORMAL 激活并显示窗口,如果窗口被最大化或最小化,激活并显示窗口,如果窗口被最大化或最小化, WW

insowsinsows 会将其恢复到原始的大小和位置。会将其恢复到原始的大小和位置。

Page 12: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 12

创建并显示一个非模态对话框的步骤:创建并显示一个非模态对话框的步骤:(( 11 )创建一个)创建一个 MFCMFC 单文档项目,命名为“单文档项目,命名为“ UnModalDialog”UnModalDialog”

(( 22 )切换到“资源视图”,右键单击“)切换到“资源视图”,右键单击“ UnModalDialog”UnModalDialog” 。右。右键菜单中选择“添加” →“资源” →“键菜单中选择“添加” →“资源” →“ Dialog”Dialog” ;;

(( 33 )选择“)选择“ Dialog”Dialog” ,单击“新建”, 此时屏幕上会出现一个,单击“新建”, 此时屏幕上会出现一个对话框模板;对话框模板;

(( 44 )双击对话框模板,在“)双击对话框模板,在“ MFCMFC 类向导”窗口中为新添加的类向导”窗口中为新添加的对话框资源声明一个派生于对话框资源声明一个派生于 CDialogCDialog 的类的类 CUnModel;CUnModel;

(( 55 )单击“完成”;)单击“完成”;(( 66 )切换到“解决方案资源管理器”;)切换到“解决方案资源管理器”;(( 77 )双击打开“)双击打开“ UnUnModModaalDialog.hlDialog.h”” ,添加包含对话框头文件,添加包含对话框头文件

的语句的语句 #include “UnModel.h” ;#include “UnModel.h” ;

并在此文件的并在此文件的 class CUnModalDialogApp : public class CUnModalDialogApp : public CWinAppCWinApp 下的下的 publicpublic 中添加成员说明语句:中添加成员说明语句: CUnModel *dlg;CUnModel *dlg;

Page 13: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 13

添加的包含语句

添加的说明语句

Page 14: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 14

(( 88 )双击打开“)双击打开“ UnUnModelDialog.cppModelDialog.cpp”” 文件,在文件,在CUnModalDialogApp::CUnModalDialogApp()CUnModalDialogApp::CUnModalDialogApp() 函数中函数中添加对添加对 dlgdlg 初始化的语句初始化的语句 : dlg=NULL;: dlg=NULL;

添加代码

Page 15: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 15

(( 99 )找到应用程序类的初始化函数)找到应用程序类的初始化函数BOOL CBOOL CUnUnModelDialogApp::InitInstance()ModelDialogApp::InitInstance() ,在初始化函,在初始化函数中添加创建和显示非模态对话框的代码。(见下页图);数中添加创建和显示非模态对话框的代码。(见下页图);

…………////此处代码省略,下面是添加的代码此处代码省略,下面是添加的代码

Page 16: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 16

…………////此处代码省略此处代码省略

…… ……////下面方框内是添加的代码,注意添加位置下面方框内是添加的代码,注意添加位置

Page 17: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 17

(( 1010 )调试运行结果,可看出当非模态)调试运行结果,可看出当非模态 DialogDialog 对对话框出现时,其它对话框仍然可以操作。话框出现时,其它对话框仍然可以操作。

Page 18: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 18

5.3 5.3 图形界面图形界面• ““ 图形界面”图形界面” GUIGUI (( Graphical User InterfaceGraphical User Interface ,简称 ,简称

GUIGUI ,又称图形用户接口)是指采用图形方式显示的计算,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。 图形界面对于用户来说在视觉上更易于接受。

• GUIGUI (图形界面)提供给用户以鼠标点击按钮方式进行操(图形界面)提供给用户以鼠标点击按钮方式进行操作,很直观。过去作,很直观。过去 DOSDOS环境下只能输入命令的界面叫环境下只能输入命令的界面叫 CLCLI (Command line User Interface ) I (Command line User Interface ) ,称为命令行模式用,称为命令行模式用户界面。 户界面。

• GUIGUI 常读做“常读做“ goo-ee” goo-ee” 。。• GUI GUI 设计需结合计算机科学、美学、心理学、行为学及实设计需结合计算机科学、美学、心理学、行为学及实际应用领域需求分析,强调人—机—环境三者作为一个系际应用领域需求分析,强调人—机—环境三者作为一个系统进行总体设计。 统进行总体设计。

• 图形界面设计的目的是优化产品的性能,使操作更人性化,图形界面设计的目的是优化产品的性能,使操作更人性化,减轻使用者的认知负担。 减轻使用者的认知负担。

• 有了有了 GUIGUI ,极大地方便了非专业用户的使用。人们从此不,极大地方便了非专业用户的使用。人们从此不再需要死记硬背大量的命令,取而代之的是通过窗口、菜再需要死记硬背大量的命令,取而代之的是通过窗口、菜单、按键等方式来方便地进行操作。单、按键等方式来方便地进行操作。

Page 19: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 19

GUIGUI 的组成 的组成 • 桌面:桌面:桌面是桌面是界面中最底层,有时也指包括窗口、文件浏览器在内的“桌界面中最底层,有时也指包括窗口、文件浏览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。桌面与既存的文件夹构成里面相违背,所以要以特殊位置的文件夹的参照形面与既存的文件夹构成里面相违背,所以要以特殊位置的文件夹的参照形式来定义内容。比如在微软公司的式来定义内容。比如在微软公司的 Windows XPWindows XP 系统中,各种用户的桌系统中,各种用户的桌面内容实际保存在系统盘(默认为面内容实际保存在系统盘(默认为 CC 盘):盘): \Documents and Settings\\Documents and Settings\[[ 用户名用户名 ]\]\桌面 文件夹里。 桌面 文件夹里。

• 墙纸:墙纸:即桌面背景。可以设置为各种图片和各种附件,成为视觉美观的重即桌面背景。可以设置为各种图片和各种附件,成为视觉美观的重要因素之一。要因素之一。

• 视窗视窗 // 窗体窗体 // 窗口:窗口:应用程序为使用数据而在图形用户界面中设置的基本应用程序为使用数据而在图形用户界面中设置的基本单元。用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。单元。用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。 通常在窗口四周设有菜单、图标,数据放在中央。

根据各种数据根据各种数据 // 应用程序的内容,窗口设有标题栏,并设有最大化、最小应用程序的内容,窗口设有标题栏,并设有最大化、最小化(隐藏窗口,并非消除数据)、最前面、缩进(仅显示标题栏)等动作化(隐藏窗口,并非消除数据)、最前面、缩进(仅显示标题栏)等动作按钮。按钮。

• 单一文件界面:单一文件界面:在窗口中,一个数据在一个窗口内完成的方式。在这种在窗口中,一个数据在一个窗口内完成的方式。在这种情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数据,将相应生成新的窗口。因此窗口数量多,管理复杂。用数据,将相应生成新的窗口。因此窗口数量多,管理复杂。

• 多文件界面:多文件界面:在一个窗口之内进行多个数据管理的方式。这种情况下,在一个窗口之内进行多个数据管理的方式。这种情况下,窗口的管理简单化,但是操作变为双重管理。窗口的管理简单化,但是操作变为双重管理。

Page 20: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 20

GUIGUI 的组成的组成• 标签:标签:多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并

排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。 排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。 上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多是单文上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多是单文

件界面,所以无所谓单一件界面,所以无所谓单一 //多文件界面的称呼问题。多文件界面的称呼问题。• 菜单:菜单:将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面

的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。重要程度的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。重要程度一般是从左到右,越往右重要度越低。命定的层次根据应用程序的不同而不同,一般是从左到右,越往右重要度越低。命定的层次根据应用程序的不同而不同,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。 最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。

• 即时菜单:即时菜单:又称功能表。与应用程序准备好的层次菜单不同,在菜单栏以外的地又称功能表。与应用程序准备好的层次菜单不同,在菜单栏以外的地方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置的不同,方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置的不同,菜单内容即时变化,列出所指示的对象目前可以进行的操作。菜单内容即时变化,列出所指示的对象目前可以进行的操作。

• 图标:图标:显示在管理数据的应用程序中的数据,或者显示应用程序本身。 显示在管理数据的应用程序中的数据,或者显示应用程序本身。 • 数据管理程序:数据管理程序:即在文件夹中用户数据的管理、进行特定数据管理的程序的情况即在文件夹中用户数据的管理、进行特定数据管理的程序的情况

下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联的应用程序的图案。另外,点击数据的图标,一般可以之间完成启动相关应用程的应用程序的图案。另外,点击数据的图标,一般可以之间完成启动相关应用程序以后再显示数据本身这两个步骤的工作。 序以后再显示数据本身这两个步骤的工作。

• 应用程序的图标:应用程序的图标:只能用于启动应用程序。只能用于启动应用程序。• 按钮:按钮:菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按钮。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过钮。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。 率是不一样的,因此这种配置一般都是可以由用户自定义编辑。

Page 21: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 21

GUI GUI 应用领域和赛事 应用领域和赛事 • 手机通讯移动产品 手机通讯移动产品 • 电脑操作平台 电脑操作平台 • 软件产品 软件产品 • PDAPDA产品 产品 • 数码产品 数码产品 • 车载系统产品 车载系统产品 • 智能家电产品 智能家电产品 • 游戏产品 游戏产品 • 产品的在线推广 产品的在线推广

• 国际性竞赛国际性竞赛• 国际上每两年举行一次国际上每两年举行一次 GUIGUI 锦标赛的的界面竞赛。锦标赛的的界面竞赛。

“图形用户界面大奖赛” 前身是“图形用户界面奥林“图形用户界面大奖赛” 前身是“图形用户界面奥林匹克”,五大匹克”,五大 ITIT社区联合主办,属于微软认证的金牌社区联合主办,属于微软认证的金牌合作计划。合作计划。 20082008 年大赛共有世界各国 年大赛共有世界各国 26 26 个团队参加,个团队参加,参与 参与 9 9 个项目,争夺共计一万二千美元的奖金(包括 个项目,争夺共计一万二千美元的奖金(包括 X-Box 360X-Box 360 、、 Nvidia 显卡在内的实物奖品)。比赛集显卡在内的实物奖品)。比赛集中在桌面背景(中在桌面背景( WallpaperWallpaper )、桌面图标()、桌面图标( IconIcon )、)、桌面主题(桌面主题( Visual StyleVisual Style )三个方面,而比赛项目的类)三个方面,而比赛项目的类型则分为“最实用”(型则分为“最实用”( Most UsableMost Usable )、“最具原创)、“最具原创性”(性”( Most OriginalMost Original )、“综合最佳”()、“综合最佳”( Best OveralBest Overal

ll )。 )。 • 2008GUI2008GUI 锦标赛我国获奖情况 锦标赛我国获奖情况 • 我国设计师获得了我国设计师获得了 11金金 33银银 33铜的好成绩。 铜的好成绩。 • 我国设计师我国设计师 iconboyiconboy 的作品的作品 Non-Mainstream2008 Non-Mainstream2008 获得获得

了综合最佳桌面图标奖二等奖(了综合最佳桌面图标奖二等奖( Best Overall Icon PackBest Overall Icon Pack

age Winners 2nd Placeage Winners 2nd Place ))• 最实用桌面图标奖二等奖(最实用桌面图标奖二等奖( Most Usable Icon Package Most Usable Icon Package

Winners 2nd PlaceWinners 2nd Place )。 )。

Page 22: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 22

• 控件特指程序运行时有一个图形化表示的组件,它可以被控件特指程序运行时有一个图形化表示的组件,它可以被添加到窗体或对话框上以实现人机交互。如字体选择下拉添加到窗体或对话框上以实现人机交互。如字体选择下拉框、工具栏、滚动条、状态栏 框、工具栏、滚动条、状态栏

• WindowsWindows 窗体是一种用于创建程序的窗体是一种用于创建程序的 GUIGUI 。窗体可以是。窗体可以是一个对话框、一个对话框、 SDISDI 窗口、窗口、 MDIMDI 窗口。窗口。

控件名称控件名称 对应的对应的 MFCMFC 类类

静态控件静态控件 CStaticCStatic

下压控件下压控件 CButtonCButton

单选按钮单选按钮 CButtonCButton

复选框复选框 CButtonCButton

编辑框控件编辑框控件 CEditCEdit

列表框控件列表框控件 CListBoxCListBox

组合框控件组合框控件 CComboBoxCComboBox

滚动条控件滚动条控件 CScrollBarCScrollBar

列表控件列表控件 CListCtrlCListCtrl

TabTab 控件控件 CTabCtrlCTabCtrl

5.4 5.4 常用控件常用控件

• VC++VC++ 中工具箱内有多种类中工具箱内有多种类型的控件和组件。型的控件和组件。

• 在在 MFCMFC 中,每一种控件都有其中,每一种控件都有其对应的对应的 MFCMFC 控件类,而所有的控件类,而所有的控件类都派生于控件类都派生于 CWndCWnd 类,通过类,通过控件类开发人员可以很容易地实控件类开发人员可以很容易地实现对控件的控制和对控件事件和现对控件的控制和对控件事件和处理。处理。

• MFCMFC 中所包含的控件类如表中所中所包含的控件类如表中所示。示。

Page 23: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 23

使用控件的步骤使用控件的步骤( 1 )准备对话框:对话框相当于控件的容器

( 2 )添加控件:从工具箱中将控件添加到对话框上;

( 3 )设置控件的属性。通过属性可以定义控件的名称、样式、大小、位置、字体颜色等。

( 4 )映射控制变量或对象:在程序中,控件必须映射为一个值变量 (val

ue) 或控件对象 (control) 。这样程序运行时就可以象控制变量一样控制控件了。例如一个文本编辑框可以映射为 CString 值或 CEdit 对象 ,

CString 是一个字符串,而 CEdit 是 MFC 为文本编辑框专门准备的控件类。

( 5 )编写响应控件事件函数:控件都是有事件的,如按下鼠标左键或右键,或选择“确定”或“取消”等。应编制好响应函数。

( 6 )调用控件方法:既然控件可以映射成对象变量,就可以用调用其成员函数(或方法, method )来完成特定的功能 。

Page 24: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 24

案例:静态控件的使用案例:静态控件的使用• 静态控件包括静态控件包括静态文本控件静态文本控件和和静态静态 picturepicture 控件控件两种,用于两种,用于

显示要在对话框中出现的文本和图片。显示要在对话框中出现的文本和图片。• 往对话框中添加静态控件时,控件的所有往对话框中添加静态控件时,控件的所有 IDID 都被自动设置都被自动设置

成成 IDC_STATICIDC_STATIC ,因此,如果要为静态控件添加控制变量或,因此,如果要为静态控件添加控制变量或事件处理函数,必须重新指定一个唯一的事件处理函数,必须重新指定一个唯一的 IDID 值。修改值。修改 IDID 值值可在静态控件的“属性”窗口中进行。可在静态控件的“属性”窗口中进行。

• 使用静态控件的流程:使用静态控件的流程: (( 11 )创建一个单文档工程)创建一个单文档工程 StaticControlStaticControl 并添加对话框;并添加对话框; (( 22 )创建一个非模态对话框并添加静态控件并设置静态文)创建一个非模态对话框并添加静态控件并设置静态文

本控件及静态本控件及静态 picturepicture 控件的属性,为控件映射控制变量。控件的属性,为控件映射控制变量。 (( 33 )重载对话框类的)重载对话框类的 OnInitDialog()OnInitDialog() 函数,在函数中为函数,在函数中为 pp

ictureicture 控件加载位图。控件加载位图。

Page 25: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 25

具体步骤:具体步骤:(( 11 )创建一个单文档工程)创建一个单文档工程 StaticControlStaticControl ;;(( 22 )在资源视图中用右键菜单“添加”)在资源视图中用右键菜单“添加”“资源”向“资源”向 MFCMFC

工程中添加一个对话框资源,屏幕上会出现对话框模板;工程中添加一个对话框资源,屏幕上会出现对话框模板;(( 33 )双击对话框模板,定义一个派生类“)双击对话框模板,定义一个派生类“ CMyDialog”;CMyDialog”;

(( 44 )返回“解决方案资源管理器”窗口,双击打开主头文)返回“解决方案资源管理器”窗口,双击打开主头文件“件“ StaticControl.hStaticControl.h”” ,添加包含定义对话框的头文件,添加包含定义对话框的头文件MyDialog.hMyDialog.h 的语句“的语句“ #include ”MyDialog.h“#include ”MyDialog.h“ ” ” ,并定,并定义一个指针对象义一个指针对象 CMyDialog *CMyDialog *ddlg;lg; 见图所示。见图所示。

Page 26: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 26

定义指针变量

添加包含语句

Page 27: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 27

(( 44 )双击打开应用程序“)双击打开应用程序“ StaticControl.cppStaticControl.cpp”” ,在初始化,在初始化函数“函数“ BOOL CStaticControlApp::InitInstance()BOOL CStaticControlApp::InitInstance()”” 中找中找到下面位置后添加语句。 完成非模态对话框的创建。见到下面位置后添加语句。 完成非模态对话框的创建。见下图所示。下图所示。

添加

Page 28: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 28

(( 55 )切换到资源视图,右击工程项目名“)切换到资源视图,右击工程项目名“ StaticControl” →“StaticControl” →“ 添加” 添加” →“资源”,向单文档工程中导入一个位图资源→“资源”,向单文档工程中导入一个位图资源 BitmapBitmap 并新建一个并新建一个DialogDialog 资源?资源?,这个位图资源可以是事先放好在某个文件中的位图,这个位图资源可以是事先放好在某个文件中的位图文件。这里导入了一个衬衣文件。这里导入了一个衬衣 .bmp.bmp 位图。如图所示。位图。如图所示。

Page 29: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 29

Page 30: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 30

(( 66 )展开资源视图树形结构,双击新添加的类模)展开资源视图树形结构,双击新添加的类模板板 IDD_DIALOG1IDD_DIALOG1 ,打开,打开 DialogDialog 模板。模板。

Page 31: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 31

(( 77 )从工具箱中向对话框模板添)从工具箱中向对话框模板添加一个静态文本框控件加一个静态文本框控件 StaticTStaticText ext 和 一个和 一个 Pictrue Control Pictrue Control 控件,见图所示。控件,见图所示。

(( 88 )选择“视图” →“其他窗口” )选择“视图” →“其他窗口” →“属性窗口”,打开属性窗口。→“属性窗口”,打开属性窗口。

Page 32: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 32

(( 99 )选择“静态文本”框,在“静态文本”框的“)选择“静态文本”框,在“静态文本”框的“ CaptiCaption”on” 属性中,将“属性中,将“ Caption”Caption” 的值“的值“静态静态”改为“”改为“在静态在静态控件控件 picturepicture 中显示一幅位图中显示一幅位图”。”。

(( 1010 )选中)选中 picturepicture 控件,由于所有静态变量控件的控件,由于所有静态变量控件的 IDID 都都被设置成了被设置成了 IDC_STATICIDC_STATIC ,因此,如果要为静态控件添,因此,如果要为静态控件添加控制变量或事件处理函数,必须修改加控制变量或事件处理函数,必须修改 IDID 值。可在静态值。可在静态控件的“属性”窗口中进行修改。控件的“属性”窗口中进行修改。

(( 1111 )这里将其)这里将其 IDID 值修改为“值修改为“ IDC_STATIC1”IDC_STATIC1” ,将其“,将其“ TType”ype” 属性值选择修改为“属性值选择修改为“ Bitmap”Bitmap” ,即位图。,即位图。

Page 33: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 33

(( 1212 )右键单击)右键单击 PicturePicture控件,选择“添加变控件,选择“添加变量”。量”。

(( 1313 )通过添加成员变量向导对话框,)通过添加成员变量向导对话框, PiPicturecture 控件,选择“添加变量”控件,选择“添加变量” ,, 为为 PictPictureure 控件添加一个控制变量控件添加一个控制变量 m_picturem_picture 。。

• 单击“完成”。在单击“完成”。在 MyDialogMyDialog.h.h头文件头文件中,可看到对中,可看到对 m_picturem_picture 的定义。的定义。

Page 34: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 34

(( 1414 )用鼠标单击类的声明“)用鼠标单击类的声明“ class CMyDialog : public CDialogclass CMyDialog : public CDialog”” 中中的的 CMyDialogCMyDialog ,并单击右边属性窗口中的“重写”按钮,在下面的,并单击右边属性窗口中的“重写”按钮,在下面的列表中找到列表中找到 OnInitDialogOnInitDialog 并单击右边下拉菜单选择添加并单击右边下拉菜单选择添加 OnInitDialoOnInitDialog()g() 函数。操作后马上可看到头文件中出现了函数的声明语句。函数。操作后马上可看到头文件中出现了函数的声明语句。

(( 1515 )在)在 MyDialog.hMyDialog.h 头文件中定义一个头文件中定义一个 CBitmapCBitmap 类对象类对象 bitmap;bitmap;

定义对象

Page 35: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 35

(( 1616 )在)在 MyDialog.cppMyDialog.cpp 的的 OnInitDialog()OnInitDialog() 函数中,函数中,为为 picturepicture 控件添加加载位图的语句。控件添加加载位图的语句。

添加的语句添加的语句

Page 36: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 36

(( 1717 )单击“启动调试”按钮运行程序。可以看到在对话框中,静态)单击“启动调试”按钮运行程序。可以看到在对话框中,静态文本框显示了我们给出的一段文字,而文本框显示了我们给出的一段文字,而 picturepicture 控件则显示了我们控件则显示了我们加载的一幅位图图片。加载的一幅位图图片。

Page 37: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 37

归纳归纳• 控件可以通过 5 个部分进行描述: 1. ID (控件的标识,用于在程序中调用控件) 2. 控件实体(添加到对话框中的图形) 3. 控件变量() 4. 属性函数 5. 消息函数

• MFCMFC 中关联一个控件和变量的时候,可以选择是控件方式还是值方中关联一个控件和变量的时候,可以选择是控件方式还是值方式,如果是控件方式,那么就是这个变量就代表了控件,如果是值式,如果是控件方式,那么就是这个变量就代表了控件,如果是值方式,那么这个变量就代表了控件中显示的值。比如你说的静态控方式,那么这个变量就代表了控件中显示的值。比如你说的静态控件,可以与件,可以与 CStaticCStatic 类型的变量关联,也可以与类型的变量关联,也可以与 CStringCString 类型的变类型的变量关联。 所谓的关联,只是量关联。 所谓的关联,只是 MFCMFC 的一层封装而已,内部还是采用的一层封装而已,内部还是采用Windows SDKWindows SDK 来操作的。来操作的。

Page 38: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 38

可添加到项目中的资源可添加到项目中的资源• AcceleratorAccelerator :快捷键:快捷键• BitmapBitmap :位图:位图• CursorCursor :标尺:标尺• DialogDialog :对话框:对话框• HTMLHTML :网页:网页• IconIcon :图标:图标• MenuMenu :菜单:菜单• StingTabStingTab :字符表:字符表• ToolbarToolbar :工具条:工具条• VersionVersion :版本信息:版本信息

Page 39: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 39

可添加到对话框中控件可添加到对话框中控件下压按钮控件下压按钮控件

编辑按钮控件编辑按钮控件 复选框控件复选框控件

列表框控件列表框控件

单选按钮控件单选按钮控件

图片 控件图片 控件

垂直滚动条控件垂直滚动条控件

旋转 控件旋转 控件

热键控件热键控件

树结构 控件树结构 控件

水平滚动条控件水平滚动条控件

动画 控件动画 控件

日期时间选择控件日期时间选择控件

IPIP地址控件地址控件

自定义控件自定义控件

分离按钮控件分离按钮控件

命令按钮控件命令按钮控件

静态文本框控件静态文本框控件分组框控件分组框控件组合框控件组合框控件

滑块控件滑块控件

进度控件进度控件

列表控件列表控件

TabTab 键控件键控件

带标尺的编辑器控件带标尺的编辑器控件 月历控件月历控件

扩展组合框扩展组合框

超链接控件超链接控件

网络地址控件网络地址控件

Page 40: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 40

主要属性及含义:主要属性及含义:• Accept FileAccept File :指定控件要接受拖放的文件:指定控件要接受拖放的文件• CaptionCaption (标题):显示在按钮上的文本(标题):显示在按钮上的文本• BitmapBitmap :指定控件显示位图而非文本:指定控件显示位图而非文本• AccleratorAcclerator :快捷键编辑器:快捷键编辑器• Client EdgeClient Edge :指定控件为带凹陷性边缘的边框:指定控件为带凹陷性边缘的边框• Default ButtonDefault Button :指定控件是对话框默认的按钮:指定控件是对话框默认的按钮• DisableDisable :指定最初禁用控件:指定最初禁用控件• FlatFlat :指定控件的可视外观是二维的:指定控件的可视外观是二维的• GroupGroup :指定基于:指定基于 TabTab 键顺序的一组控件中的第一个控件键顺序的一组控件中的第一个控件• Help IDHelp ID :给控件分配基于资源:给控件分配基于资源 IDID 的帮助的帮助 IDID

• Horizontal AlignmentHorizontal Alignment :指定水平对齐方式:指定水平对齐方式• 可选择其中一种可选择其中一种

默认值默认值Left---Left---左对齐左对齐Right---Right--- 右对齐右对齐Center—Center— 居中居中

Page 41: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 41

• 3D Look 3D Look :是否具有:是否具有 3D3D效果;效果;• Absolute Align: Absolute Align: 绝对位置;绝对位置;• IconIcon :指定控件显示为图标而非文本;:指定控件显示为图标而非文本;• IDID :指定控件的标识符;:指定控件的标识符;• Modal FrameModal Frame :指定控件将具有双边框;:指定控件将具有双边框;• MultilineMultiline :指定控件文本太长时可以折为多行显示;:指定控件文本太长时可以折为多行显示;• NotifyNotify :指定控件向父级发送焦点通知;:指定控件向父级发送焦点通知;• Owner DrawOwner Draw :指定按钮为所有者描述的按钮;:指定按钮为所有者描述的按钮;• Right Align TextRight Align Text :指定控件的文本右对齐;:指定控件的文本右对齐;• Left Align TextLeft Align Text :指定控件的文本左对齐;:指定控件的文本左对齐;• Static EdgeStatic Edge :指定控件具有三维边框;:指定控件具有三维边框;• TabStopTabStop :指定用户可以用:指定用户可以用 TabTab 键移动光标到该控件;键移动光标到该控件;• TransParentTransParent :指定控件将具有透明背景:指定控件将具有透明背景

Page 42: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 42

• Horizontal AlignmentHorizontal Alignment :指定水平对齐方式:指定水平对齐方式• 可选择其中一种可选择其中一种

• VisableVisable :指定控件最初可见;:指定控件最初可见;• Tri-StateTri-State :指定复选框是三种状态;:指定复选框是三种状态;• Push LikePush Like :指定控件的外观和行为与普通控件一样;:指定控件的外观和行为与普通控件一样;• Auto HScrollAuto HScroll :指定编辑控件中用户输入的文本水平滚动;:指定编辑控件中用户输入的文本水平滚动;• Lower CaseLower Case :编辑控件中输入的字符全部转换为小写字符;:编辑控件中输入的字符全部转换为小写字符;• Upper CaseUpper Case :编辑控件中输入的字符全部转换为大写字符;:编辑控件中输入的字符全部转换为大写字符;• No Hide SeletionNo Hide Seletion :没有焦点时也显示某选定内容;:没有焦点时也显示某选定内容;• NumberNumber :指定编辑控件中只能输入数字;:指定编辑控件中只能输入数字;• OEM ConvertOEM Convert :将输入到编辑框中的文本转换成:将输入到编辑框中的文本转换成 OEMOEM 字符字符集( 集( OEMOEM 字符集有好几套,分别对应不同的字符集有好几套,分别对应不同的 PCPC ))

默认值默认值Bottom---Bottom---底部对齐底部对齐Top---Top--- 顶部对齐顶部对齐Center—Center— 居中对齐居中对齐

Page 43: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 43

ASCIIASCII 码字符集码字符集

OEMOEM 字符集字符集

Page 44: 计算机高级程序设计 第五章

西南交通大学经济管理学院:何耀琴 44

主要属性及含义:主要属性及含义:• PasswordPassword :对输入到编辑框中去的字符全显示为“ :对输入到编辑框中去的字符全显示为“ * ”;* ”;• Read OnlyRead Only :禁止用户输入文本到编辑框;:禁止用户输入文本到编辑框;• Want ReturnWant Return :允许编辑框接受:允许编辑框接受 EnterEnter 键;键;• No Integral HeightNo Integral Height :指定组合框的大小正好是应用程序指定的大小;:指定组合框的大小正好是应用程序指定的大小;• Right To Left Reading OrderRight To Left Reading Order :指定从右到左的阅读顺序;:指定从右到左的阅读顺序;• SortSort :对添加到列表框中的字符串进行自动排序;:对添加到列表框中的字符串进行自动排序;• TypeType :类型(简单的:类型(简单的 --Simple--Simple 、下拉、下拉 --DropDown--DropDown 、下拉列表—、下拉列表— DrDr

op Listop List )) ;;• 数据:指定用来填充控件的数据,数据之间用分号分隔;数据:指定用来填充控件的数据,数据之间用分号分隔;