VC教案6_标准控件_第1页
VC教案6_标准控件_第2页
VC教案6_标准控件_第3页
VC教案6_标准控件_第4页
VC教案6_标准控件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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, 这是一个对话框应用程序!);对话框类的结构:对话框应用程序包含的类及主对话框类的主要成员:应用程序名设为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() 激活模态对话框,显示对话框窗口。C

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

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

7、ange(),实现对话框数据的交换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, 100

8、)。程序运行后,如果用户的输入数据超出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项)弹出Prop

13、erties对话框,在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()获取或设置单选按钮或复选框的当前状态,利用成员函数GetBu

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

20、tWindowText,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() S

22、etWindowText(“你已按下了按钮!”); 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_Scrollba

26、r.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.SetScrollP

27、os(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);brea

28、k;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();iNowPos

29、=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(

32、0,-1);/选中IDC_EDIT1中的内容m_Edit1.ReplaceSel();/用空串代替所选文本,即把所选的文本删除(c) 给Show2和Clear2按钮连接代码void CMy9_5Dlg:OnShow2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(This is the second EditBox.);void CMy9_5Dlg:OnClear2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(); (d) 给按钮IDC_Transfer_BUTTON连接代码 void CMy

33、9_5Dlg:OnTransferButton() m_Edit1.SetSel(0,-1);m_Edit1.Copy(); m_Edit2.SetSel(0,-1);ceSel();m_Edit2.Paste();(e)给 Undo按钮连接代码void CMy9_5Dlg:OnUndoButton() m_Edit1.Undo(); m_Edit2.Undo();(f)给Exit按钮连接代码 void CMy9_5Dlg:OnExitButton() OnOK();练习 “乘法器”示例程序,使用者在“乘数”或者“被乘数”编辑框中输入数字的时候,程序可以随时计算乘法的结果 1,创建资源并设置属

34、性,设置变量IDTypeMemberRead-onlyNumberIDC_EDIT_MUL1intm_AIDC_EDIT_MUL2intm_BIDC_EDIT_RESULTCStringm_Result2,添加消息处理函数(1)初始化结果编辑框BOOL CMy9_6Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereUpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);return TRUE; (2)当

35、编辑框中的内容发生改变时,会产生EN_CHANGE消息,需要为乘数与被乘数两个编辑框响应该消息 void CMy9_6Dlg:OnChangeEditMul1( ) UpdateData(TRUE);int i=m_A*m_B;ormat(%d, i);UpdateData(FALSE);void CMy9_6Dlg:OnChangeEditMul2( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);(3) 响应Reset按钮的消息 void CMy9_6Dlg:OnReset() m_A =

36、0;m_B = 0;int i=m_A*m_B;rmat(%d, i);UpdateData(FALSE); 列表框应用举例 练习,创建一个单选列表框,并在该列表框中列出当前目录的文件,双击后删除该项 主要步骤如下: (1)在对话框上放置一个List Box(IDC_LIST_DIR)控件和一个Static(IDC_STATIC_DIR )控件。List Box控件用于显示文件名称,Static控件用于显示当前显示的文件所在的目录(2)为List Box控件添加CListBox类型成员变量m_list (3)在OnInitDialog函数中添加初始化列表框内容的代码 BOOL CMy9_4Dl

37、g:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereDWORD cchCurDir = MAX_PATH;LPTSTR lpszCurDir; CHAR tchBufferMAX_PATH; lpszCurDir = tchBuffer; GetCurrentDirectory(cchCurDir, lpszCurDir); DlgDirList(lpszCurDir, IDC_LIST_DIR, IDC_STATIC_DIR, 0); return TRUE; 获得当前目录, 设置列表框显示条

38、目为当前目录下所有文件名 (4)为了实现双击条目删除的功能,需要响应列表框的LBN_DBLCLK消息 void CMy9_4Dlg:OnDblclkListDir() / TODO: Add your control notification handler code hereint i = m_list.GetCurSel();CString str;m_list.GetText(i, str);m_list.DeleteString(i);CString msg = Item +str+ deleted!;AfxMessageBox(msg); 练习 编写一个对话框应用程ExmpList,

39、对话框中有一个列表框,当用户单击列表框中的一个列表项(一个国家)时,在四个编辑框分别显示指定国家的名称、首都、面积和人口。单击“添加”按钮时,“国家”编辑框中的文本将被添加到列表框中;单击“删除”按钮时,当前的列表项将被删除。组合框控件: 组合框(CComboBox)类的结构及组合框的特点 组合框是两种预定义窗口的组合形式。 在Windows编程中使用单一控件往往不能完全满足与用户交互的需要,最常见的组合框例子是对话框及与其相联系的静态文本和编辑框。 【例】本例创建组合框控件,当单击向下按钮时,显示可选文件的名字。当选中某一项时,显示该项的名称 将一个Combo Box控件放到对话框上。取消S

40、ort风格。否则插入的内容将按照字母顺序排序,而不是插入的顺序排序。添加CComboBox类型的变量m_cbBOOL CMy9_7Dlg:OnInitDialog() /初始化对话框CDialog:OnInitDialog();/ TODO: Add extra initialization herem_cb.AddString(Monday);m_cb.AddString(Tuesday);m_cb.AddString(Wednesday);m_cb.AddString(Thursday);m_cb.AddString(Friday);m_cb.AddString(Saturday);m_c

41、b.AddString(Sunday);return TRUE; 当用户选择的内容发生改变的时候,会产生CBN_SELCHANGE消息。为控件添加该消息的响应函数:void CMy9_7Dlg:OnSelchangeCombo() CString msg;m_cb.GetLBText(m_cb.GetCurSel(), msg);AfxMessageBox(msg);void CMy9_7Dlg:OnSelchangeCombo() char text20;int index;this-UpdateData(true);m_combo.GetWindowText(text,10);index=

42、m_combo.FindString(m_combo.GetCount(),text);if(index!=CB_ERR) if(index=m_combo.FindString(index,text) m_combo.SetCurSel(index); this-UpdateData(false);例:本程序为几种控件的综合应用 在设计的过程中,同一组单选按钮必须一个接一个地放进对话框中,中间不能插入其它的控件 对于成组的单选按钮,只在每组的第一个按钮的属性中选中Group设置在Sex Selecting组中只有Boy单选按钮选中Group属性在Age Range组中只有“20”单选按钮选中

43、Group属性Visual C按照放入对话框中的先后顺序,给每个控件赋一个ID值,所以控件的ID值是连续的。Group属性的控件之间的控件为一组。#define IDC_SHOW_BUTTON 1006#define IDC_HIDE_BUTTON 1007#define IDC_Boy_RADIO 1008#define IDC_Girl_RADIO 1009#define IDC_Age1_RADIO 1010#define IDC_Age2_RADIO 1011#define IDC_Age3_RADIO 1012#define IDC_Show_Sex_Age_BUTTON 1013#

44、define IDC_Result_EDIT 1014在为相关控件连接变量和方法后,开始编程(1) 给复选框IDC_DATE_CHECK添加代码 OnDateCheck()方法的实现代码如下:void CMy9_8Dlg:OnDataCheck() UpdateData(TRUE);if(m_DateCheck=TRUE)CTime tNow ;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%y.%m.%d);m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel(sNow);elsem_DateE

45、dit.SetSel(0,-1);m_DateEdit.ReplaceSel();UpdateData(FALSE); 以当前的屏幕显示内容更新控件的变量 (2)为复选框IDC_TIME_CHECK添加代码 void CMy9_8Dlg:OnTimeCheck() UpdateData(TRUE);if(m_TimeCheck=TRUE)CTime tNow;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%I:%M:%S);m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel(sNow);else

46、m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel();UpdateData(FALSE); 函数Format的参数%I是时间的小时表示法(0112),%m是分的表示法(0059),%d是秒的表示法(0059) (3) 给Enable按钮添加代码void CMy9_8Dlg:OnEnableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(TRUE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(TRUE);m_DateEdit.EnableWindow(TRUE);m_T

47、imeEdit.EnableWindow(TRUE); (4) 为Disable按钮连接代码void CMy9_8Dlg:OnDisableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(FALSE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(FALSE);m_DateEdit.EnableWindow(FALSE);m_TimeEdit.EnableWindow(FALSE); (5) 为Show Again按钮添加代码void CMy9_8Dlg:OnShowButton() GetDlgItem(ID

48、C_DATE_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_DATE_EDIT)-EnableWindow(SW_SHOW);m_DateEdit.ShowWindow(SW_SHOW);GetDlgItem(IDC_TIME_EDIT)-EnableWindow(SW_SHOW);m_TimeEdit.ShowWindow(SW_SHOW); (6) 为Hide the Clock Setting按钮添加实现代码void CMy9_8Dlg:OnHide

49、Button() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_HIDE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_HIDE);m_DateEdit.ShowWindow(SW_HIDE);m_TimeEdit.ShowWindow(SW_HIDE); (7) 给Show_the_Sex_and_Age按钮添加代码void CMy9_8Dlg:OnShowSexAgeBUTTON() char sEdit50;int iSexRADIO;int iAgeRADIO;iSexRADIO=GetCheckedRa

50、dioButton(IDC_Boy_RADIO,IDC_Girl_RADIO);if(iSexRADIO=IDC_Boy_RADIO)strcpy(sEdit,The boys age is);if(iSexRADIO=IDC_Girl_RADIO)strcpy(sEdit,The girls age is);iAgeRADIO=GetCheckedRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO);if(iAgeRADIO=IDC_Age1_RADIO)strcat(sEdit, great than 20);if(iAgeRADIO=IDC_Age2_RA

51、DIO)strcat(sEdit, between 15 and 20);if(iAgeRADIO=IDC_Age3_RADIO)strcat(sEdit, less than 15);m_ResultEdit.SetSel(0,-1); m_ResultEdit.ReplaceSel(sEdit); (8) 为Show_Combo按钮添加代码void CMy9_8Dlg:OnShowComboButton() UpdateData(TRUE);char sCourseEdit30;char sRecordEdit15;int iCourseRadio;iCourseRadio=GetChec

52、kedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO);if(iCourseRadio=IDC_ENGLISH_RADIO)strcpy(sCourseEdit,English record is );if(iCourseRadio=IDC_COMPUTER_RADIO)strcpy(sCourseEdit,Computer record is );if(iCourseRadio=IDC_NATURE_RADIO)strcpy(sCourseEdit,Natural record is );m_Record.GetWindowText(sRecor

53、dEdit,15);strcat(sCourseEdit,);strcat(sCourseEdit,sRecordEdit);m_ComboEdit=_T(sCourseEdit);UpdateData(FALSE);(9) 给OnExitButton()方法添加代码void CMy9_8Dlg:OnExitButton() OnOK(); 初始化单选按钮 BOOL CMy9_8Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereCheckRadioButton(IDC_Boy_RADIO,

54、IDC_Girl_RADIO,IDC_Boy_RADIO);CheckRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO,IDC_Age2_RADIO);UpdateData(FALSE);m_English=0;m_Record.AddString(85);m_Record.AddString(90);m_Record.AddString(95);m_Record.SelectString(-1,95);UpdateData(FALSE);return TRUE; 对话框通用控件 较为流行的控件作为公共控件引入到Windows中,如旋转按钮:Spin控件,CS

55、pinButtonCtrl类、进度条:Progress控件,CProgressCtrl类、滑块:Slider控件,CSliderCtr、列表视控件:List Control控件,CListCtrl类、树视控件:Tree Control控件,CtreeCtrl类、日期时间选取器:Date Time Picker控件,CDateTimeCtrl等公共控件。 标准控件保存在System目录下的文件中,公共控件保存在System目录下的中文件。Picture控件的使用 (1)分隔线 如下图 将Picture控件拖放到对话框上,【Type】属性选择“Frame”,【Color】属性选择“Etched”,

56、将控件拖到最细,这时,Picture控件看起来的效果就跟一条分隔线一样了(2) 图片 将【Type】属性设置为“Icon”或者“Bitmap”的时候,可以设置【Image】属性为相应的资源ID,来显示图标或位图。我们在资源中导入一位图,命名为IDB_BITMAP_DOT,设置Picture控件【Type】为“Bitmap”,【Image】为“IDB_BITMAP_DOT”Spin控件的使用 Spin按钮控件提供了一对箭头,用户通过点击箭头可以微调该控件所表示的数值。表示Spin控件的是CSpinButtonCtrl类 Spin控件通常和tab order位于它之前的控件成对使用。通过CSpin

57、ButtonCtrl的GetBuddy方法可获得与之配对的控件 向对话框拖放一个Edit控件,置为只读,然后拖放一个Spin控件紧挨着刚才拖放的Edit控件,两个控件的ID都是用默认值,设置Spin控件的【Allignment】属性为“Right”,选中【Auto buddy】属性 BOOL CEx9_9Dlg:OnInitDialog()/ TODO: Add extra initialization hereCSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);pSpin-SetRange(0, 100);pSpi

58、n-SetPos(50);pSpin-GetBuddy()-SetWindowText(5.0);return TRUE; 设置Spin的范围是0100,当前位置是50,同时设置它的配对控件的显示值 在对话框中添加WM_VSCROLL消息的响应:void CEx9_9Dlg:OnVScroll() if (pScrollBar-GetDlgCtrlID() = IDC_SPIN1) CString strValue; strValue.Format(%, (double) nPos / 10.0);(CSpinButtonCtrl*)pScrollBar)-GetBuddy()-SetWind

59、owText(strValue); CDialog:OnVScroll(nSBCode, nPos, pScrollBar); Progress控件的使用 进度控件是一个用来指示长时间操作的进展程度的控件。MFC中表示进度控制的是CProgressCtrl类 ,进度条有一个范围和当前位置。范围表示整个操作的持续时间,当前位置表示当前进行到的位置,进度条根据当前位置来判断进行的百分比,来显示进度 如下图添加一个Progress控件,保持默认ID,设置Smooth属性。在旁边添加一个按钮,设置ID为“IDC_BUTTON_START”,Caption为“开始” 在OnInitDialog中添加如下

60、代码:CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);pProg-SetRange(0, 100);pProg-SetPos(50);为“开始”按钮添加点击事件实现代码:void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg-SetPos(0); SetTimer(1000,100,NULL); 在CCtrlDlg中添加对WM_TIMER消息的响应函数:void CEx9

温馨提示

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

评论

0/150

提交评论