《对话框和控》PPT课件

上传人:xt****7 文档编号:181328400 上传时间:2023-01-12 格式:PPT 页数:90 大小:393KB
收藏 版权申诉 举报 下载
《对话框和控》PPT课件_第1页
第1页 / 共90页
《对话框和控》PPT课件_第2页
第2页 / 共90页
《对话框和控》PPT课件_第3页
第3页 / 共90页
资源描述:

《《对话框和控》PPT课件》由会员分享,可在线阅读,更多相关《《对话框和控》PPT课件(90页珍藏版)》请在装配图网上搜索。

1、10.1 10.1 对话框和控件的基本概念对话框和控件的基本概念10.2 10.2 使用使用AppWizardAppWizard开发开发MFCMFC应用程序应用程序10.3 10.3 基本控件基本控件10.4 10.4 通用对话框通用对话框习题习题10.1.1 10.1.1 对话框的基本概念对话框的基本概念在在MFCMFC中,对话框的功能被封装在了中,对话框的功能被封装在了CDialogCDialog类中,类中,CDialogCDialog类是类是CWndCWnd类的派生类。类的派生类。有模式对话框有模式对话框垄断了用户的输入,当一个有模式对垄断了用户的输入,当一个有模式对话框打开时,用户只能

2、与该对话框进行交互,而其话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。它用户界面对象收不到输入信息。无模式对话框无模式对话框类似普通的类似普通的WindowsWindows窗口,在无模式窗口,在无模式对话框打开时,用户可以同时打开其它窗口对象,对话框打开时,用户可以同时打开其它窗口对象,操作完毕后,又可用鼠标或其它方式激活该窗口。操作完毕后,又可用鼠标或其它方式激活该窗口。10.1.2 10.1.2 控件的基本概念控件的基本概念 控件控件(Control components)Control components)是独立的小部件,是独立的小部件,是现成的程序组件,可

3、以独立运行并完成一定的功是现成的程序组件,可以独立运行并完成一定的功能。能。在可视化编程中,控件的外观和功能由其属性在可视化编程中,控件的外观和功能由其属性(property)property)规定。规定。所有的控件都是由所有的控件都是由CWndCWnd类派生的类对象,因此类派生的类对象,因此它们均有和它们均有和CWndCWnd类似的属性。每个控件均有一个标类似的属性。每个控件均有一个标识符(识符(IDID),),在程序中可以通过这个标识符对相应在程序中可以通过这个标识符对相应的控件进行操作。的控件进行操作。表表10.110.1介绍了一些常用的控件及其对应的控件介绍了一些常用的控件及其对应的控

4、件类。类。10.2.1 10.2.1 生成基于对话框的生成基于对话框的MFCMFC应用程序框架应用程序框架10.2.2 10.2.2 使用使用AppWizardAppWizard工具生成的程序和改工具生成的程序和改 变了的工程工作区变了的工程工作区10.2.1 10.2.1 生成基于对话框的生成基于对话框的MFCMFC应用程序框应用程序框架架(1)(1)启动启动MFC AppWizardMFC AppWizard (2)(2)MFC AppWizard-Step 1MFC AppWizard-Step 1对话框:选择应用对话框:选择应用程序的类型和语言。程序的类型和语言。(3)(3)MFC A

5、ppWizard-Step 2 of 4MFC AppWizard-Step 2 of 4对话框:询对话框:询问了三个问题并要求输入一个标题。问了三个问题并要求输入一个标题。(4)(4)MFC AppWizard-Step 3 of 4MFC AppWizard-Step 3 of 4对话框:询对话框:询问了三个问题。问了三个问题。(5)(5)MFC AppWizard-Step 4 of 4MFC AppWizard-Step 4 of 4对话框:显对话框:显示示AppWizardAppWizard为应用程序生成的派生类的一些情为应用程序生成的派生类的一些情况。况。(6)(6)编译运行。编译

6、运行。图10.11 基本控件控件的选择控件的选择静态文本静态文本组框组框复选框复选框组合框组合框水平滚动条水平滚动条旋转按钮旋转按钮滑动条滑动条列表视图列表视图标签标签复合编辑复合编辑月历月历用户定制工具用户定制工具静态图片静态图片编辑框编辑框按钮按钮单选框单选框列表框列表框垂直滚动条垂直滚动条进展条进展条热键热键树形视图树形视图动画动画日期选择日期选择IP地址地址组合框的扩展组合框的扩展常用控件类常用控件类控件名称控件名称MFC类类功能描述功能描述静态控件静态控件CStatic用来显示一些几乎固定不变的文字或图形用来显示一些几乎固定不变的文字或图形按钮按钮CButton用来产生某些命令或改变

7、某些选项,包括单选按钮、复选用来产生某些命令或改变某些选项,包括单选按钮、复选框和组框框和组框编辑框编辑框CEdit用于完成文本和数字的输入和编辑用于完成文本和数字的输入和编辑列表框列表框CListBox显示一个列表,让用户从中选取一个或多个项显示一个列表,让用户从中选取一个或多个项组合框组合框CComboBox是一个列表框和编辑框组合的控件是一个列表框和编辑框组合的控件滚动条滚动条CScrollBar通过滚动块在滚动条上的移动和滚动按钮来改变某些量通过滚动块在滚动条上的移动和滚动按钮来改变某些量进展条进展条CProgressCtrl用来表示一个操作的进度用来表示一个操作的进度滑动条滑动条CS

8、liderCtrl通过滑动块的移动来改变某些量,并带有刻度指示通过滑动块的移动来改变某些量,并带有刻度指示旋转按钮控件旋转按钮控件CSpinButtonCtrl带有一对反向箭头的按钮,单击这对按钮可增加或减少某带有一对反向箭头的按钮,单击这对按钮可增加或减少某个值个值日期时间控件日期时间控件CDateTimeCtrl用于选择指定的日期和时间用于选择指定的日期和时间图像列表图像列表CImageList一个具有相同大小的图标或位图的集合一个具有相同大小的图标或位图的集合标签控件标签控件CTabCtrl类似于一个笔记本的分隔器或一个文件柜上的标签,使用类似于一个笔记本的分隔器或一个文件柜上的标签,使

9、用它可以将一个窗口或对话框的相同区域定义为多个页面它可以将一个窗口或对话框的相同区域定义为多个页面控件的创建方法控件的创建方法控件的创建方法有两种:控件的创建方法有两种:在对话框模板中用编辑器指定控件:对话框是控在对话框模板中用编辑器指定控件:对话框是控件的父窗口。件的父窗口。编程方法:调用编程方法:调用MFC相应控件类的成员函数相应控件类的成员函数Create来创建,并在来创建,并在Create函数中指定控件的父函数中指定控件的父窗口指针。窗口指针。用编程方法添加控件用编程方法添加控件n将项目工作区切换到将项目工作区切换到ClassView页面,展开页面,展开C*Dlg类,右类,右击击C*D

10、lg类名,从快捷菜单中选择类名,从快捷菜单中选择Add Member Variable,增加,增加CButton类型的成员变量类型的成员变量m_btnWnd。n在项目工作区的在项目工作区的ClassView页面中,双击页面中,双击OnInitDialog函数名,在该函数中另外添加下列代码:函数名,在该函数中另外添加下列代码:(你好你好,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);/创建创建CFont*font=this-GetFont();/获取对话框的字体获取对话框的字体m_btnWnd.SetFont(fo

11、nt);/设置控件字体设置控件字体return TRUE;基本控件的共同属性基本控件的共同属性(1)(1)IDID属性属性用于指定控件的标识符,用于指定控件的标识符,WindowsWindows依靠依靠IDID来区分不同的控件。来区分不同的控件。(2)(2)CaptionCaption(标题)属性标题)属性对控件要实现的功能或对其它控件中显示的内容进行说明。对控件要实现的功能或对其它控件中显示的内容进行说明。如果控件标题中包含字符如果控件标题中包含字符&,则紧跟其后的字符在显示时会有,则紧跟其后的字符在显示时会有一条下划线,按一条下划线,按(Alt+Alt+带下划线的字符)带下划线的字符)组合

12、键,将触发控件被组合键,将触发控件被单击的事件或切换到相应的控件,若是单击的事件或切换到相应的控件,若是单选按钮单选按钮,则按,则按Alt+Alt+下划下划线字符将选择该按钮;若是线字符将选择该按钮;若是检查框检查框,则相当于对该检查框按空格,则相当于对该检查框按空格键;若是键;若是命令按钮命令按钮,将激活按钮命令;若是一个,将激活按钮命令;若是一个静态正文静态正文,则将,则将激活按激活按TabTab顺序紧随其后的下一个控件。顺序紧随其后的下一个控件。在使用时必须保证同一个窗口中不使用相同的组合键,这可在使用时必须保证同一个窗口中不使用相同的组合键,这可以 通 过 在 设 计 窗 口 中 单

13、击 鼠 标 右 键,选 中以 通 过 在 设 计 窗 口 中 单 击 鼠 标 右 键,选 中“C h e c k C h e c k Mnemonics”(Mnemonics”(检查记忆检查记忆)来进行检查。来进行检查。基本控件的共同属性基本控件的共同属性(3)(3)VisibleVisible属性属性:指定控件是否可见。:指定控件是否可见。(4)(4)DisableDisable属性属性:使控件被允许或禁止,一个禁止的控件呈:使控件被允许或禁止,一个禁止的控件呈灰色显示,不能接收任何输入或响应。灰色显示,不能接收任何输入或响应。(5)(5)TabstopTabstop属性属性按按Ctrl+D

14、Ctrl+D可以使可以使TabTab顺序显示出来,可以用鼠标来重新指定顺序显示出来,可以用鼠标来重新指定TabTab顺序,默认的顺序,默认的TabTab顺序是控件的创建次序。顺序是控件的创建次序。(6)(6)GroupGroup属性属性用来指定一组控件,用户可以用箭头在该组控件内移动,在同用来指定一组控件,用户可以用箭头在该组控件内移动,在同一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能有一个是选中的,如果一个控件具有有一个是选中的,如果一个控件具有GroupGroup属性,则这个控件属性,则这个控件以及按以及按TabTab顺序紧随

15、其后的所有控件都属于一组的,直到遇到顺序紧随其后的所有控件都属于一组的,直到遇到另一个有另一个有GroupGroup属性的控件为止。属性的控件为止。1 控件的消息及消息映射控件的消息及消息映射 应用程序创建一般控件或公共控件之后,当控件的状态发应用程序创建一般控件或公共控件之后,当控件的状态发生改变时,控件就会向其父窗口发送消息,这个消息称为生改变时,控件就会向其父窗口发送消息,这个消息称为“通知消息通知消息”。系统都会用一个系统都会用一个MSG结构来记录结构来记录,MSG具有下列结构:具有下列结构:typedef struct tagMSG HWND hwnd;/接收到消息的窗口句柄接收到消

16、息的窗口句柄 UINT message;/消息消息 WPARAM wParam;/消息的附加信息消息的附加信息 LPARAM lParam;/消息的附加信息消息的附加信息 DWORD time;/消息传送时的时间消息传送时的时间 POINT pt;/消息传送时,光标所在的屏幕坐标消息传送时,光标所在的屏幕坐标 MSG;1 控件的消息及消息映射控件的消息及消息映射n一般控件的通知消息是一条一般控件的通知消息是一条WM_COMMAND消息,消息,这条消息这条消息wParam参数的低位字中含有控件标识符,参数的低位字中含有控件标识符,wParam参数的高位字则为通知代码,参数的高位字则为通知代码,l

17、Param参数参数则是指向控件的句柄。则是指向控件的句柄。n有些控件的通知消息是一条有些控件的通知消息是一条WM_NOTIFY消息,这消息,这条消息的条消息的wParam参数是发送通知消息的控件的标识参数是发送通知消息的控件的标识符,符,lParam参数则是指向一个结构指针。参数则是指向一个结构指针。n不管是什么控件消息,一般都可以用不管是什么控件消息,一般都可以用MFC ClassWizard对它们加以映射。对它们加以映射。映射控件消息映射控件消息 在在MFC中,映射一个控件消息是非常简便的,如下面中,映射一个控件消息是非常简便的,如下面的过程是对新添加的按钮控件映射的过程是对新添加的按钮控

18、件映射BN_CLICKED(单击单击)消息。将项目工作区窗口切换到消息。将项目工作区窗口切换到ResourseView页面,双页面,双击击Dialog资源下的标识资源下的标识IDD_*_DIALOG,打开该对话框,打开该对话框资源模板。删除资源模板。删除“TODO:在这里设置对话控制。在这里设置对话控制。”控件,控件,添加一个按钮控件,保留其默认属性。如图所示。添加一个按钮控件,保留其默认属性。如图所示。4.1.2 控件的消息及消息映射控件的消息及消息映射1 控件的消息及消息映射控件的消息及消息映射 按快捷键按快捷键Ctrl+W,打开,打开MFC ClassWizard对话框,对话框,查看查看

19、“Class name”列表中是否选择了列表中是否选择了C*Dlg,在,在IDs列表中选择列表中选择IDC_BUTTON1,这是添加按钮后,系统,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在自动为此按钮设置的默认标识符,然后在Messages框框中选择中选择BN_CLICKED消息。消息。(4)单击单击Add Function按钮或双击按钮或双击BN_CLICKED消消息,出现息,出现“Add Member Function”对话框,在这里对话框,在这里可以输入成员函数的名称,系统默认的函数名为可以输入成员函数的名称,系统默认的函数名为OnButton1。1 控件的消息及消息映射控

20、件的消息及消息映射单击单击OK按钮,在按钮,在MFC ClassWizard的的“Member functions”列表中将列出新增加的成员函数。列表中将列出新增加的成员函数。在此成员函数中添加下列代码:在此成员函数中添加下列代码:void CEx_DlgCtrlsDlg:OnButton1()MessageBox(你按下了你按下了Button1按钮!按钮!);(6)编译并运行,编译并运行,当单击当单击Button1按钮时,就会执行按钮时,就会执行OnButton1函数函数,弹出一个消息对话框。这就是按钮,弹出一个消息对话框。这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类

21、消息的映射过程,其他控件的消息也可以类似操作。似操作。说明:说明:n不同资源对象(控件、菜单命令等)所产生的消息不同资源对象(控件、菜单命令等)所产生的消息是不同的。大致有三类消息是不同的。大致有三类消息:窗口消息、命令消息窗口消息、命令消息(WM_COMMAND)和控件消息。和控件消息。n一般不需要对对话框中的一般不需要对对话框中的OK(确定确定)与与CANCEL(取取消消)按钮进行消息映射,因为系统已自动设置了这按钮进行消息映射,因为系统已自动设置了这两个按钮的动作两个按钮的动作。当用户单击这两个按钮都将自动。当用户单击这两个按钮都将自动关闭对话框,但关闭对话框,但OK(确定确定)按钮动作

22、还将使对话框按钮动作还将使对话框数据有效。数据有效。2.控件消息映射机制控件消息映射机制 将项目工作区切换到将项目工作区切换到FileView(文件视图文件视图)页面,展开页面,展开Head Files(头文件头文件)所有项,双击所有项,双击C*Dlg 类的头文件类的头文件*,在在*文档内容可以找到这样的代码:文档内容可以找到这样的代码:protected:/Generated message map functions/AFX_MSG(CEx_DlgCtrlsDlg)afx_msg void OnButton1();/AFX_MSGDECLARE_MESSAGE_MAP();说明:说明:n代

23、码中,代码中,DECLARE_MESSAGE_MAP()是一是一个消息映射宏,用来声明对消息映射的支持个消息映射宏,用来声明对消息映射的支持。nafx_msg宏表示声明的是一个消息响应函数宏表示声明的是一个消息响应函数。n/AFX_MSG(CEx_DlgCtrlsDlg)/AFX_MSG 用来标明它们之间的消息函数声明内容是由用来标明它们之间的消息函数声明内容是由MFC ClassWizard自动管理的。自动管理的。2.控件消息映射机制控件消息映射机制 在项目工作区在项目工作区FileView页面中,展开页面中,展开Source Files(源文源文件件)所有项,双击所有项,双击C*Dlg 类

24、的源文件类的源文件*,在,在*文档内容可以找文档内容可以找到这样的代码:到这样的代码:BEGIN_MESSAGE_MAP(CEx_DlgCtrlsDlg,CDialog)/AFX_MSG_MAP(CEx_DlgCtrlsDlg)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()说明:说明:BEGIN_MESSAGE_MAP和和 END_MESSAGE_MAP之间的代码是用来定义该之间的代码是用来定义该类所支持的消息映射。其中类所支持的消息映射。其中BEGIN_MESSAGE_MAP带有两个参数,第一个带有两个参数,

25、第一个参数用来指定需要支持消息映射的用户派生类,参数用来指定需要支持消息映射的用户派生类,第二个参数指定该类的基类。第二个参数指定该类的基类。ON_BN_CLICKED是是MFC中专门映射按钮中专门映射按钮BN_CLICKED消息映射宏,消息映射宏,它将按钮控件和消息它将按钮控件和消息函数一一关联。(函数一一关联。(MFC为应用程序中所用到的消为应用程序中所用到的消息都提供类似的消息宏定义。)息都提供类似的消息宏定义。)在在*文件的后部分还有消息函数的实现代码,它与文件的后部分还有消息函数的实现代码,它与一般函数实现相同。一般函数实现相同。3.映射控件通用消息映射控件通用消息 可以通过可以通过

26、WM_COMMAND消息的映射来处理一个或消息的映射来处理一个或多个控件通用消息,如下面的过程。多个控件通用消息,如下面的过程。(1)打开打开MFC ClassWizard对话框,对话框,“Class name”列表中选择列表中选择C*Dlg,在,在IDs表中选择表中选择C*Dlg,在,在Messages框中找到并双击框中找到并双击OnCommand,这样,这样OnCommand消息消息函数就添加好了,由于函数就添加好了,由于OnCommand函数是一个用来处函数是一个用来处理理WM_COMMAND消息的虚函数,因此消息的虚函数,因此这里添加的这里添加的OnCommand函数事实上是一个在类中

27、实际调用的函数,函数事实上是一个在类中实际调用的函数,可称为可称为“实例函数实例函数”。这样的映射操作,可以称之为。这样的映射操作,可以称之为“对对虚函数虚函数OnCommand的重载的重载”。3.映射控件通用消息映射控件通用消息(2)在在OnCommand函数中添加下列代码:函数中添加下列代码:BOOL C*Dlg:OnCommand(WPARAM wParam,LPARAM lParam)WORD nCode=HIWORD(wParam);/控件的通知消息控件的通知消息 WORD nID=LOWORD(wParam);/控件的控件的ID号号if(nID=201)&(nCode=BN_CLI

28、CKED)MessageBox(你按下了你按下了你好你好按钮!按钮!);if(nID=IDC_BUTTON1)&(nCode=BN_CLICKED)MessageBox(这是在这是在OnCommand处理的结果!处理的结果!);return CDialog:OnCommand(wParam,lParam);4控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)为了让用户直接方便地操作一个控件,为了让用户直接方便地操作一个控件,MFC采用了独采用了独特的对话框数据交换特的对话框数据交换DDX和对话框数据校验和对话框数据校验DDV技术。技术。u对话框数据交换(对话框数据交换(DDX

29、,DialogDataExchange)用于初始化对话框中的控件并获取用户的数据输入,用于初始化对话框中的控件并获取用户的数据输入,将数据成员变量同对话框模板内的控件相联接将数据成员变量同对话框模板内的控件相联接,使得,使得数据在控件间很容易地传输。数据在控件间很容易地传输。u对话框数据验证(对话框数据验证(DDV,DialogDataValidation)用于验证对话框中数据输入的有效性。用于验证对话框中数据输入的有效性。如它能自动如它能自动校验数据成员变量数值的范围,并发出相应的警告。校验数据成员变量数值的范围,并发出相应的警告。例:例:使用使用MFC ClassWizard可以很容易地为

30、一个控件定可以很容易地为一个控件定义关联变量并可设置其数据范围。义关联变量并可设置其数据范围。例:为例:为C*Dlg类的按钮控件类的按钮控件IDC_BUTTON1添加并使添加并使用其关联变量用其关联变量m_RelBtn。(1)打开打开MFC ClassWizard,并切换到,并切换到Member Variables页面。页面。(2)选定选定Class name为为C*Dlg,然后在,然后在Control IDs列表中,选定所要关联的控件列表中,选定所要关联的控件ID号号IDC_BUTTON1,双,双击鼠标左键或击鼠标左键或 单击单击Add Variable按钮,弹出按钮,弹出Add Membe

31、r Variable对话框,设置变量的名称、类别和数对话框,设置变量的名称、类别和数据类型。据类型。4控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)MFC ClassWizard的的“MembeVariables”页面页面“Add Member Variable”对话框对话框 4控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)(3)在在Member variable name框中填好与控件相关联的成框中填好与控件相关联的成员变量员变量m_RelBtn,单击,单击OK按钮,回到按钮,回到MFC ClassWizard对话框的对话框的Member Vari

32、ables页面中,在页面中,在Control IDs列表中出现刚才添加的控件关联变量。列表中出现刚才添加的控件关联变量。说明:说明:DDV/DDX技术,允许用户为同一个控件关联多个变量,技术,允许用户为同一个控件关联多个变量,但必须保证这些变量名是互不相同的,且这些变量在同一但必须保证这些变量名是互不相同的,且这些变量在同一个类型不能有多个变量,即在个类型不能有多个变量,即在Value和和Control类型中各自类型中各自有一个关联变量。有一个关联变量。若添加的关联变量是一个若添加的关联变量是一个Value类型,有时还要求用户输类型,有时还要求用户输入变量的范围,这就是控件的数据校验设置。入变

33、量的范围,这就是控件的数据校验设置。4控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)单击单击确定确定按钮后,打开按钮后,打开C*Dlg类源文件,可以发类源文件,可以发现现MFC ClassWizard对上述操作作了以下三方面对上述操作作了以下三方面的修改。的修改。在在*文件中,添加控件关联变量声明。文件中,添加控件关联变量声明。在在*文件中的文件中的C*Dlg构造函数实现代码处,添加控构造函数实现代码处,添加控件变量的一些初始代码。件变量的一些初始代码。在文件中的在文件中的DoDataExchange函数体内,添加了函数体内,添加了控件的控件的DDX/DDV代码,它们都是

34、一些以代码,它们都是一些以DDV_或或DDX_开头的函数调用。开头的函数调用。DoDataExchange()函数函数MFC在每个对话框类中提供了一个用于重载的虚函在每个对话框类中提供了一个用于重载的虚函数数DoDataExchange来实现对话框数据交换和验来实现对话框数据交换和验证工作。证工作。如果使用如果使用DDX机制,机制,则通常在则通常在OnInitDialog程序程序或或对话框构造函数对话框构造函数中设置对话框对象成员变量的初始值中设置对话框对象成员变量的初始值。在对话框即将显示前,应用程序框架的在对话框即将显示前,应用程序框架的DDX机制将成员机制将成员变量的值传递给对话框的控件

35、,变量的值传递给对话框的控件,当对话框响应当对话框响应DoModal或或Create而被显示时,对话框控件将而被显示时,对话框控件将“显示显示”这些值。这些值。Cdialog类中的类中的OnInitDialog函数默认时将调函数默认时将调用用CWnd类的类的UpdateData成员函数成员函数初始化对话框中的初始化对话框中的控件。控件。UpdateData()函数函数UpdateData函数的原型如下:函数的原型如下:BOOL UpdateData(BOOL bSaveAndValidate=TRUE);UpdateData函数只有一个为函数只有一个为TRUE或或FALSE的参数。的参数。u调

36、用调用UpdateData(FALSE)时,数据由控件相关联的成员变时,数据由控件相关联的成员变量向控件传输,量向控件传输,u当调用当调用UpdateData(TRUE)或不带参数的或不带参数的UpdateData时,时,数据从控件向相关联的成员变量复制。数据从控件向相关联的成员变量复制。当用户重载当用户重载DoDataExchange函数时,也就为每一个数据函数时,也就为每一个数据成员(控件)指定了一个成员(控件)指定了一个DDX函数调用。函数调用。4控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)(5)当为一个控件定义一个关联的数据变量后,当为一个控件定义一个关联的数据

37、变量后,可以使用可以使用CWnd:UpdateData函数实现控件数据的函数实现控件数据的输入和读取。将输入和读取。将Ex_DlgCtrlsDlg:OnButton1修改修改成下列代码:成下列代码:void CEx_DlgCtrlsDlg:OnButton1()UpdateData();/没有参数,表示使用的是默认参数值没有参数,表示使用的是默认参数值TRUE m_RelBtn.SetWindowText(m_strEdit);/这儿这儿m_strEdit是某个编辑框连接的控件变量是某个编辑框连接的控件变量10.3.10.3.1 1 静态控件静态控件10.3.10.3.2 2 按钮控件按钮控件

38、10.3.10.3.3 3 编辑框控件和旋转按钮控件编辑框控件和旋转按钮控件10.3.4 10.3.4 列表框控件列表框控件10.3.10.3.5 5 组合框控件组合框控件10.3.10.3.6 6 滚动条控件、进展条和滑动条滚动条控件、进展条和滑动条补充日期时间控件补充日期时间控件10.3.7 10.3.7 基本控件应用举例基本控件应用举例10.3.1 静态控件静态控件10.3.10.3.1 1 静态控件静态控件一个静态控件是用来显示一个字符串、框、矩形、图一个静态控件是用来显示一个字符串、框、矩形、图标标,位图或增强的图元文件。它可以用来作为标签、框或位图或增强的图元文件。它可以用来作为标

39、签、框或用来分隔其他的控件。一个静态控件一般不接收用户输入,用来分隔其他的控件。一个静态控件一般不接收用户输入,也不产生通知消息。也不产生通知消息。在对话框编辑器的控件工具栏中,属于静态控件的有:在对话框编辑器的控件工具栏中,属于静态控件的有:静态文本静态文本 、组框、组框 和静态图片和静态图片 三种。三种。静态图片控件的静态图片控件的General属性对话框:属性对话框:静态图片控件的一般属性静态图片控件的一般属性项项 目目说说 明明ID控件的标识符。每种控件都有默认的控件的标识符。每种控件都有默认的ID,例如添加的第一个按钮控,例如添加的第一个按钮控件为:件为:IDC_BUTTON1,静态

40、控件为静态控件为IDC_STATIC。Group指定控件组中的第一个控件,如果该项未被选中,则此控件后的所指定控件组中的第一个控件,如果该项未被选中,则此控件后的所有控件均被看成同一组。成组的目的是可以让用户用键盘方向键在有控件均被看成同一组。成组的目的是可以让用户用键盘方向键在同一组控件中进行切换。同一组控件中进行切换。Help ID若该项被选中,则为该控件建立一个上下文相关的帮助标识符。若该项被选中,则为该控件建立一个上下文相关的帮助标识符。Disabled指定控件初始化时是否禁用。指定控件初始化时是否禁用。TabStop若该项被选中,则用户可以使用若该项被选中,则用户可以使用Tab键来选

41、择控件键来选择控件类型类型(Type)图片类型,用户可以从中选择图片类型,用户可以从中选择Frame(框框)、Rectangle(矩形区域矩形区域)、on(标标)Bitmap(位图位图)、Enhanced Metafile(增强图元文件,它是增强图元文件,它是各种绘图命令的集合各种绘图命令的集合)图像图像(Image)当图片类型为当图片类型为icon或或bitmap时,通过此框可选择指定的资源时,通过此框可选择指定的资源ID号号颜色颜色(Color)设置设置Frame和和Rectangle的颜色,它可以是的颜色,它可以是black(黑色黑色)、white(白色白色)、gray(灰色灰色)或或者

42、是具有者是具有3D外观的外观的etched(蚀刻风格蚀刻风格)添加蚀刻线添加蚀刻线(1)打开项目中的对话框资源模板打开项目中的对话框资源模板IDD_*_DIALOG。(2)在该对话框适当的位置处添加一个静态图片控件,在该对话框适当的位置处添加一个静态图片控件,右击该控件,从弹出的快捷菜单中选择右击该控件,从弹出的快捷菜单中选择“属性属性”,弹出,弹出如图所示的属性对话框。如图所示的属性对话框。(3)在属性对话框中,选择)在属性对话框中,选择“颜色颜色”类型为类型为Etched,然后关闭属性对话框。然后关闭属性对话框。(4)将鼠标移动到添加的静态图片控件的右下角位置,)将鼠标移动到添加的静态图片

43、控件的右下角位置,使鼠标指针使鼠标指针 变成拖动鼠标使控件的大小变成一条水平变成拖动鼠标使控件的大小变成一条水平线,单击对话框测试按扭,则结果如图所示。线,单击对话框测试按扭,则结果如图所示。水平蚀刻线水平蚀刻线10.3.2 按钮控件按钮控件10.3.10.3.2 2 按钮控件按钮控件 在在Windows中所用的按钮是用来实现一种开与中所用的按钮是用来实现一种开与关的输入。关的输入。常见的按钮有三种类型:常见的按钮有三种类型:按键按钮、单选按钮、按键按钮、单选按钮、复选框按钮复选框按钮。1.1.不同按钮的作用不同按钮的作用按键按钮按键按钮通常可以立即产生某个动作,执行某个命令,通常可以立即产生

44、某个动作,执行某个命令,因此也常被称为命令按钮。按钮有两种风格:标准按键按钮因此也常被称为命令按钮。按钮有两种风格:标准按键按钮和默认按键按钮和默认按键按钮(Default button)。单选按钮单选按钮的外形是在文本前有一个,当它被选中时,的外形是在文本前有一个,当它被选中时,单选按钮中就标上一个黑点,用户若选中同组按钮中的某个单选按钮中就标上一个黑点,用户若选中同组按钮中的某个单选按钮,其余的单选按钮的选中状态会被清除,确保同组单选按钮,其余的单选按钮的选中状态会被清除,确保同组中多个选项只有一个被选中。中多个选项只有一个被选中。复选框复选框的外形是在文本前有空心方框,当被选中时,复的外

45、形是在文本前有空心方框,当被选中时,复选框中就加上一个选框中就加上一个“”标记,通常复选框只有选中和未选中标记,通常复选框只有选中和未选中两种状态,若复选框前面有一个灰色是两种状态,若复选框前面有一个灰色是“”,这样的复选,这样的复选框是三态复选框框是三态复选框,表示复选框的选择状态是,表示复选框的选择状态是“不确定不确定”。2.2.按钮控件通知消息按钮控件通知消息MFCMFC的的CButtonCButton类封装了按钮控件。类封装了按钮控件。CButtonCButton类的成员类的成员函数函数Create()Create()负责创建按钮控件,用于操作负责创建按钮控件,用于操作CButtonC

46、Button类的成员函数如表所示。类的成员函数如表所示。消息消息含义含义BN_CLICKED用户在按钮上单击了鼠标。用户在按钮上单击了鼠标。BN_DOUBLECLICKED用户在按钮上双击了鼠标。用户在按钮上双击了鼠标。3.按钮选中操作按钮选中操作(1)复选按钮的选中操作复选按钮的选中操作 设置或获取一个按钮或多个按钮的选中状态。设置或获取一个按钮或多个按钮的选中状态。CButton类的成员函数类的成员函数SetCheck和和GetCheck分别用分别用来设置或获取指定按钮的选中状态来设置或获取指定按钮的选中状态。nvoid SetCheck(int nCheck);nint GetCheck

47、()const;其中,其中,参数参数nCheck的值和的值和GetCheck()函数的返回值:函数的返回值:0表示未选中,表示未选中,1表示选中,表示选中,2表示不确定表示不确定。3.按钮选中操作按钮选中操作(2)单选按钮的选中操作单选按钮的选中操作 同组多个单选按钮的选中状态的设置与获取,需要使用通用同组多个单选按钮的选中状态的设置与获取,需要使用通用窗口类窗口类CWnd的成员函数的成员函数CheckRadioButton的的GetCheckedRadioButton。nvoid CheckRadioButton(int nIDFirstButton,int nIDLastFirstButt

48、on,int nIDCheckButton);nint GetCheckedRadioButton(int nIDFirstButton,int nIDLastFirstButton);其中,其中,nIDFirstButton和和nIDLastFirstButton分别指定同组单选分别指定同组单选按钮的第一个和最后一个按钮按钮的第一个和最后一个按钮ID值,值,nIDCheckButton指定要设指定要设置选中状态的按钮置选中状态的按钮ID值,函数值,函数GetCheckedRadioButton()返回被返回被选中的按钮选中的按钮ID值。值。示例:示例:例例buttonex 设计以下界面,程序

49、运行后,单击某个单选设计以下界面,程序运行后,单击某个单选按钮,就可以在编辑框里显示其对应的内容。按钮,就可以在编辑框里显示其对应的内容。步骤:步骤:创建并设计对话框创建并设计对话框 星期的星期的ID为为IDC_WEEK,月份的月份的ID为为IDC_MONTH,年份的年份的ID为为IDC_YEAR,日期的日期的ID为为IDC_DATE,2.添加与控件相连的成员变量添加与控件相连的成员变量编辑框编辑框IDC_EDIT1 CString m_edit3.添加消息映射函数添加消息映射函数3.添加消息映射函数添加消息映射函数void CButtonexDlg:OnYear()/TODO:Add you

50、r control notification handler code hereCTime t=CTime:GetCurrentTime();(今年是今年是%d年年,();UpdateData(FALSE);3.添加消息映射函数添加消息映射函数void CButtonexDlg:OnDate()/TODO:Add your control notification handler code hereCTime t=CTime:GetCurrentTime();(现在是现在是%d年年%d月月%d日日%();UpdateData(FALSE);扩展扩展若想在程序运行初始单选按钮组中某个按钮若想在程

51、序运行初始单选按钮组中某个按钮是选中状态,可在对话框的是选中状态,可在对话框的OnInitDialog()函数函数中添加代码:中添加代码:CheckRadioButton(IDC_WEEK,IDC_DATE,IDC_WEEK);若想在程序运行初始就执行某个单选按钮的若想在程序运行初始就执行某个单选按钮的单击操作效果,可在对话框的单击操作效果,可在对话框的OnInitDialog()函函数中直接调用该消息映射函数:数中直接调用该消息映射函数:OnWeek();示例:示例:例例CheckButton根据复选按钮是否被选中,用编辑框根据复选按钮是否被选中,用编辑框来显示相应内容来显示相应内容步骤:步

52、骤:创建并设计对话框创建并设计对话框 设置设置“姓名姓名”复选框的复选框的ID为为IDC_NAME,“年龄年龄”复选框的复选框的ID为为IDC_AGE。2.添加与控件相连的成员变量添加与控件相连的成员变量编辑框编辑框IDC_EDIT1 CString m_editstr 复选框复选框IDC_NAME CButton m_name 复选框复选框IDC_AGE CButton m_age3.添加消息映射函数添加消息映射函数void CCheckButtonDlg:OnOK()/TODO:Add extra validation here CString str=;()=1)str+=姓名为张三姓名

53、为张三1512;/1512表示回车与换行符的八进制表示回车与换行符的八进制ASCII码码 ()=1)str+=年龄年龄18岁岁;m_editstr=str;UpdateData(FALSE);/CDialog:OnOK();示例:制作问卷调查示例:制作问卷调查 本例用到了组框、静态文本、单选按钮、复选框等控本例用到了组框、静态文本、单选按钮、复选框等控件。实现时需要通过件。实现时需要通过CheckRadioButton函数来设置同函数来设置同组单选按钮的最初选中状态,然后通过组单选按钮的最初选中状态,然后通过GetCheck和和GetCheckedRadioButton判断被选中的复选框和单选

54、判断被选中的复选框和单选按钮,通过按钮,通过GetDlgItemText 或或GetWindowText获取选获取选中控件的窗口文本。中控件的窗口文本。示例:制作问卷调查示例:制作问卷调查例例Ex_Research 创建并设计对话框创建并设计对话框 设置控件的设置控件的ID“38”IDC_AGE_M38“FTTL或或ADSL”IDC_CM_FTTL“单位单位LAN”IDC_CM_LAN“拔号拔号56K”IDC_CM_56K“其他其他”IDC_CM_OTHER“收发邮件收发邮件”IDC_DO_POP“浏览资料浏览资料”IDC_DO_READ“聊天游戏聊天游戏”IDC_DO_GAME“其他其他”I

55、DC_DO_OTHER示例:制作问卷调查示例:制作问卷调查例例Ex_Research 2.完善代码完善代码(1)添加初始化代码添加初始化代码 在类在类CEx_ResearchDlg的的OnInitDialog成员函数中添加下成员函数中添加下列初始化代码:列初始化代码:CheckRadioButton(IDC_AGE_L18,IDC_AGE_M38,IDC_AGE_18T27);CheckRadioButton(IDC_CM_FTTL,IDC_CM_OTHER,IDC_CM_FTTL);CButton*pBtn=(CButton*)GetDlgItem(IDC_DO_POP);pBtn-SetC

56、heck(1);/使使“收发邮件收发邮件”复选框选中复选框选中 GetDlgItem是是CWnd类的成员函数,用来获得对话框中控类的成员函数,用来获得对话框中控件的窗口指针,参数是该控件的件的窗口指针,参数是该控件的ID号。号。示例:制作问卷调查示例:制作问卷调查例例Ex_Research(2)通过单击通过单击“确定确定”按钮获取用户选择的结果内容。按钮获取用户选择的结果内容。在在CEx_ResearchDlg类中添加类中添加IDOK按钮按钮BN_CLICKED消息消息映射,并添加下列代码,使得用按映射,并添加下列代码,使得用按确定确定按钮取用户所作的选按钮取用户所作的选择内容。择内容。CSt

57、ring str,strCtrl;/定义两个字符串变量,定义两个字符串变量,/获取第一个问题的用户选择获取第一个问题的用户选择str=你的年龄:你的年龄:;UINT nID=GetCheckedRadioButton(IDC_AGE_L18,IDC_AGE_M38);GetDlgItemText(nID,strCtrl);/获取指定控件的标题文本获取指定控件的标题文本str=str+strCtrl;/获取第二个问题的用户选择获取第二个问题的用户选择str=str+n你使用的接入方式:你使用的接入方式:;nID=GetCheckedRadioButton(IDC_CM_FTTL,IDC_CM_O

58、THER);GetDlgItemText(nID,strCtrl);/获取指定控件的标题文本获取指定控件的标题文本str=str+strCtrl;/获取第三个问题的用户选择获取第三个问题的用户选择str=str+n你上网主要是:你上网主要是:n;UINT nCheckIDs4=IDC_DO_POP,IDC_DO_READ,IDC_DO_GAME,IDC_DO_OTHER;CButton*pBtn;for(int i=0;iGetCheck()pBtn-GetWindowText(strCtrl);str=str+strCtrl+;MessageBox(str);示例:制作问卷调查示例:制作问卷

59、调查 其中,其中,函数函数GetDlgItemText是是CWnd类成员函类成员函数,用来获得对话框(或其他窗口)中的指定控件数,用来获得对话框(或其他窗口)中的指定控件的窗口文本。对于单选按钮和复选框,控件的窗口的窗口文本。对于单选按钮和复选框,控件的窗口文本就是它们的标题属性内容。文本就是它们的标题属性内容。该函数有两个参数:第一个参数用来指定控件该函数有两个参数:第一个参数用来指定控件的标识的标识;第二个参数是返回的窗口文本。第二个参数是返回的窗口文本。函数函数GetWindowText的作用与的作用与GetDlgItemText相同,也是获取窗口的文本内容,但该函数只有一相同,也是获取

60、窗口的文本内容,但该函数只有一个参数。个参数。10.3.3 编辑框和旋转按钮控件编辑框和旋转按钮控件10.3.10.3.3 3 编辑框控件(文本框控件)编辑框控件(文本框控件)n编辑框控件是一个简易的正文编辑器,用户可以在编辑编辑框控件是一个简易的正文编辑器,用户可以在编辑框中输入并编辑正文。编辑框控件可以自带滚动条,显示框中输入并编辑正文。编辑框控件可以自带滚动条,显示多行文本。编辑框控件有两种形式,一种是单行的,另一多行文本。编辑框控件有两种形式,一种是单行的,另一种是多行的,多行编辑框是从零开始编行号的。在一个多种是多行的,多行编辑框是从零开始编行号的。在一个多行编辑框中,除了最后一行外

61、,每一行的结尾处都有一对行编辑框中,除了最后一行外,每一行的结尾处都有一对回车换行符(用回车换行符(用rr、nn表示)表示),这对回车换行符是正,这对回车换行符是正文换行的标志,在屏幕上是不可见的。文换行的标志,在屏幕上是不可见的。n编辑框控件会向父窗口发出如表编辑框控件会向父窗口发出如表10.710.7所示的控件通知消所示的控件通知消息。息。nMFCMFC的的CEditCEdit类封装了编辑框控件。类封装了编辑框控件。CEditCEdit类的成员函数类的成员函数Create()Create()负责创建编辑框控件。用于操作负责创建编辑框控件。用于操作CEditCEdit类的成员类的成员函数如表

62、函数如表10.810.8所示。所示。1 编辑框的属性和通知消息编辑框的属性和通知消息 编辑框是一个让用户从键盘输入和编辑文本的编辑框是一个让用户从键盘输入和编辑文本的矩形窗口,当编辑框被激活且具有输入焦点时,编矩形窗口,当编辑框被激活且具有输入焦点时,编辑框内会出现一个闪动的插入符,表明当前插入点辑框内会出现一个闪动的插入符,表明当前插入点的位置。的位置。利用对话框编辑器可以方便地编辑框的属性和利用对话框编辑器可以方便地编辑框的属性和风格。如下图所示:风格。如下图所示:表表 编辑框的编辑框的Style属性属性 项项 目目说说 明明Align text各行文本对齐方式:各行文本对齐方式:Left

63、、Center、Right,默认时为,默认时为LeftMultiline选中时为多行编辑框,否则为单行编辑框选中时为多行编辑框,否则为单行编辑框Number选中时控件只能输入数字选中时控件只能输入数字Horizontal scroll水平滚动,仅对多行编辑框有效。水平滚动,仅对多行编辑框有效。Auto HScroll当用户在行尾键入一个字符时,文本自动向右滚动。当用户在行尾键入一个字符时,文本自动向右滚动。Vertical scroll垂直滚动,仅对多行编辑框有效垂直滚动,仅对多行编辑框有效Auto VScroll当用户在最后一行按当用户在最后一行按ENTER键时,文本自动向上滚动一页,仅对多

64、键时,文本自动向上滚动一页,仅对多行编辑框效行编辑框效Password选中时,键入编辑框的字符都将显示为选中时,键入编辑框的字符都将显示为“*”,仅对单行编辑框有效,仅对单行编辑框有效No hide selection通常情况下,当编辑框失去键盘焦点时,被选择的文本仍然反色显通常情况下,当编辑框失去键盘焦点时,被选择的文本仍然反色显示。选中时,不具备此功能示。选中时,不具备此功能OEM convert选中时,实现对特定字符集的字符转换选中时,实现对特定字符集的字符转换Want return选中时,用户按下选中时,用户按下ENTER键,编辑框中就会插入一个回车符键,编辑框中就会插入一个回车符Bo

65、rder选中时,在控件的周围存在边框选中时,在控件的周围存在边框Uppercase选中时,键入在编辑框的字符全部转换成大写形式选中时,键入在编辑框的字符全部转换成大写形式Lowercase选中时,键入在编辑框的字符全部转换成小写形式选中时,键入在编辑框的字符全部转换成小写形式Read-Only选中时,防止用户键入或编辑文本选中时,防止用户键入或编辑文本表表 编辑框的通知消息编辑框的通知消息通知消息通知消息说说 明明EN_CHANGE当编辑框中的文本已被修改,在新的文本当编辑框中的文本已被修改,在新的文本显示之后发送此消息显示之后发送此消息EN_HSCROLL当编辑框的水平滚动条被使用,在更新显

66、当编辑框的水平滚动条被使用,在更新显示之前发送此消息示之前发送此消息EN_KILLFOCUS 编辑框失去键盘输入焦点时发送此消息编辑框失去键盘输入焦点时发送此消息EN_MAXTEXT 文本数目到达了限定值时发送此消息文本数目到达了限定值时发送此消息EN_SETFOCUS编辑框得到键盘输入焦点时发送此消息编辑框得到键盘输入焦点时发送此消息EN_UPDATE编辑框中的文本已被修改,新的文本显示编辑框中的文本已被修改,新的文本显示之前发送此消息。之前发送此消息。EN_VSCROLL当编辑框的垂直滚动条被使用,在更新显当编辑框的垂直滚动条被使用,在更新显示之前发送此消息。示之前发送此消息。2 编辑框的基本操作编辑框的基本操作 1.口令设置口令设置 口令设置在编辑框中不同于一般的文本编辑口令设置在编辑框中不同于一般的文本编辑框,每个字符都被一个特殊的字符代替显示,这框,每个字符都被一个特殊的字符代替显示,这个特殊的字符称为口令字符。默认的口令字符是个特殊的字符称为口令字符。默认的口令字符是“*”,应用程序可用成员函数,应用程序可用成员函数SetPasswordChar来定义自己的口令字符。来定义

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!