第9章控件优秀PPT.ppt
《第9章控件优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第9章控件优秀PPT.ppt(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第9章控件现在学习的是第1页,共75页9.1 可视化编程概述l控件控件控件是Windows系统按类预(自)定义的用户界面或特殊功能模块,它们是窗口类的子类。控件主要应用在对话框中,用户通过操作控件对象完成与应用程序之间的交互。WindowsWindows系统提供的标准控件系统提供的标准控件(表9-1)l按钮控件-CButton 按钮,放在窗口中使用l滚动条控件-CScrollBar,窗口中的一个控件,滚动窗口l静态控件-CStatic 显示文本,或在小窗口中在提供消息或图形等l列表框控件-CListBox 同时显示多条信息,集中显示同类的内容。l编辑框控件-CEdit,在窗口中,接收键盘输入l
2、组合框控件-CComboBox 显示(编辑)一条信息,有多条可选,两种预定义窗口的组合l树控件-CTreeCtrl 树,供增删改选 现在学习的是第2页,共75页l控件消息及通知代码在应用程序执行中,对控件操作可引发事件而产生消息。API中的控件消息(MFC不使用):WM_COMMAND。当用户在控制框中完成了某个动作(压下按钮)时,就发送一条 WMCOMMAND通知消息给对话框窗口过程。附加信息如下:LOWORD(wParam)控制框标识符;HIWORD(wParam)消息的通知代码;lParam(32位)控制框窗口句柄。MFC控件消息通知代码(表9-2),各控件的通知代码是不同的。l控件常用
3、函数(略)显示或隐藏控件窗口函数:ShowWindow()改变控件窗口的位置和尺寸函数:MoveWindow()向特定的子窗口发送消息的函数:SendMessage()例:用户单击圆按钮时,向圆按钮发送BM_SETCHECK消息:SendMessage(hwndRadioButton,BM_SETCHECK,1,O);向指定的对话框控件发送消息函数:SendDlgItemMessage(hdlg,ID,message,wParam,IParam);其中 hdlg为对话框句柄,ID为通知代码。现在学习的是第3页,共75页9.2 按钮控件及其应用按钮类型(图9-9、9-10)按钮,矩形子窗口,可响
4、应鼠标单击或回车键的消息。普通按钮(PUSHBUTTON)与默认普通按钮(DEFPUSHBUTTON)矩形子窗,按钮上可设置文本或图标、位图等。用户单击按钮时,应用程序立即执行相应动用。默认普通按钮,带有一个加粗的黑框,表示已接收键盘输入焦点,若按回车键(或第一次按Tab键)就能按下该按钮。圆按钮(RADIOBUTTON)与自动圆按钮(AUTORADIOBUTTON)小圆框形状,外加文本,也称为单选按钮。当圆按钮被选中时,圆圈中显示一个黑色实心圆。各圆按钮之间一般具有互斥性(编程完成),只能选择其中某个选项。自动圆按钮,系统可自动消除其他圆按钮的选中标志,以保证互斥性(不需编程)。复选框(CH
5、ECKBOX)与自动复选框(AUTOCHECKBOX)小方框形状,外加文本。被选中时方框内会出现一个“”。复选框各选项之间不存在互斥性,可选择一个或多个(编程完成)。自动复选框,单击该复选框时,将自动在“选中/不选中”状态之间切换(不需编程)。现在学习的是第4页,共75页组框(GROUPBOX)外形为左上角包含文字的矩形框,组框作用是将控件分隔成不同的组并加以说明。自绘式按钮 自绘式按钮是指由程序负责重绘的按钮。按钮控件消息映像 用鼠标单击或双击按钮操触发的事件。按钮控件消息类:ON_BN_CLICKED 单击按钮发送消息ON_BN_DBLCLICKED 双击按钮发送消息ON_COMMAND
6、单击按钮时发送,与ON_BN_CLICKED 类似。9.2.1 按钮控件的创建过程MFC的按钮控件CButton类的结构(P188 略)按钮的样式(表9-3)CButton类的主要成员函数(表9-4)查询用于设置或查询按钮状态的函数(P191),不用构建按钮控件对象,仅需按钮控件的ID。9.2.2 按钮控件示例例9-1:创建如图9-9所示的按钮控件系列,单击普通按钮,显示“按下普通按钮”;此外还有单选按钮、复选按钮及组框控件等,如图9-10所示。现在学习的是第5页,共75页主要步骤如下:选用AppWizard创建“MFC AppWizard(exe)”类型的项目step 1时选“Dialog
7、based”类型。点击Finish按钮,随后的步骤中均选OK,完成项目框架创建。在项目空间下的ResourceView中,将对话框(Dialog)内默认控件删除(选中按Delete),双击“IDD_项目名_DIALOG”,显示一个对话框,删除对话框内默认控件。用右键点窗口左上角的图标,在弹出的菜单中选“Controls”项,显示出控件菜单。在具有项目名的对话框,从控件菜单选择按钮放在合适的位置在 按 钮 控 件 上 点 右 键 弹 出 菜 单,选 属 性(Properties)对 话 框 常 规 项(General)中,填写按钮上(旁)的说明文本(Caption)内容和控件标识ID,根据需要选
8、择其它属性后关闭对话框。按钮控件常规项(General)属性:Group 选中,每个设置Group的按钮和接下来没有设置Group的按钮为一组,下一个设置Group的按钮为新的一组。一组有多个按钮是互斥的。Visible 选中,程序第一次运行时,控件可见的。Disabled 选中,当对话框创建时,该控件为禁止显示。Tabstop 选中,可以用Tab键(跳格)选择该控件。现在学习的是第6页,共75页按钮控件风格项(Style)属性:Auto单选按钮若同组都设置Auto,单击同一组某按钮时,其余按钮会将“选中”属性自动清除。否则,各单选按钮要通过编程,才能支持互斥。复选框某复选框设置Auto,不对
9、其编写按钮选中/不选中的程序,单击该复选框时,将自动在“选中/不选中”状态之间切换。Lefttext将标题文本显示于按钮标记左边。Multi-line文本太长时使用多行回绕。Horizontalalignment设置标题文本水平对齐。Verticalalignment设置标题文本垂直对齐。Notify单击或双击按钮时,通知父窗口。Defaultbutton默认(或缺省)按钮 ,第一次按Tab键(或回车键)选中按下的按钮。本例中第二按钮设为默认按钮,若第一次按Tab键选中,则要在点对话后,选择在VC+主菜单“编排”中的”Tab Order”对Tab键跳动的顺序进行排序,应首先点默认按钮(图9-2
10、)。现在学习的是第7页,共75页l设置各按钮属性IDCaptionGroupAutoIDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_RADIO3IDC_RADIO4IDC_CHECK1IDC_CHECK2这是一个按钮,按我吧!这是缺省按钮,按下看看吧!自动单选按钮1自动单选按钮2单选按钮1单选按钮2自动复选按钮1复选按钮2现在学习的是第8页,共75页在按钮控件上点右键弹出菜单,选ClassWizard,对话框中选(按钮类)成员变量(Member Variable),在Control IDs中选中一项后,单击右侧“Add variable”按钮。在Ad
11、d Member Variable对话,填写变量名、类型:注意:与控件对应的成员变量,可以是一个数据,也可以是一个控件对象,这将由具体需要来确定。ID(控件类)成员变量名IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_RADIO3IDC_RADIO4IDC_CHECK1IDC_CHECK2m_btn1m_btn2不编程,不设不编程,不设m_rad3m_rad4不编程,不设m_chk2现在学习的是第9页,共75页为 按 钮 添 加 消 息 响 应。在 ClassWizard对 话 框 中,选 择“Message Map”,在“Object IDs”中选
12、择一项,在“Messages”选择一种消息代码(单击),系统自动给出消息响应函数名。单击Add Function按钮,为按钮添加消息处理函数,编写代码。(12)编译、调试。各按钮消息处理函数代码voidCL9_1Dlg:OnButton1()/TODO:Addyourcontrolnotificationhandlercodeherem_btn1.SetWindowText(你已按下了按钮!);/设置窗口文本voidCL9_1Dlg:OnButton2()/TODO:Addyourcontrolnotificationhandlercodeherem_btn2.SetWindowText(按钮
13、已被按下!);现在学习的是第10页,共75页voidCL9_1Dlg:OnCheck2()/TODO:Addyourcontrolnotificationhandlercodehereif(m_chk2.GetCheck()m_chk2.SetCheck(0);elsem_chk2.SetCheck(1);voidCL9_1Dlg:OnRadio3()/TODO:Addyourcontrolnotificationhandlercodeherem_rad3.SetCheck(1);m_rad4.SetCheck(0);voidCL9_1Dlg:OnRadio4()/TODO:Addyourco
14、ntrolnotificationhandlercodeherem_rad3.SetCheck(0);m_rad4.SetCheck(1);现在学习的是第11页,共75页9 93 3滚动条控件滚动条控件l滚动条控件 是一个独立的窗口,实现窗口内容纵向和横向的滚动。滚动条结构:一个滑块,沿滚动条运动;一组滚动箭头按钮,单击箭头滑块移动,移动的距离为滑块的滚动单位。滚动条分类 按结构分:窗口滚动条、子窗口(对话框)滚动条。按功能分:垂直滚动条、水平滚动条。窗口的滚动条,由窗口创建、管理和释放。滚动条控件,由用户创建、管理和释放的。滚动条移动时,向主窗口(或Cdialog类派生)发消息,程序通过消息
15、映像去处理消息。现在学习的是第12页,共75页931 滚动条类的结构及其方法滚动条类CScrollBar类是CWnd的直接派生类,层次关系见图9-13。CScrollBar类结构定义在AFXWIN.H中(P196略)。滚动条的主要方法,如表9-8所示,在类结构定义已经声明。常用成员函数:设置滚动条的范围函数 SetScrollRange(int nMinpos,int nMaxpos,BOOL bRedraw=TRUE)nMinpos-滚动位置最小值;nMaxpos-滚动位置最大值;bRedraw=TRUE-滚动条重绘,保证正确显示,一般不用。例:设置滚动范围为-100到100:SetScro
16、llRange(-100,100);设置滚动块的当前位置函数 SetScrollPos(int nPos,BOOL bRedraw=TRUE)nPos-滑块的新位置,必须在设置的范围内。bRedraw=TRUE-滚动条重绘。例:设置滚动块在-100到100的中间位置,即为0的位置:SetScrollPos(O);现在学习的是第13页,共75页获取滚动块当前位置的函数:GetScrollPos()滚动条动作通知消息的常用标识,见表9-9。WM_HSCROLL和WM_VSCROLL消息当用户对滚动条操作时,滚动条会向父窗口发送WM_HSCROLL(水平滚动条)和WM_VSCROLL(垂直滚动条)消
17、息。WM_HSCROLL和WM_VSCROLL消息,通过MFC ClassWizard在其对话框映射,产生消息映射函数,并在对话框类的头文件中声明:afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);nSBCode-滚动条的通知消息(表9-9)nPos-滚动块的当前位置*pScrollBar-滚动条控件的指针。9.3.2 滚动条类编程实例例9_2:编写如图9-14所示的基于对话框的应用程序
18、:l基本要求:窗口中有一个滚动条,一个编辑框,滚动条左边有Top、Bottom两个命令按钮;滚动条右边有Reset、Exit两个命令按钮。单击Top按钮,滚动块移到最上边,编辑框中的数字变为0。单击Bottom 按钮,滚动块移到最下边,编辑框中的数字变为20。单击Reset按钮,滚动块移到中问,编辑框中的数字变为10。单击Exit按钮,退出。现在学习的是第14页,共75页滚动条的滚动范围为0到20,当前值为10;编辑框中显示滚动条当前位置值;单击滚动条向上或向下箭头,滚动条向上或向下移动一格,编辑框中的数字加1或减1;单击滚动条中滚动块或两端箭头之间的区域,滚动块上移或下移三格,编辑框中的数字
19、加3或减3;按住滚动块上下拖动,编辑框中的数字随着移动而变化。主要步骤如下:选用AppWizard创建“MFC AppWizard(exe)”,建立工程文件l9_2 选“Dialog based”类型,后面选默认。点击Finish和OK按钮后,完成项目框架创建。在项目空间下的ResourceView中,将对话框内默认控件删除,双击“IDD_L9_2_DIALOG”,在显示的对话框内删除默认控件。用右键点窗口左上角的图标,在弹出的菜单中选Controls项,显示出控件菜单。在具有项目名的对话框,从控件菜单选择如图9-14所示的按钮放在合适的位置上。现在学习的是第15页,共75页在控件上点右键弹出
20、菜单,选属性(Properties)对话框常规项(General)中,填写按钮上(旁)文本(Caption,见表9-10)、ID(可选默认)等内容:对象IDCaption只读控件成员变量名滚动条编辑框TopBottomResetExitIDC_SCROLLBARIDC_EDIT1IDC_BTN_TOPIDC_BTN_BOTTOMIDC_BTN_RESETIDC_BTN_EXIT无无&Top&Bottom&Reset&Exit现在学习的是第16页,共75页在ClassWizard中,选控件类的变量(Member Variable),在IDs中选一项,在 Add Member Variable对话
21、框中,给控件滚动条、编辑框填写变量名、类型(表9-10)。在项目空间ClassView项中,添加对话框新的成员函数ChangeDisplayInfo():在ClassView项中,选CL9_2Dlg点右键,再选“Add Member Function”在Add Member Function子对话框中,在Function Type项埴写返回类型:void;在Function Declaration项埴写函数声明:ChangeDisplayInfo(intpos)。给ChangeDisplayInfo为编辑框编写代码,将滚动条的值显示在编辑框中:voidCL9_2Dlg:ChangeDispla
22、yInfo(intpos)charsPos10;itoa(pos,sPos,10);/将整数参数1转字符串,存sPos,参数3的10为10进制m_Dispinfo.SetSel(0,-1);/设定编辑框内,选内容的起点和终点(-1不限)m_Dispinfo.ReplaceSel(sPos);/用参数sPos替换编辑框内容UpdateData(FALSE);/将变量中的数据传给控件(更新显示控件数据)注注:UpdateData(TRUE);/将控件中的数据传给变量现在学习的是第17页,共75页滚 动 条、编 辑 框 初 始 化。在 ClassWizard的“Message functions”选
23、框中,选OnInitDialog项,在 OnInitDialog()中添加代码(P199)。BOOLCL9_2Dlg:OnInitDialog()./TODO:Addextrainitializationherem_Scrollbar.SetScrollRange(0,20);/设置滚动条的范围m_Scrollbar.SetScrollPos(10);/设置滚动块的位置ChangeDisplayInfo(m_Scrollbar.GetScrollPos();returnTRUE;/returnTRUEunlessyousetthefocustoacontrol 现在学习的是第18页,共75页为
24、滚动条添加消息响应。在ClassWizard的“Message Map”下,在“Object IDs”中选CL9_2Dlg,在Message列表中,为WM_VSCROLL(单击Add Function)添加一个成员函数OnVScroll()。选择成员函数OnVScroll(),单击Edit Code,为滚动条添加消息处理函数(P200):voidCL9_2Dlg:OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/TODO:Addyourmessagehandlercodehereand/orcalldefaultintiNowPos;s
25、witch(nSBCode)if(pScrollBar=&m_Scrollbar)caseSB_THUMBTRACK:/拖动滚动滑块时m_Scrollbar.SetScrollPos(nPos);ChangeDisplayInfo(m_Scrollbar.GetScrollPos();caseSB_LINEDOWN:/单击滚动条向下箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);ChangeDisplayInfo(m_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控件 优秀 PPT
限制150内