【教学课件】第4章常用控件.ppt
《【教学课件】第4章常用控件.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章常用控件.ppt(138页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 常用控件常用控件4.1.1控件的创建方法控件名称控件名称MFC类类功能描述功能描述静态控件CStatic用来显示一些几乎固定不变的文字或图形按钮CButton用来产生某些命令或改变某些选项,包括单选按钮、复选框和组框编辑框CEdit用于完成文本和数字的输入和编辑列表框CListBox显示一个列表,让用户从中选取一个或多个项组合框CComboBox是一个列表框和编辑框组合的控件滚动条CScrollBar通过滚动块在滚动条上的移动和滚动按钮来改变某些量进展条CProgressCtrl用来表示一个操作的进度滑动条CSliderCtrl通过滑动块的移动来改变某些量,并带有刻度指示旋转按钮控
2、件CSpinButtonCtrl带有一对反向箭头的按钮,单击这对按钮可增加或减少某个值日期时间控件CDateTimeCtrl用于选择指定的日期和时间图像列表CImageList一个具有相同大小的图标或位图的集合标签控件CTabCtrl类似于一个笔记本的分隔器或一个文件柜上的标签,使用它可以将一个窗口或对话框的相同区域定义为多个页面常用控件类常用控件类4.1.1控件的创建方法例例Ex_DlgCtrls 用控件的编程方式来创建一个按钮用控件的编程方式来创建一个按钮(1)选择“文件”“新建”菜单,在弹出的“新建”对话框中单击“工程”标签,选择MFCAppWizard(exe)的项目类型,在工程框中输
3、入项目名Ex_DlgCtrls,结果如图4.1.1控件的创建方法(2)单击确定按钮,在出现的“Step1”对话框中选择“基本对话框)”应用程序类型,单击完成按钮,创建一个默认的基于对话框的应用程序项目。(3)将项目工作区切换到ClassView页面,展开CEx_DlgCtrlsDlg类,右击CEx_DlgCtrlsDlg类名,弹出如图所示的快捷菜单。4.1.1控件的创建方法(4)从快捷菜单中选择AddMemberVariable,出现如图所示(5)的对话框,在VariableType(变量类型)编辑框中输入CButto(6)n(MFC按钮类),在VariableName(变量名)编辑框中输入要
4、(7)定义的CButton类对象名m_btnWnd。(5)单击OK按钮,这样VisualC+就会自动在CEx_DlgCtrlsDlg(6)类中添加该成员变量。4.1.1 控件的创建方法控件的创建方法 在项目工作区的ClassView页面中,双击OnInitDialog函数名,在该函数中添加下列代码:BOOLCEx_DlgCtrlsDlg:OnInitDialog()CDialog:OnInitDialog();m_btnWnd.Create(你好,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);/创建CFont*f
5、ont=thisGetFont();/获取对话框的字体m_btnWnd.SetFont(font);/设置控件字体returnTRUE;/returnTRUEunlessyousetthefocustoacontrol4.1.1 控件的创建方法控件的创建方法(7)编译并运行,结果如图所示。控件编程创建方法涉及到的编程内容比较复杂,且不能发挥对话框编辑器可视化的优点,故本书采用前一种方法,即在对话框模板中用编辑器指定控件。4.1.2控件的消息及消息映射应用程序创建一般控件或公共控件之后,当控件的状态发生改变时,控件就会向其父窗口发送消息,这个消息称为“通知消息”。系统都会用一个MSG结构来记录,
6、MSG具有下列结构:typedefstructtagMSG/msgHWNDhwnd;/接收到消息的窗口句柄UINTmessage;/消息WPARAMwParam;/消息的附加信息,它的含义取决于messageLPARAMlParam;/消息的附加信息,它的含义取决于messageDWORDtime;/消息传送时的时间POINTpt;/消息传送时,光标所在的屏幕坐标MSG;4.1.2控件的消息及消息映射1.映射控件消息映射控件消息在MFC中,映射一个控件消息是非常简便的,如下面的过程是对新添加的按钮控件映射BN_CLICKED(单击)消息。将项目工作区窗口切换到ResourseView页面,双击
7、Dialog资源下的标识IDD_EX_DLGCTRLS_DIALOG,打开该对话框资源模板。删除“TODO:在这里设置对话控制。”控件,添加一个按钮控件,保留其默认属性。如图所示。4.1.2控件的消息及消息映射(3)按快捷键Ctrl+W,打开MFCClassWizard对话框,查看“Classname”列表中是否选择了CEx_DlgCtrlsDlg,在IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。(4)(4)单击AddFunction按钮或双击BN_CLICKED消息,出现“AddMemberF
8、unction”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。4.1.2 控件的消息及消息映射控件的消息及消息映射(5)单击OK按钮,在MFCClassWizard的“Memberfunctions”列表中将列出新增加的成员函数。(6)在此成员函数中添加下列代码:voidCEx_DlgCtrlsDlg:OnButton1()MessageBox(你按下了Button1按钮!);(6)编译并运行,当单击Button1按钮时,就会执行OnButton1函数,弹出一个消息对话框。这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类似操作。4.1.2 控件
9、的消息及消息映射控件的消息及消息映射2.控件消息映射机制控件消息映射机制(1)将项目工作区切换到FileView(文件视图)页面,展开(2)HeadFiles(头文件)所有项,双击CEx_DlgCtrlsDlg类的(3)头文件Ex_DlgCtrlsDlg.h,在Ex_DlgCtrlsDlg.h文档内容(4)可以找到这样的代码(加粗的代码,以下同):protected:/Generatedmessagemapfunctions/AFX_MSG(CEx_DlgCtrlsDlg)afx_msg void OnButton1();/AFX_MSGDECLARE_MESSAGE_MAP();4.1.2
10、控件的消息及消息映射控件的消息及消息映射(2)在项目工作区FileView页面中,展开SourceFiles(源文件)所有项,双击CEx_DlgCtrlsDlg类的源文件Ex_DlgCtrlsDlg.cpp,在Ex_DlgCtrlsDlg.h文档内容可以找(3)到这样的代码:BEGIN_MESSAGE_MAP(CEx_DlgCtrlsDlg,CDialog)/AFX_MSG_MAP(CEx_DlgCtrlsDlg)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()(3)在Ex_DlgCtrlsDlg.cpp文件的后
11、部分还有消息函数的实现(4)代码,它与一般函数实现相同。4.1.2 控件的消息及消息映射控件的消息及消息映射4.映射控件通用消息映射控件通用消息通过WM_COMMAND消息的映射来处理一个或多个控件通用消息,如下面的过程。(1)按快捷键Ctrl+W,打开MFCClassWizard对话框,(2)“Classname”列表中是否选择了CEx_DlgCtrlsDlg,在IDs(3)表中选择CEx_DlgCtrlsDlg,在Messages框中找到并双击OnCommand,这样OnCommand消息函数就添加好了,由于OnCommand函数是一个用来处理WM_COMMAND(4)消息的虚函数,因此这
12、里添加的OnCommand函数事实上是一个在类中实际调用的函数,可称为“实例函数”。这样的映射操作,可以称之为“对虚函数OnCommand的重载”。4.1.2 控件的消息及消息映射控件的消息及消息映射(2)在OnCommand函数中添加下列代码:BOOLCEx_DlgCtrlsDlg:OnCommand(WPARAMwParam,LPARAMlParam)WORDnCode=HIWORD(wParam);/控件的通知消息WORDnID=LOWORD(wParam);/控件的ID号if(nID=201)&(nCode=BN_CLICKED)MessageBox(你按下了你好按钮!);if(nID
13、=IDC_BUTTON1)&(nCode=BN_CLICKED)MessageBox(这是在OnCommand处理的结果!);returnCDialog:OnCommand(wParam,lParam);(3)编译并运行。4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)MFC采用了独特的DDX和DDV技术。使用MFCClassWizard可以很容易地为一个控件定义关联变量并可设置其数据范围。为CEx_DlgCtrlsDlg类的按钮控件IDC_BUTTON1添加并使用其关联变量m_RelBtn。(1)按快捷键Ctrl+W,打开MFCClassWizard,并切换到
14、MemberVariables页面。(2)选定Classname为CEx_DlgCtrlsDlg,然后在ControlIDs列表中,选定所要关联的控件ID号IDC_BUTTON1,双击鼠标右键或单击AddVariable按钮,弹出AddMemberVariable对话框,对话框设置变量的名称、类别和数据类型。4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)对于编辑框来说,Variablestype中的数值类型可以有CStringint、UINT、long、DWORD、float、double、BYTE、short、BOOL等。MFCClassWizard的“Me
15、mbeVariables”页面“AddMemberVariable”对话框4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)(3)在Membervariablename框中填好与控件相关联的成员变量m_RelBtn,单击OK按钮,又回到MFCClassWizard对话框的MemberVariables页面中,在ControlIDs列表中出现刚才添加的控件关联变量(或直接称之为“控件变量”)。4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)在Ex_DlgCtrlsDlg.h文件中,添加控件关联变量声明,代码如下面加粗部分:/Dialo
16、gDataFX_DATA(CEx_DlgCtrlsDlg)enumIDD=IDD_EX_DLGCTRLS_DIALOG;/枚举类型CButtonm_RelBtn;CStringm_strEdit;/AFX_DATA在Ex_DlgCtrlsDlg.cpp文件中的CEx_DlgCtrlsDlg构造函数实现代码处,添加控件变量的一些初始代码:CEx_DlgCtrlsDlg:CEx_DlgCtrlsDlg(CWnd*pParent/*=NULL*/):CDialog(CEx_DlgCtrlsDlg:IDD,pParent)/AFX_DATA_INIT(CEx_DlgCtrlsDlg)m_strEdit
17、=_T();/AFX_DATA_INIT(4)单击确定按钮后,打开CEx_DlgCtrlsDlg类源文件,可以发现MFCClassWizard对上述操作作了以下三方面的修改。4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)在Ex_DlgCtrlsDlg.cpp文件中的DoDataExchange函数体内,添加了控件的DDX/DDV代码,它们都是一些以DDV_或DDX_开头的函数调用。voidCEx_DlgCtrlsDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/调用此函数作为DD
18、X的开始/AFX_DATA_MAP(CEx_DlgCtrlsDlg)DDX_Control(pDX,IDC_BUTTON1,m_RelBtn);DDX_Text(pDX,IDC_EDIT1,m_strEdit);/将控件IDC_EDIT1与m_strEdit进行数据交换DDV_MaxChars(pDX,m_strEdit,20);/校验m_strEdit的最大字符个数不超过20/AFX_DATA_MAP4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)(5)当为一个控件定义一个关联的数据变量后,可以使用CWnd:UpdateData函数实现控件数据的输入和读取。将
19、CEx_DlgCtrlsDlg:OnButton1修改成下列代码:voidCEx_DlgCtrlsDlg:OnButton1()UpdateData();/没有参数,表示使用的是默认参数值TRUEm_RelBtn.SetWindowText(m_strEdit);UpdateData函数只有一个为TRUE或FALSE的参数。调用UpdateData(FALSE)时,数据由控件相关联的成员变量向控件传输,当调用UpdateData(TRUE)或不带参数的UpdateData时,数据从控件向相关联的成员变量复制。4.1.3 控件的数据交换控件的数据交换(DDX)和数据校验和数据校验(DDV)(6)
20、运行该程序,当在编辑框中输入“Hello”后,单击Button1按钮,OnButton1函数中的UpdateData将编辑框内容保存到m_strEdit变量中,从而执行下一条语句后按钮的名称就变成了编辑框控件中的内容“Hello”。使用控件的数据成员变量:4.2静态控件和按钮静态控件和按钮是Windows最基本的控件之一。静态控件是用来显示一个字符串、框、矩形、图标,位图或增强的图元文件。在对话框编辑器的控件工具栏中,属于静态控件的有:静态文本()、组框()和静态图片()三种。静态图片控件的General属性对话框:4.2.1静态控件4.2静态控件和按钮静态图片控件的一般属性对话框,表列出了其
21、一般属性的各个项的含义。项项 目目说说 明明ID控件的标识符。每种控件都有默认的ID,例如添加的第一个按钮IDC_BUTTON1静态控件为IDC_STATIC。Group指定控件组中的第一个控件,如果该项未被选中,则此控件后的所有控件均被看同一组。成组的目的是可以让用户用键盘方向键在同一组控件中进行切换。HelpID若该项被选中,则为该控件建立一个上下文相关的帮助标识符。Disabled指定控件初始化时是否禁用。TabStop若该项被选中,则用户可以使用Tab键来选择控件类型(Type)图片类型,用户可以从中选择Frame(框)、Rectangle(矩形区域)、on(标)Bitmap位图)、E
22、nhancedMetafile(增强图元文件,它是各种绘图命令的集合)图像(Image)当图片类型为icon或bitmap时,通过此框可选择指定的资源ID号颜色(Color)设置Frame和Rectangle的颜色,它可以是black(黑色)、white(白色)、gray(灰色)者是具有3D外观的etched(蚀刻风格)4.2静态控件和按钮在属性对话框中,用户可以选择图片“类型”、“图像”两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中。(1)打开Ex_DlgCtrls项目中的对话框资源模板IDD_EX_DLIDD_EX_DLGCTRLS_DIALOG。
23、(2)在该对话框适当的位置处添加一个静态图片控件,右击该控件,从弹出的快捷菜单中选择“属性”,弹出如图所示的属性对话框。4.2静态控件和按钮(3)在属性对话框中,选择“颜色”类型为Etched,然后关闭属性对话框。(4)将鼠标移动到添加的静态图片控件的右下角位置,使鼠标指针变成拖动鼠标使控件的大小变成一条水平线,单击对话框测试按扭,则结果如图所示。,水平蚀刻线2.2.1 按钮按钮在Windows中所用的按钮是用来实现一种开与关的输入,常见的按钮有三种类型:按键按钮单选按钮复选框按钮按钮的不同类型:1.不同按钮的作用不同按钮的作用按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命令
24、按钮。按钮有两种风格:标准按键按钮默认按键按钮button)”项。2.2.1 按钮按钮 复选框的外形是在文本前有空心方框,当被选中时,复选框中就加上一个“”标记,通常复选框只有选中和未选中两种状态,若复选框前面有一个灰色是“”,这样的复选框是三态复选框。2.按钮的消息按钮的消息在按钮映射的消息中,常见只有两个BN_CLICKED和BN_DOUBLECLICKED(双击按钮)。3.按钮选中操作按钮选中操作最常用的按钮操作是设置或获取一个按钮或多个按钮的选中状态。CButton类的成员函数SetCheck和GetCheck分别用来设置或获取指定按钮的选中状态。4.2.3 示例:制作问卷调查示例:制
25、作问卷调查问卷调查是日常生活中经常遇到的调查方式。本例用到了组框、静态文本、单选按钮、复选框等控件。需要通过CheckRadioButton函数来设置同组单选按钮的通过GetDlgItemText或GetWindowText获取选中控件的窗口文本。4.2.3 示例:制作问卷调查示例:制作问卷调查例例Ex_Research 制作问卷调查制作问卷调查1.创建并设计对话框创建并设计对话框(1)创建一个默认的基于对话框应用Ex_Research。(2)VisualC+会打开对话框编辑器并显示对话框资源模板。(3)调整对话框的大小,删除对话框中间的“TODO:在这里设置对话控制。(4)右击添加的组框控件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 常用 控件
限制150内