【教学课件】第4章常用控件.ppt
《【教学课件】第4章常用控件.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章常用控件.ppt(138页珍藏版)》请在三一办公上搜索。
1、第4章 常用控件,4.1.1 控件的创建方法,常用控件类,4.1.1 控件的创建方法,例Ex_DlgCtrls 用控件的编程方式来创建一个按钮(1)选择“文件”“新建”菜单,在弹出的“新建”对话框中单击“工程”标签,选择MFCAppWizard(exe)的项目类型,在工程框中输入项目名Ex_DlgCtrls,结果如图,4.1.1 控件的创建方法,单击确定按钮,在出现的“Step 1”对话框中选择“基本对话框)”应用程序类型,单击完成按钮,创建一个默认的基于对话框的应用程序项目。将项目工作区切换到ClassView页面,展开CEx_DlgCtrlsDlg类,右击CEx_DlgCtrlsDlg类名
2、,弹出如图所示的快捷菜单。,4.1.1 控件的创建方法,从快捷菜单中选择Add Member Variable,出现如图所示的对话框,在Variable Type(变量类型)编辑框中输入CButton(MFC按钮类),在Variable Name(变量名)编辑框中输入要定义的CButton类对象名m_btnWnd。,单击OK按钮,这样Visual C+就会自动在CEx_DlgCtrlsDlg类中添加该成员变量。,4.1.1 控件的创建方法,在项目工作区的ClassView页面中,双击OnInitDialog函数名,在该函数中添加下列代码:BOOL CEx_DlgCtrlsDlg:OnInitD
3、ialog()CDialog:OnInitDialog();m_btnWnd.Create(你好,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);/创建CFont*font=this-GetFont();/获取对话框的字体m_btnWnd.SetFont(font);/设置控件字体return TRUE;/return TRUE unless you set the focus to a control,4.1.1 控件的创建方法,(7)编译并运行,结果如图所示。,控件编程创建方法涉及到的编程内容比较复杂,且不能发
4、挥对话框编辑器可视化的优点,故本书采用前一种方法,即在对话框模板中用编辑器指定控件。,4.1.2 控件的消息及消息映射,应用程序创建一般控件或公共控件之后,当控件的状态发生改变时,控件就会向其父窗口发送消息,这个消息称为“通知消息”。系统都会用一个MSG结构来记录,MSG具有下列结构:typedef struct tagMSG/msg HWND hwnd;/接收到消息的窗口句柄 UINT message;/消息 WPARAM wParam;/消息的附加信息,它的含义取决 于message LPARAM lParam;/消息的附加信息,它的含义取决 于message DWORD time;/消息
5、传送时的时间 POINT pt;/消息传送时,光标所在的屏幕坐标 MSG;,4.1.2 控件的消息及消息映射,映射控件消息 在MFC中,映射一个控件消息是非常简便的,如下面的过 程是对新添加的按钮控件映射BN_CLICKED(单击)消息。将项目工作区窗口切换到ResourseView页面,双击Dialog 资源下的标识IDD_EX_DLGCTRLS_DIALOG,打开该对 话框资源模板。删除“TODO:在这里设置对话控制。”控件,添加一个按钮控件,保留其默认属性。如图所示。,4.1.2 控件的消息及消息映射,按快捷键Ctrl+W,打开MFC ClassWizard对话框,查看“Class na
6、me”列表中是否选择了CEx_DlgCtrlsDlg,在IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。(4)单击Add Function按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。,4.1.2 控件的消息及消息映射,单击OK按钮,在MFC ClassWizard的“Member functions”列表中将列出新增加的成员函数。在此成员函数中添加下列代码:void CEx_DlgCt
7、rlsDlg:OnButton1()MessageBox(你按下了Button1按钮!);(6)编译并运行,当单击Button1按钮时,就会执行OnButton1函数,弹出一个消息对话框。这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类似操作。,4.1.2 控件的消息及消息映射,2.控件消息映射机制,将项目工作区切换到FileView(文件视图)页面,展开Head Files(头文件)所有项,双击CEx_DlgCtrlsDlg 类的头文件Ex_DlgCtrlsDlg.h,在Ex_DlgCtrlsDlg.h文档内容可以找到这样的代码(加粗的代码,以下同):protected:
8、/Generated message map functions/AFX_MSG(CEx_DlgCtrlsDlg)afx_msg void OnButton1();/AFX_MSGDECLARE_MESSAGE_MAP();,4.1.2 控件的消息及消息映射,在项目工作区FileView页面中,展开Source Files(源文件)所有项,双击CEx_DlgCtrlsDlg 类的源文件Ex_DlgCtrlsDlg.cpp,在Ex_DlgCtrlsDlg.h文档内容可以找到这样的代码:BEGIN_MESSAGE_MAP(CEx_DlgCtrlsDlg,CDialog)/AFX_MSG_MAP(C
9、Ex_DlgCtrlsDlg)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)/AFX_MSG_MAP END_MESSAGE_MAP(),在Ex_DlgCtrlsDlg.cpp文件的后部分还有消息函数的实现代码,它与一般函数实现相同。,4.1.2 控件的消息及消息映射,4.映射控件通用消息,通过WM_COMMAND消息的映射来处理一个或多个控件通用消息,如下面的过程。按快捷键Ctrl+W,打开MFC ClassWizard对话框,“Class name”列表中是否选择了CEx_DlgCtrlsDlg,在IDs表中选择CEx_DlgCtrlsDlg,在Messages框
10、中找到并双击OnCommand,这样OnCommand消息函数就添加好了,由于OnCommand函数是一个用来处理WM_COMMAND消息的虚函数,因此这里添加的OnCommand函数事实上是一个在类中实际调用的函数,可称为“实例函数”。这样的映射操作,可以称之为“对虚函数OnCommand的重载”。,4.1.2 控件的消息及消息映射,(2)在OnCommand函数中添加下列代码:BOOL CEx_DlgCtrlsDlg:OnCommand(WPARAM wParam,LPARAM lParam)WORD nCode=HIWORD(wParam);/控件的通知消息 WORD nID=LOWOR
11、D(wParam);/控件的ID号if(nID=201),(3)编译并运行。,4.1.3 控件的数据交换(DDX)和数据校验(DDV),MFC采用了独特的DDX和DDV技术。使用MFC ClassWizard可以很容易地为一个控件定义关联变量并可设置其数据范围。为CEx_DlgCtrlsDlg类的按钮控件IDC_BUTTON1添加并使用其关联变量m_RelBtn。,(1)按快捷键Ctrl+W,打开MFC ClassWizard,并切换到Member Variables页面。(2)选定Class name为CEx_DlgCtrlsDlg,然后在Control IDs列表中,选定所要关联的控件ID
12、号IDC_BUTTON1,双击鼠标右键或 单击Add Variable按钮,弹出Add Member Variable对话框,对话框设置变量的名称、类别和数据类型。,4.1.3 控件的数据交换(DDX)和数据校验(DDV),对于编辑框来说,Variables type中的数值类型可以有CStringint、UINT、long、DWORD、float、double、BYTE、short、BOOL等。,MFC ClassWizard的“MembeVariables”页面,“Add Member Variable”对话框,4.1.3 控件的数据交换(DDX)和数据校验(DDV),(3)在Member
13、 variable name框中填好与控件相关联的成员变量m_RelBtn,单击OK按钮,又回到MFC ClassWizard对话框的Member Variables页面中,在Control IDs列表中出现刚才添加的控件关联变量(或直接称之为“控件变量”)。,4.1.3 控件的数据交换(DDX)和数据校验(DDV),在Ex_DlgCtrlsDlg.h文件中,添加控件关联变量声明,代码如下面加粗部分:/Dialog Data FX_DATA(CEx_DlgCtrlsDlg)enum IDD=IDD_EX_DLGC TRLS_DIALOG;/枚举类型CButtonm_RelBtn;CString
14、m_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=_T();/AFX_DATA_INIT,(4)单击确定按钮后,打开CEx_DlgCtrlsDlg类源文件,可以发现MFC ClassWizard对上述操作作了以下三方面的修
15、改。,4.1.3 控件的数据交换(DDX)和数据校验(DDV),在Ex_DlgCtrlsDlg.cpp文件中的DoDataExchange函数体内,添加了控件的DDX/DDV代码,它们都是一些以DDV_或DDX_开头的函数调用。void CEx_DlgCtrlsDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/调用此函数作为DDX的开始/AFX_DATA_MAP(CEx_DlgCtrlsDlg)DDX_Control(pDX,IDC_BUTTON1,m_RelBtn);DDX_Text(pDX,IDC_EDIT1
16、,m_strEdit);/将控件IDC_EDIT1与m_strEdit进行数据交换DDV_MaxChars(pDX,m_strEdit,20);/校验m_strEdit的最大字符个数不超过20/AFX_DATA_MAP,4.1.3 控件的数据交换(DDX)和数据校验(DDV),(5)当为一个控件定义一个关联的数据变量后,可以使用CWnd:UpdateData函数实现控件数据的输入和读取。将CEx_DlgCtrlsDlg:OnButton1修改成下列代码:void CEx_DlgCtrlsDlg:OnButton1(),UpdateData();/没有参数,表示使用的是默认参数值TRUE m_R
17、elBtn.SetWindowText(m_strEdit);,UpdateData函数只有一个为TRUE或FALSE的参数。调用UpdateData(FALSE)时,数据由控件相关联的成员变量向控件传输,当调用UpdateData(TRUE)或不带参数的UpdateData时,数据从控件向相关联的成员变量复制。,4.1.3 控件的数据交换(DDX)和数据校验(DDV),(6)运行该程序,当在编辑框中输入“Hello”后,单击Button1按钮,OnButton1函数中的UpdateData将编辑框内容保存到m_strEdit变量中,从而执行下一条语句后按钮的名称就变成了编辑框控件中的内容“H
18、ello”。,使用控件的数据成员变量:,4.2 静态控件和按钮,静态控件和按钮是Windows最基本的控件之一。,静态控件是用来显示一个字符串、框、矩形、图标,位图或增 强的图元文件。在对话框编辑器的控件工具栏中,属于静态控件的有:静态文本()、组框()和静态图片()三种。静态图片控件的General属性对话框:,4.2.1 静态控件,4.2 静态控件和按钮,静态图片控件的一般属性对话框,表列出了其一般属性的各个项的含义。,4.2 静态控件和按钮,在属性对话框中,用户可以选择图片“类型”、“图像”两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中。,(1)
19、打开Ex_DlgCtrls项目中的对话框资源模板IDD_EX_DLIDD_EX_DLGCTRLS_DIALOG。(2)在该对话框适当的位置处添加一个静态图片控件,右击该控件,从弹出的快捷菜单中选择“属性”,弹出如图所示的属性对话框。,4.2 静态控件和按钮,(3)在属性对话框中,选择“颜色”类型为Etched,然后关闭属性对话框。(4)将鼠标移动到添加的静态图片控件的右下角位置,使鼠标指针变成拖动 鼠标使控件的大小变成一条水平线,单击对话框测试按扭,则结果如图所示。,,,水平蚀刻线,2.2.1 按钮,在Windows中所用的按钮是用来实现一种开与关的输入,常见的按钮有三种类型:按键按钮 单选按
20、钮 复选框按钮按钮的不同类型:,1.不同按钮的作用,按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命令按钮。按钮有两种风格:标准按键按钮 默认按键按钮button)”项。,2.2.1 按钮,复选框的外形是在文本前有空心方框,当被选中时,复选框中就加上一个“”标记,通常复选框只有选中和未选中两种状态,若复选框前面有一个灰色是“”,这样的复选框是三态复选框。,2.按钮的消息 在按钮映射的消息中,常见只有两个BN_CLICKED和 BN_DOUBLE-CLICKED(双击按钮)。,3.按钮选中操作 最常用的按钮操作是设置或获取一个按钮或多个按钮的选中状态。CButton类的成员函数S
21、etCheck和GetCheck分别用来设置或获取指定按钮的选中状态。,4.2.3 示例:制作问卷调查,问卷调查是日常生活中经常遇到的调查方式。,本例用到了组框、静态文本、单选按钮、复选框等控件。需要通过CheckRadioButton函数来设置同组单选按钮的通过GetDlgItemText 或GetWindowText获取选中控件的窗口文本。,4.2.3 示例:制作问卷调查,例Ex_Research 制作问卷调查创建并设计对话框(1)创建一个默认的基于对话框应用Ex_Research。(2)Visual C+会打开对话框编辑器并显示对话框资源模板。,(3)调整对话框的大小,删除对话框中间的“
22、TODO:在这里设置对话控制。,(4)右击添加的组框控件,从弹出的快捷菜单中选择“属性”菜单,在属性对话框窗口中可以看到它的ID为默认的IDC_STATIC。在组框控件的Styles属性中,“水平对齐”属性用来指定文本在顶部的左边(Left)、居中(Center)还是右边(Right)。默认(Default)选项表示左对齐。,4.2.3 示例:制作问卷调查,(5)在组框内添加4个单选按钮,默认的ID依次为_RADIO1、IDC_RADIO2、IDC_RADIO3和IDC_RADIO4。,4.2.3 示例:制作问卷调查,接下来添加一个静态文本,标题设为“你使用的接入方式:然后在其下再添加4个单选
23、按钮,标题分别是“FTTL或ADSL”、“单位LAN”、“拨号56K”和“其他”,并将相应的ID属性依次改成:IDC_CM_FTTL、DC_CM_LAN、IDC_CM_56K和IDC_CM_OTHER。再添加单选框图:,4.2.3 示例:制作问卷调查,对话框的下方,再添加一个组框控件,标题为“你上网主要是”。添加四个复选框,其标题分别为“收发邮件”、“浏览资料”、“聊天游戏”和“其他”,ID分别为IDC_DO_POP、IDC_DO_GAME和IDC_DO_OTHER。,4.2.3 示例:制作问卷调查,(8)单击工具栏上的测试对话框按钮 对话框测试后,可以发现:顺序添加的这8个单选按钮全部变成一
24、组,在这组中只有一个单选按钮被选中,这不符合我们的本意。解决这个问题的最好的办法是将每一组中的第一个单选按钮的Group(组)属性选中。,。,分别将这二个问题中的第一个单选按钮的Group(组)属性均选中。图所示是对第二个问题设置的结果。,4.2.3 示例:制作问卷调查,单击对话框编辑器工具栏上的切换辅助线按钮,然后将对话框中的控件调整到辅助线以内,并适当对其他控件进行调整。整个问卷调查的对话框就设计好了,单击工具栏上的测试对话框按钮。,4.2.3 示例:制作问卷调查,5.完善代码,(1)将项目工作区切换到ClassView(类视图)页面,展开类CEx_ResearchDlg的所有成员,双击O
25、nInitDialog函数名就会在文档窗口中自动定位到该函数的实现代码处,在此函数添加下列初始化代码:BOOL CEx_ResearchDlg:OnInitDialog(),CDialog: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-SetCheck(1);/使“收发邮件”复选框选中 re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 常用 控件
链接地址:https://www.31ppt.com/p-5658796.html