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

付费下载

下载本文档

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

文档简介

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

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

3、sed的应用程序项目,程序名为:MyDialog。2,去掉对话框中静态文本控件,其标题为“TODO:在这里设置对话控制”,调整对话框大小。3, 在成员函数 CMyDialogDlg:O nPai nt()中添加代码CPai ntDC dc(this); dc.SetBkMode(TRANSPARENT); dc.TextOut(2O, 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()CWnd:Ge

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

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

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

9、而显示在控件中。单击OK按钮将调用 CDialog:OnOk() 函数,在 OnOK() 中调用了 UpdateData(TRUE) ,将数据从控件 传递到关联的成员变量。控件概述 :控件是 Windows 提供的完成特定功能的独立小部件,也是一个小窗口,它使应用程序 对话功能的设计更容易完成,在对话框与用户的交互过程中担任主要角色,用于完成用户 输入和程序运行过程中的输出。控件对应一个 CWnd 派生类的对象,它实际上也是一个窗口,可以通过调用窗口类的 成员函数实现控件的移动、显示或隐藏、禁用或可用等操作,也可以重新设置它们的尺寸 和风格等属性。MFC 以类的形式对标准控件和公共控件进行了封

10、装,这些类大部分是从CWnd 类直接派生而来。标准控件:Windows 提供的控件分为两类:标准控件和公共控件。标准控件:静态控件、编辑 框、按钮、列表框、组合框和滚动条等。利用标准控件可满足大部分用户界面程序设 计的要求。公共控件:滑块、进度条、列表视控件、树视控件和标签控件等,利用公 共控件实现应用程序用户界面风格的多样性。常用的MFC控件类:控科:静态文本、图片控件按钮、夏选框、单逸按钮、组框列表枢 Stop表示对话枇话行后该控杵可溟诵1过便用也惚来玄取焦点按钮控件:CButton类按钮是最常见的控件之一,按钮控件包括:普通按钮,圆按钮,复选框按钮,组框按钮, 自绘按钮。下压式按钮(或普

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

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

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

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

15、utton , GetCheckedRadioButton , Is DlgButtonChecked , GetWindowText , GetWindowTextLength , SetWindowText 按钮控件示例:这里是一亍按钮按我吧甲|進灌缺暂按田;按卞着看嗓 汕r单选按钮悔喜欧吗*?r目动車选按融看看有何区别琴L单选按融 你喜欢呜甘巨冥选按钮而胃动复选按钮匸连会用!哼蛆框e自勣单选按融,看看有冋区别琴主要步骤:1创建基于对话框项目2,创建资源并设置资源(按钮)的属性(控件右键,弹出对话框中输入).9-12dIDC_BUTT0N1 IDC_BUTT0N2 IDC_RADI01 I

16、DC_RADI02 IDC_CHECK1 IDC_CHECK2这里是一生按辺按我吧|r单选按钮,你喜就吗*?厂自动单选按钮,看看有何区另|辛 厂复选按钮厂 自动复选按钮,你会用吗辛厂组眶组框属性不必修改,为默认值,组框只是装饰,编程中不会用到。3. 添加成员变量并添加消息响应函数(菜单一视图一类向导:弹出对话框)成员变量:(Membr Variables)注:成员变量可以是数值型:单选按钮(数组下标顺序),复选按钮(选中为0,不选中为 1)控件类型:通过成员函数SetCheck( 0,1)设置调用成员:1,定义控件变量。2,调用窗口类成员 GetDlgltem(IDC_DATE_CHECK)

17、获取控件ID的指针,调用成 员。CheckRadioButto n(IDC_Boy_RADIO,IDC_Girl_RADIO,IDC_Boy_RADIO); iCourseRadio=GetCheckedRadioButt on (|Dc_EnGLISH_RADIO,IDC_NATURE_RADIO);注:复选框,auto风格控件不必添加成员变量,组框只是装饰,不用变量 消息响应函数:(Message Mapps)void CMy9_1Dlg:O nButto n1() SetWindowText(你已按下了按钮!”);void CMy9_1Dlg:O nButto n2()m_btn2.Se

18、tWindowText(按钮已被按下!”); void CMy9_1Dlg:O nCheck1() if(m_chk1.GetCheck()0) m_chk1.SetCheck(0);elsem_chk1.SetCheck(1); void CMy9_1Dlg:O nRadio1() m_rad1.SetCheck(1); 滚动条控件:CScrollBar类滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。 滚动条控件与属于窗口的滚动条是不一样的。处于窗口的滚动条是由该窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的滚动条类的结构及其方法:滚动条可以通过通

19、知代码来创建,也可以用对话框资源模板来创建CScrollBar类的方法方法说明En ableScrollBar()使滚动条的一个或两个前头有效或无效GetScrollI nfo()获得滚动条的消息GetScrollLimit()获得滚动条的范围GetScrollPos()获得滚动条当前的位置GetScrollRa nge()获得制定滚动条的当前最大和最小滚动位置SetScrollI nfo()设置滚动条的消息SetScrollPos()设置滚动块当前的位置常Se滚动条动作标识及其说明制定滚动条的最大和最小滚动位置迎BOtto显示或隐藏滚动条最顶端SB_LINEUP / SB_LINEDOWN

20、:向上 / 下滚动一行 SB LEFT / SB RIGHT :滚动到左 /右边SB_LINELEFT / SB_LINERIGHT :向左 / 右滚动一行SB_PAGEUP / SB_PAGEDOWN :向上 / 下滚动一页SB_PAGELEFT / SB_PAGERIGHT :向左 / 右滚动一页SB_THUMBPOSITION :滚动框移动到新位置SB_THUMBTRACK :滚动框被拖动SB_ENDSCROLL :滚动至U最终位置创建与初始化滚动条类在设置滚动条控件时,要通过如下方法设置其范围:CScrollBar:SetScrollRa nge()例如,设置滚动范围为-100到100

21、的垂直滚动条pMyScroll-SetScrollRa nge(SB_VERT,-100,100);通过SetScrollPos()设置滚动块当前位置例如,滚动快的位置在 -100到100的中间,即为 0的位置。pMyScroller-SetScrollPos(0); 例,滚动条类编程实例,如下图标题 A Application of烈当前值为佃襪动条的滚动范围设为A blLetl0SJ20单击Upgffl, 滚动块移到最 上近编辑框 的数字变为0单击Downftffl ,滾动块移到最 下边,编辑框的 数字变为20单击向上或向下的 箭头.滚动块问上 或向币移动一格, 编辑框中的数字加 1Nt1

22、对象ID滚动条IDC_SCROLLBAR编辑框IDC EDIT1Up按钮IDC UP BUTTONDown按钮IDC DOWN BUTTONReset按钮IDC RESET BUTTON用程序的代码编程部分LEXIT BUTTON应用程序的可视化编程部分:创建资源并设置资源属性 对话框中各个对象的属性IDIDC_SCROLLBAR应给滚动条连接变量变量名类别 m_Scrollbarm EditIDC_EDITI(b)初始化滚动条BOOL CMy9_2Dlg:O nlni tDialog() CDialog:O nln itDialog();Con trolCon trol类型CScrollba

23、rCEdit单击滚动块与 箭头之间的区 域。滚动块上 移或下移三 格,编辑框中 的数字加3或 减3单击Reselft 钻滑块移到 中间,编辑框 的数字变为10单击Exit 钮,退岀应 用程序按住滚动块上 下拖臥编辑 样中的数字爾/ TODO: Add extra in itializatio n here m_Scrollbar.SetScrollRa nge(0,20); m_Scrollbar.SetScrollPos(10); char sPos10; itoa(m_Scrollbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1); m_Edi

24、t.ReplaceSel(sPos);UpdateData(FALSE); return TRUE;(3) 给滚动条消息添加代码void CMy9_2Dlg:O nVScroll(,)/ TODO: Add your message han dler code herechar sPos10;int iNowPos;switch( nSBCode) if(pScrollBar=&m丄Scrollbar) case SB_THUMBTRACK:/拖动滑块m_Scrollbar.SetScrollPos(nPos); itoa(nPos,sPos,10); m_Edit.SetSel(0,-1);

25、 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);break;case SB_LINEUP: /单击滚动条向上的箭头 iNowPos=m_S

26、crollbar.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=iNowPos-3;if(iNowPos 单击鼠标右键,选择P

27、roperties命令,在窗口中输入控件的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类型,才能够调用 CEdit 类中的一些成员函数,女口 C

28、opy , Paste等,这样才能完成本应用程序中对Transfer按钮要求复制内容的操作的响应,EDIT2等其它对象连接各自的变量,增加变量之后MFC ClassWizard窗口将变为下图所示FCMember VariablesAuto motion| AciivcX Events |Inlo |EdilBuxClusfi- jJ-HHifi:匚|CEditB-uxDlyUDC Cl TAJR1 OUTTONiCFlutlnrum nzleiOFlIOC CLEATIZ aurroNCBuUOmHDCEDIlT1CEditin EdillIUCEDIiT2CEditHOC EXIT BUTT

29、ONCButloiiiin_ExilIDCZSHOW1_BLJTTCiNCBufionPDC SHOW2 BUTTONCBuHuiriii_es-IiuwZID C_TRAMSIR _口1 JTTOWCRu-Hnnm_trnni;fErIDC UNDO BLFTTONGtdunonm_und :惟序diimoxir dtilDnscDIg. h,丘程片忆日 HI3ItFl 口氛口 hg.cppIConlTnlTypnMcirnhiTEscripticiinZ map la CButtun mEmlbery| x.|。OK|Cnnccl文本框中不能进行多行输入,只能单行输入文本,而且按若此时运行

30、该程序,在 回车键终止应用程序,同时,下面,我们来完善应用程序中编辑框的特性,若不选择此项,在编辑框中按回车键就会终止应用程序,若选此项,按回车键就可进行下 一行的输入,实现多行文本的输入(c)修改编辑框的特性(a) 给Showl按钮连接代码void CMy9_5Dlg:O nShow1Butto n() -m_Edit1.SetSel(0,-1); /选中编辑框IDC_EDIT1中的全部内容 m_Edit1.ReplaceSel(This is the first EditBox.);-程序中SetSel()函数是CEdit类中的成员函数,因为 m_Edit1是属于CEdit类的对象,故可

31、以调用该类所有的成员函数。ReplaceSel ()函数也是CEdit类中成员函数。(b) 给Clear1按钮连接代码void CMy9_5Dlg:O nClear1Butto n() -m_Edit1.SetSel(0,-1);选中 IDC_EDIT1 中的内容m_Edit1.ReplaceSel();用空串代替所选文本,即把所选的文本删除(c) 给Show2和Clear2按钮连接代码void CMy9_5Dlg:O nShow2Butto n() -m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(This is the seco nd EditBox.);

32、- void CMy9_5Dlg:O nClear2Butto n() -m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();(d) 给按钮 IDC_Transfer_BUTTON 连接代码void CMy9_5Dlg:O nTran sferButto n()-m_Edit1.SetSel(0,-1);m_Edit1.Copy();m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();m_Edit2.Paste();-(e) 给Un do按钮连接代码void CMy9_5Dlg:O nUn doButto n() m_Edit1.

33、U ndo();m_Edit2.U ndo();(f) 给Exit按钮连接代码void CMy9_5Dlg:O nExitButto n() -On OK();练习“乘法器”示例程序,使用者在“乘数”或者“被乘数”编辑框中输入数字的时候, 程序可以随时计算乘法的结果1,创建资源并设置属性,设置变量IDTypeM emberIDC_EDIT_MUL1 int IDC_EDIT_MUL2 int IDC_EDIT_RESULTRead-onlyNumberm_AVm_B VCStri ng m_Result V2,添加消息处理函数(1) 初始化结果编辑框BOOL CMy9_6Dlg:O nlni

34、tDialog() CDialog:O nlni tDialog();/ TODO: Add extra in itializatio n here UpdateData(TRUE);int i=m_A*m_B; m_Result.Format(%d, i);UpdateData(FALSE);return TRUE;当编辑框中的内容发生改变时,会产生EN_CHANGE消息,需要为乘数与被乘数两个编辑框响应该消息void CMy9_6Dlg:O nCha ngeEditMul1() UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE); void CMy9_6Dlg:O nCha ngeEditMul2() UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);响应Reset按钮的消息void CMy9_6Dlg:O nReset() m_A = 0;m_B = 0;int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);列表框应用举例练习,创建一个单选列

温馨提示

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

评论

0/150

提交评论