VC教案6_标准控件.doc

上传人:e****s 文档编号:62369023 上传时间:2022-11-22 格式:DOC 页数:32 大小:912KB
返回 下载 相关 举报
VC教案6_标准控件.doc_第1页
第1页 / 共32页
VC教案6_标准控件.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《VC教案6_标准控件.doc》由会员分享,可在线阅读,更多相关《VC教案6_标准控件.doc(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、课 题: Windows 标准控件 目的要求: 了解基于对话框应用程序的运行机制 掌握windows标准控件的属性及使用 掌握windows标准控件的编程方法 掌握类向导创建变量和消息响应函数 教学重点: windows标准控件的属性及使用 教学难点: windows标准控件的属性及使用 教学课时: 4 教学方法: 讲练结合 教学内容与步骤: 基于对话框应用程序:对话框作为程序主界面,主要用于输出信息和接收用户数据输入。对话框是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据。在MFC中,对话框的功能被封装在CDialog类中,而CDialog类是CWnd类的派

2、生类,而用户创建的对话框类一般都是CDialog类的派生类,从头文件中可看出。作为窗口,对话框和其它窗口一样具有窗口的一切功能。对话框的一个典型应用是通过菜单命令或工具栏按钮打开一个对话框,当然,对话框也可以作为一个程序的主界面。创建基于对话框应用程序:利用MFC AppWizard向导创建一个基于对话框的应用程序框架。利用对话框编辑器和控件工具栏浮动窗口,进行可视化界面设计。根据程序具体功能要求添加代码,或添加成员变量和成员函数完成相应功能。例:编写一个对话框应用程序MyDialog,程序运行后显示一个对话框,并在对话框上显示文本串。如下图。步骤:1,应利用用程序向导MFC AppWizar

3、d生成基于Dialog Based的应用程序项目,程序名为:MyDialog。2,去掉对话框中静态文本控件,其标题为“TODO: 在这里设置对话控制”,调整对话框大小。3,在成员函数CMyDialogDlg:OnPaint()中添加代码CPaintDC dc(this); ode(TRANSPARENT); dc.TextOut(20, 50, 这是一个对话框应用程序!);对话框类的结构:1, 对话框应用程序包含的类及主对话框类的主要成员:应用程序名设为test三个类:CtestApp, CtestDlg, CAboutDlg2,CDialog类从CWnd类派生而来,所以它继承了CWnd类的成

4、员函数,具有CWnd类的基本功能,可以编写代码移动、显示或隐藏对话框,你的CDialog类的派生类中可以直接调用CDialog类的成员函数。3,常用处理函数CDialog:CDialog() 通过调用派生类构造函数,根据对话框资源模板定义一个对话框。CDialog:OnOk()单击OK按钮时调用该函数,接收对话框输入数据,关闭对话框。CDialog:OnCancel() 单击Cancel按钮或按Esc键时调用该函数,不接收对话框输入数据,关闭对话框。CDialog:OnInitDialog() 在显示对话框前调用该函数进行初始化。CDialog:DoModal() 激活模态对话框,显示对话框窗

5、口。CDialog:Create() 根据对话框资源模板创建非模态对话框窗口。如果对话框不是Visible属性,还需通过调用CWnd:ShowWindow()函数显示非模态对话框窗口。CWnd:ShowWindow(true,false) 显示或隐藏对话框窗口CWnd:UpdateData() 通过调用DoDataExchange()设置或获取对话框控件的数据CWnd:DoDataExchange() 被UpdateData()调用以实现对话框数据交换,不能直接调用。CWnd:GetWindowText() 获取对话框窗口的标题CWnd:SetWindowText() 修改对话框窗口的标题CW

6、nd:GetDlgItemText() 获取对话框中控件的文本内容CWnd:SetDlgItemText() 设置对话框中控件的文本内容CWnd:GetDlgItem() 获取控件或子窗口的指针CWnd:MoveWindow() 用于移动对话框窗口CWnd:EnableWindow() 使窗口处于禁用或可用状态CWnd:CheckRadioButton 设置单选按钮选中项CWnd:GetCheckedRadioButton 获取单选按钮选中项对话框数据交换DDX和验证DDV:通过ClassWizard类向导将对话框控件与成员变量相关联。调用UpdateData()时MFC通过调用DoDataE

7、xchange(),实现对话框数据的交换DDX和验证DDV。调用UpdateData(TRUE)函数时,DDX将数据从控件传递到关联的成员变量;当调用UpdateData(FALSE)时,MFC通过调用DDX函数将数据从成员变量传递到关联的的控件。如:DDX_Text(pDX, IDC_EDIT1, m_edit);DDV:利用ClassWizard类向导添加成员变量时,用户如果在窗口的左下角输入数据的范围,如:成员变量m_nInput时指定它的最小值和最大值分别为0和100。ClassWizard将自动加入函数DDV的调用代码DDV_MinMaxUInt(pDX, m_nInput, 0,

8、100)。程序运行后,如果用户的输入数据超出0100的范围,DDV将显示一个提示信息对话框,提示用户有效的输入范围。注:显示调用:UpdateData()实现对话框数据的交换DDX,隐式调用:程序调用CDialog:DoModal()创建并显示对话框时,将自动调用CDialog:OnInitDialog()完成初始化的工作。在OnInitDialog()中调用了UpdateData(FALSE),将数据从成员变量传递到关联的控件,从而显示在控件中。单击OK按钮将调用CDialog:OnOk()函数,在OnOK()中调用了UpdateData(TRUE),将数据从控件传递到关联的成员变量。控件概

9、述:控件是Windows提供的完成特定功能的独立小部件,也是一个小窗口,它使应用程序对话功能的设计更容易完成,在对话框与用户的交互过程中担任主要角色,用于完成用户输入和程序运行过程中的输出。控件对应一个CWnd派生类的对象,它实际上也是一个窗口,可以通过调用窗口类的成员函数实现控件的移动、显示或隐藏、禁用或可用等操作,也可以重新设置它们的尺寸和风格等属性。MFC以类的形式对标准控件和公共控件进行了封装,这些类大部分是从CWnd类直接派生而来。标准控件:Windows提供的控件分为两类:标准控件和公共控件。标准控件:静态控件、编辑框、按钮、列表框、组合框和滚动条等。利用标准控件可满足大部分用户界

10、面程序设计的要求。公共控件:滑块、进度条、列表视控件、树视控件和标签控件等,利用公共控件实现应用程序用户界面风格的多样性。 常用的MFC控件类: 控件通知Notification消息:用户对控件的操作将引发控件事件,Windows产生对应的控件通知Notification消息,消息由其父窗口(如对话框)接收并处理。标准控件发送WM_COMMAND控件通知消息,公共控件一般发送WM_NOTIFY控件通知消息,有时也发送WM_COMMAND消息。通过WM_COMMAND消息参数标识发出消息的控件和具体的事件,消息参数中包含了控件的ID标识和通知码(如BN_CLICKED单击按钮事件)。控件通知码前

11、缀最后一个字母为N。程序员不必关心消息具体的发送和接收,只需利用ClassWizard将控件映射到成员变量,将控件消息映射到成员函数,然后编写具体的处理代码。 控件的创建方法:控件在程序中可作为对话框控件或独立的窗口两种形式存在,因此,控件的创建方法也有两种。一种方法是在对话框模板资源中指定控件,这样当应用程序创建对话框时,Windows就会为对话框创建控件,编程时我们一般都采用这种方法。一种方法是通过调用MFC控件类的成员函数Create()创建控件,也可以调用API函数CreateWindow()或CreateWindowEx()创建控件。控件也可以用于其它窗口,如在程序视图窗口显示控件。

12、这时,需要首先声明一个MFC控件类的对象,然后调用Create()函数创建控件,如:画笔类对象。 控件的组织:1,添加或删除控件 打开对话框编辑器和控件工具栏,在控件工具栏中单击要添加的控件,此时,当光标指向对话框时将变成十字形状,在对话框指定位置处单击鼠标左键,则该控件被添加到对话框中指定的位置。也可以将光标指向控件工具栏中的控件,然后按住鼠标不放,采用鼠标拖曵的方法将控件拖入到对话框中。要删除已添加的控件,先单击对话框中的控件,再按Delete键即可删除指定的控件。2. 设置控件属性 将光标指向对话框中需设置属性的控件,按回车键(或右击鼠标,在弹出式菜单中选择Properties项)弹出P

13、roperties对话框,在Properties对话框中设置控件属性。可以将属性对话框始终保持打开,只需要按下属性对话框左上角的图钉按钮。3. 调整控件的大小 对于静态文本控件,当输入标题内容时,控件的大小会自动改变。对于其它控件,先单击控件,然后利用控件周围的尺寸调整点来改变控件的大小。所选对象的位置和大小将显示在状态栏的右端。 4. 同时选取多个控件 一种方法是在对话框内按住鼠标不放,拖曵出一个大的虚线框,然后释放鼠标,则被该虚线框所包围的控件都将被同时选取;另一种方法是按住Shift(或Ctrl)键不放,然后用鼠标连续选取控件。 5. 移动和复制控件 当单个或多个控件被选取后,按方向键或

14、用鼠标拖动选择的控件可移动控件。若在鼠标拖动过程中按住Ctrl键则复制控件,复制的控件保持原来控件的大小和属性。并且,控件能够通过复制和粘贴操作而加入到其它对话框中。 6. 编排控件 编排控件主要是指同时调整对话框中一组控件的大小或位置。编排控件有两种方法,一种方法是使用控件布局工具栏,自动编排对话框中同时选定的多个控件;另一种方法是使用Layout菜单,当打开对话框编辑器时,Layout菜单将出现在菜单栏上。为了便于用户在对话框内精确定位各个控件,系统还提供了网格、标尺等辅助功能。 测试对话框和控件的方法: 通过按下Ctrl+T组合键就能测试对话框运行时的界面效果。 控件共有属性:控件的属性

15、决定了控件的外观和功能,我们只有通过控件属性对话框才能设置控件的属性。不同控件有不同的属性,但它们都具有通用属性,如控件标识ID、标题Caption等项,控件属性对话框上有若干选项卡,如General(通用属性)、Style(风格)及Extend Styles(扩展风格)选项卡等,其中General页用于设置控件的通用属性,Styles和Extendcd Styles页用来设置控件的外观和辅助属性。控件的General属性:按钮控件: CButton类按钮是最常见的控件之一,按钮控件包括:普通按钮,圆按钮,复选框按钮,组框按钮,自绘按钮。 下压式按钮(或普通按钮或按键按钮):功能,按键按钮在被

16、按下时会立即执行某个命令,也被称为命令按钮。Properties对话框可以设置按钮的不同风格,如通过设置Default button属性设置一个默认按钮。其它属性:Owner draw利用WM_DRAWITEM消息处理函数定制按钮的外观,Icon表示用图标代替原来的文本标题,Bitmap表示用位图代替原来的文本标题,Client edge、Static edge、Modal frame用于设置按钮的外观。 单选按钮(或圆按钮):在一组互相排斥的选项中选择其中一项。由一个圆圈和紧随其后的文本标题组成,当它被选中时,圆圈中就标上一个黑点。单选按钮设置Auto自动属性为默认属性,Auto属性表示用户

17、若选中同组中的某个单选按钮,则自动清除其余单选按钮的选中状态,保证一组选项中始终只有一项被选中。一般将一组单选按钮放在一个组框中,在一组单选按钮中,第一个(Tab键顺序)按钮最重要,其ID值可用于在对话框中为控件建立关联的成员变量。必须为同组中的第一个单选按钮设置Group属性,而同组的其它单选按钮不可再设置Group属性。 复选框:在一组选项中选择其中一项或多项;每组中各按钮相对独立。由一个空心方框和紧随其后的文本组成,当它被选中时,空心方框中就加上一个“”或“”标记。不同于单选按钮,在一组复选框中每次可以同时选择多项。除了选中和没选中两种状态,复选框还有第三种状态,此时选中标记显示为暗色,

18、它表示该项不可以由用户选择。通过设置Tri-state属性得到这种三态复选框。另外,我们可以通过设置Push-like属性使单选按钮或复选框具有普通按钮的外观。 分组框:只是在窗口中划分区域范围,组框可以使一组控件关联起来按钮控件消息: 按钮控件只能发送通知码为BN_CLICKED(单击按钮)和BN_DOUBLECLICKED(双击按钮)的WM_COMMAND消息,我们经常需要编写按钮的BN_CLICKED消息处理函数。CButton类提供了一些成员函数实现对按钮控件对象的控制和管理,如利用成员函数GetCheck()或SetCheck()获取或设置单选按钮或复选框的当前状态,利用成员函数Ge

19、tButtonStyle()或SetButtonStyle()获取或改变按钮控件的风格自绘按钮:MFC还提供了一个CBitmapButton的类,允许用户以图标的方式显示按钮,它是在CButtong下派生的,MFC调用方法DrawItem()在按钮上绘制位图,LoadBitmaps()方法为一个CBitmapButton对象附上位图,最多可以有4个位图。CWnd类消息:在知道按钮ID的前提下,还可使用与按钮有关的CWnd成员函数来设置或查询按钮状态:CheckDlgButton,CheckRadioButton,GetCheckedRadioButton,Is DlgButtonChecked

20、,GetWindowText,GetWindowTextLength,SetWindowText按钮控件示例: 主要步骤:1,创建基于对话框项目2,创建资源并设置资源(按钮)的属性(控件右键,弹出对话框中输入)IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_CHECK1IDC_CHECK2注:组框属性不必修改,为默认值,组框只是装饰,编程中不会用到。3. 添加成员变量并添加消息响应函数(菜单视图类向导:弹出对话框)成员变量:(Membr Variables)注:成员变量可以是数值型:单选按钮(数组下标顺序),复选按钮(选中为0,不选中为1)控件类型:

21、通过成员函数SetCheck(0,1)设置调用成员: 1,定义控件变量。2, 调用窗口类成员GetDlgItem(IDC_DATE_CHECK)获取控件ID的指针,调用成员。CheckRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO,IDC_Boy_RADIO);iCourseRadio=GetCheckedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO);注:复选框,auto风格控件不必添加成员变量,组框只是装饰,不用变量消息响应函数:(Message Mapps)void CMy9_1Dlg:OnButton1(

22、) SetWindowText(“你已按下了按钮!”); void CMy9_1Dlg:OnButton2() m_btn2.SetWindowText(“按钮已被按下!”); void CMy9_1Dlg:OnCheck1() if(m_chk1.GetCheck()0) m_chk1.SetCheck(0); else m_chk1.SetCheck(1); void CMy9_1Dlg:OnRadio1() m_rad1.SetCheck(1); 滚动条控件: CScrollBar类滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。滚动条控件与属于窗口的滚动条是

23、不一样的。处于窗口的滚动条是由该窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的滚动条类的结构及其方法: 滚动条可以通过通知代码来创建,也可以用对话框资源模板来创建常用滚动条动作标识及其说明SB_TOP / SB_BOTTOM :滚动到滚动条最顶 / 底端SB_LINEUP / SB_LINEDOWN:向上 / 下滚动一行SB_LEFT / SB_RIGHT:滚动到左 / 右边SB_LINELEFT / SB_LINERIGHT:向左 / 右滚动一行SB_PAGEUP / SB_PAGEDOWN :向上 / 下滚动一页SB_PAGELEFT / SB_PAGERIGHT :向左 /

24、 右滚动一页SB_THUMBPOSITION:滚动框移动到新位置SB_THUMBTRACK:滚动框被拖动SB_ENDSCROLL:滚动到最终位置创建与初始化滚动条类 在设置滚动条控件时,要通过如下方法设置其范围:CScrollBar:SetScrollRange()例如,设置滚动范围为-100到100的垂直滚动条pMyScroll-SetScrollRange(SB_VERT,-100,100);通过SetScrollPos()设置滚动块当前位置例如,滚动快的位置在-100到100的中间,即为0的位置。pMyScroller-SetScrollPos(0);例,滚动条类编程实例,如下图(1)

25、应用程序的可视化编程部分:创建资源并设置资源属性(2) 应用程序的代码编程部分(a) 给滚动条连接变量ID变量名类别 类型IDC_SCROLLBARm_ScrollbarControlCScrollbarIDC_EDITl m_Edit ControlCEdit(b) 初始化滚动条BOOL CMy9_2Dlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization hereollRange(0,20);m_Scrollbar.SetScrollPos(10);char sPos10;itoa(m_Scrol

26、lbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);return TRUE; (3) 给滚动条消息添加代码 void CMy9_2Dlg:OnVScroll() / TODO: Add your message handler code herechar sPos10;int iNowPos;switch(nSBCode) if(pScrollBar=&m_Scrollbar) case SB_THUMBTRACK:/拖动滑块m_Scrollbar.SetScro

27、llPos(nPos);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);case SB_LINEDOWN:/单击滚动条向下的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);b

28、reak;case SB_LINEUP:/单击滚动条向上的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_PAGEUP:/单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNow

29、Pos=iNowPos-3;if(iNowPos 单击鼠标右键,选择Properties命令,在窗口中输入控件的ID标识值,IDC_EDIT1,用同样的方法设置其它各个对象的属性,如上图(3) 应用程序的代码编程部分(a) 给编辑框连接变量选择Member Variables选项卡,在Control IDs列表框中单击IDC_EDIT1项,使之高亮化单击Add Variable按钮,此时显示Add Member Variable窗口(b) 设置成员变量名为m_Edit1,类别为Control,变量类型为CEdit注意,不要将m_Edit1设为CString类型,因为只有设为CEdit 类型,才

30、能够调用CEdit 类中的一些成员函数,如Copy , Paste等,这样才能完成本应用程序中对Transfer按钮要求复制内容的操作的响应,用同样的方法给编辑框EDIT2等其它对象连接各自的变量,增加变量之后MFC ClassWizard窗口将变为下图所示若此时运行该程序,在Edit文本框中不能进行多行输入,只能单行输入文本,而且按回车键终止应用程序,同时,文本框中也没有水平和垂直滚动条。 下面,我们来完善应用程序中编辑框的特性,使之能够进行多行文本的输入若不选择此项,在编辑框中按回车键就会终止应用程序,若选此项,按回车键就可进行下一行的输入,实现多行文本的输入(c) 修改编辑框的特性 (4

31、) 添加代码(a) 给Showl按钮连接代码void CMy9_5Dlg:OnShow1Button() m_Edit1.SetSel(0,-1);/ 选中编辑框IDC_EDIT1中的全部内容 m_Edit1.ReplaceSel(This is the first EditBox.); 程序中SetSel()函数是CEdit类中的成员函数,因为m_Edit1是属于CEdit类的对象,故可以调用该类所有的成员函数。ReplaceSel()函数也是CEdit类中成员函数。 (b) 给 Clear1按钮连接代码void CMy9_5Dlg:OnClear1Button() m_Edit1.SetSel(0,-1);/选中IDC_EDIT1中的内容m_Edit1.ReplaceSel();/用空串代替所选文本,即

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 标准材料 > 石化标准

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com