第9章控件精选文档.ppt

上传人:石*** 文档编号:87564655 上传时间:2023-04-16 格式:PPT 页数:75 大小:2.73MB
返回 下载 相关 举报
第9章控件精选文档.ppt_第1页
第1页 / 共75页
第9章控件精选文档.ppt_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《第9章控件精选文档.ppt》由会员分享,可在线阅读,更多相关《第9章控件精选文档.ppt(75页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第9章控件本讲稿第一页,共七十五页9.1 可视化编程概述l控件控件控件是Windows系统按类预(自)定义的用户界面或特殊功能模块,它们是窗口类的子类。控件主要应用在对话框中,用户通过操作控件对象完成与应用程序之间的交互。WindowsWindows系统提供的标准控件系统提供的标准控件(表9-1)l按钮控件-CButton 按钮,放在窗口中使用l滚动条控件-CScrollBar,窗口中的一个控件,滚动窗口l静态控件-CStatic 显示文本,或在小窗口中在提供消息或图形等l列表框控件-CListBox 同时显示多条信息,集中显示同类的内容。l编辑框控件-CEdit,在窗口中,接收键盘输入l组合

2、框控件-CComboBox 显示(编辑)一条信息,有多条可选,两种预定义窗口的组合l树控件-CTreeCtrl 树,供增删改选 本讲稿第二页,共七十五页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为通知代码。本讲稿第三页,共七十五页9.2 按钮控件及其应用按钮类型(图9-9、9-10)按钮,矩形子窗口,可响应鼠标单击或

4、回车键的消息。普通按钮(PUSHBUTTON)与默认普通按钮(DEFPUSHBUTTON)矩形子窗,按钮上可设置文本或图标、位图等。用户单击按钮时,应用程序立即执行相应动用。默认普通按钮,带有一个加粗的黑框,表示已接收键盘输入焦点,若按回车键(或第一次按Tab键)就能按下该按钮。圆按钮(RADIOBUTTON)与自动圆按钮(AUTORADIOBUTTON)小圆框形状,外加文本,也称为单选按钮。当圆按钮被选中时,圆圈中显示一个黑色实心圆。各圆按钮之间一般具有互斥性(编程完成),只能选择其中某个选项。自动圆按钮,系统可自动消除其他圆按钮的选中标志,以保证互斥性(不需编程)。复选框(CHECKBOX

5、)与自动复选框(AUTOCHECKBOX)小方框形状,外加文本。被选中时方框内会出现一个“”。复选框各选项之间不存在互斥性,可选择一个或多个(编程完成)。自动复选框,单击该复选框时,将自动在“选中/不选中”状态之间切换(不需编程)。本讲稿第四页,共七十五页组框(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所示。本讲稿第五页,共七十五页主要步骤如下:选用AppWizard创建“MFC AppWizard(exe)”类型的项目step 1时选“Dialog based”类型。点

7、击Finish按钮,随后的步骤中均选OK,完成项目框架创建。在项目空间下的ResourceView中,将对话框(Dialog)内默认控件删除(选中按Delete),双击“IDD_项目名_DIALOG”,显示一个对话框,删除对话框内默认控件。用右键点窗口左上角的图标,在弹出的菜单中选“Controls”项,显示出控件菜单。在具有项目名的对话框,从控件菜单选择按钮放在合适的位置在按钮控件上点右键弹出菜单,选属性(Properties)对话框常规项(General)中,填写按钮上(旁)的说明文本(Caption)内容和控件标识ID,根据需要选择其它属性后关闭对话框。按钮控件常规项(General)属

8、性:Group 选中,每个设置Group的按钮和接下来没有设置Group的按钮为一组,下一个设置Group的按钮为新的一组。一组有多个按钮是互斥的。Visible 选中,程序第一次运行时,控件可见的。Disabled 选中,当对话框创建时,该控件为禁止显示。Tabstop 选中,可以用Tab键(跳格)选择该控件。本讲稿第六页,共七十五页按钮控件风格项(Style)属性:Auto单选按钮若同组都设置Auto,单击同一组某按钮时,其余按钮会将“选中”属性自动清除。否则,各单选按钮要通过编程,才能支持互斥。复选框某复选框设置Auto,不对其编写按钮选中/不选中的程序,单击该复选框时,将自动在“选中/

9、不选中”状态之间切换。Lefttext将标题文本显示于按钮标记左边。Multi-line文本太长时使用多行回绕。Horizontalalignment设置标题文本水平对齐。Verticalalignment设置标题文本垂直对齐。Notify单击或双击按钮时,通知父窗口。Defaultbutton默认(或缺省)按钮 ,第一次按Tab键(或回车键)选中按下的按钮。本例中第二按钮设为默认按钮,若第一次按Tab键选中,则要在点对话后,选择在VC+主菜单“编排”中的”Tab Order”对Tab键跳动的顺序进行排序,应首先点默认按钮(图9-2)。本讲稿第七页,共七十五页l设置各按钮属性IDCaption

10、GroupAutoIDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_RADIO3IDC_RADIO4IDC_CHECK1IDC_CHECK2这是一个按钮,按我吧!这是缺省按钮,按下看看吧!自动单选按钮1自动单选按钮2单选按钮1单选按钮2自动复选按钮1复选按钮2本讲稿第八页,共七十五页在按钮控件上点右键弹出菜单,选ClassWizard,对话框中选(按钮类)成员变量(Member Variable),在Control IDs中选中一项后,单击右侧“Add variable”按钮。在Add Member Variable对话,填写变量名、类型:注意:与控件

11、对应的成员变量,可以是一个数据,也可以是一个控件对象,这将由具体需要来确定。ID(控件类)成员变量名IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_RADIO3IDC_RADIO4IDC_CHECK1IDC_CHECK2m_btn1m_btn2不编程,不设不编程,不设m_rad3m_rad4不编程,不设m_chk2本讲稿第九页,共七十五页为按钮添加消息响应。在ClassWizard对话框中,选择“Message Map”,在“Object IDs”中 选 择 一 项,在“Messages”选择一种消息代码(单击),系统自动给出消息响应函数名。单击Ad

12、d Function按钮,为按钮添加消息处理函数,编写代码。(12)编译、调试。各按钮消息处理函数代码voidCL9_1Dlg:OnButton1()/TODO:Addyourcontrolnotificationhandlercodeherem_btn1.SetWindowText(你已按下了按钮!);/设置窗口文本voidCL9_1Dlg:OnButton2()/TODO:Addyourcontrolnotificationhandlercodeherem_btn2.SetWindowText(按钮已被按下!);本讲稿第十页,共七十五页voidCL9_1Dlg:OnCheck2()/TOD

13、O: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:Addyourcontrolnotificationhandlercodeherem_rad3.SetCheck(0

14、);m_rad4.SetCheck(1);本讲稿第十一页,共七十五页9 93 3滚动条控件滚动条控件l滚动条控件 是一个独立的窗口,实现窗口内容纵向和横向的滚动。滚动条结构:一个滑块,沿滚动条运动;一组滚动箭头按钮,单击箭头滑块移动,移动的距离为滑块的滚动单位。滚动条分类 按结构分:窗口滚动条、子窗口(对话框)滚动条。按功能分:垂直滚动条、水平滚动条。窗口的滚动条,由窗口创建、管理和释放。滚动条控件,由用户创建、管理和释放的。滚动条移动时,向主窗口(或Cdialog类派生)发消息,程序通过消息映像去处理消息。本讲稿第十二页,共七十五页931 滚动条类的结构及其方法滚动条类CScrollBar类

15、是CWnd的直接派生类,层次关系见图9-13。CScrollBar类结构定义在AFXWIN.H中(P196略)。滚动条的主要方法,如表9-8所示,在类结构定义已经声明。常用成员函数:设置滚动条的范围函数 SetScrollRange(int nMinpos,int nMaxpos,BOOL bRedraw=TRUE)nMinpos-滚动位置最小值;nMaxpos-滚动位置最大值;bRedraw=TRUE-滚动条重绘,保证正确显示,一般不用。例:设置滚动范围为-100到100:SetScrollRange(-100,100);设置滚动块的当前位置函数 SetScrollPos(int nPos,

16、BOOL bRedraw=TRUE)nPos-滑块的新位置,必须在设置的范围内。bRedraw=TRUE-滚动条重绘。例:设置滚动块在-100到100的中间位置,即为0的位置:SetScrollPos(O);本讲稿第十三页,共七十五页获取滚动块当前位置的函数:GetScrollPos()滚动条动作通知消息的常用标识,见表9-9。WM_HSCROLL和WM_VSCROLL消息当用户对滚动条操作时,滚动条会向父窗口发送WM_HSCROLL(水平滚动条)和WM_VSCROLL(垂直滚动条)消息。WM_HSCROLL和WM_VSCROLL消息,通过MFC ClassWizard在其对话框映射,产生消息

17、映射函数,并在对话框类的头文件中声明:afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);nSBCode-滚动条的通知消息(表9-9)nPos-滚动块的当前位置*pScrollBar-滚动条控件的指针。9.3.2 滚动条类编程实例例9_2:编写如图9-14所示的基于对话框的应用程序:l基本要求:窗口中有一个滚动条,一个编辑框,滚动条左边有Top、Bottom两个命令按钮;滚动条右边有Res

18、et、Exit两个命令按钮。单击Top按钮,滚动块移到最上边,编辑框中的数字变为0。单击Bottom 按钮,滚动块移到最下边,编辑框中的数字变为20。单击Reset按钮,滚动块移到中问,编辑框中的数字变为10。单击Exit按钮,退出。本讲稿第十四页,共七十五页滚动条的滚动范围为0到20,当前值为10;编辑框中显示滚动条当前位置值;单击滚动条向上或向下箭头,滚动条向上或向下移动一格,编辑框中的数字加1或减1;单击滚动条中滚动块或两端箭头之间的区域,滚动块上移或下移三格,编辑框中的数字加3或减3;按住滚动块上下拖动,编辑框中的数字随着移动而变化。主要步骤如下:选用AppWizard创建“MFC A

19、ppWizard(exe)”,建立工程文件l9_2 选“Dialog based”类型,后面选默认。点击Finish和OK按钮后,完成项目框架创建。在项目空间下的ResourceView中,将对话框内默认控件删除,双击“IDD_L9_2_DIALOG”,在显示的对话框内删除默认控件。用右键点窗口左上角的图标,在弹出的菜单中选Controls项,显示出控件菜单。在具有项目名的对话框,从控件菜单选择如图9-14所示的按钮放在合适的位置上。本讲稿第十五页,共七十五页在控件上点右键弹出菜单,选属性(Properties)对话框常规项(General)中,填写按钮上(旁)文本(Caption,见表9-1

20、0)、ID(可选默认)等内容:对象IDCaption只读控件成员变量名滚动条编辑框TopBottomResetExitIDC_SCROLLBARIDC_EDIT1IDC_BTN_TOPIDC_BTN_BOTTOMIDC_BTN_RESETIDC_BTN_EXIT无无&Top&Bottom&Reset&Exit本讲稿第十六页,共七十五页在ClassWizard中,选控件类的变量(Member Variable),在IDs中选一项,在 Add Member Variable对话框中,给控件滚动条、编辑框填写变量名、类型(表9-10)。在项目空间ClassView项中,添加对话框新的成员函数Chan

21、geDisplayInfo():在ClassView项中,选CL9_2Dlg点右键,再选“Add Member Function”在Add Member Function子对话框中,在Function Type项埴写返回类型:void;在Function Declaration项埴写函数声明:ChangeDisplayInfo(intpos)。给ChangeDisplayInfo为编辑框编写代码,将滚动条的值显示在编辑框中:voidCL9_2Dlg:ChangeDisplayInfo(intpos)charsPos10;itoa(pos,sPos,10);/将整数参数1转字符串,存sPos,参

22、数3的10为10进制m_Dispinfo.SetSel(0,-1);/设定编辑框内,选内容的起点和终点(-1不限)m_Dispinfo.ReplaceSel(sPos);/用参数sPos替换编辑框内容UpdateData(FALSE);/将变量中的数据传给控件(更新显示控件数据)注注:UpdateData(TRUE);/将控件中的数据传给变量本讲稿第十七页,共七十五页滚 动 条、编 辑 框 初 始 化。在 ClassWizard的“Message functions”选框中,选OnInitDialog项,在 OnInitDialog()中添加代码(P199)。BOOLCL9_2Dlg:OnIn

23、itDialog()./TODO:Addextrainitializationherem_Scrollbar.SetScrollRange(0,20);/设置滚动条的范围m_Scrollbar.SetScrollPos(10);/设置滚动块的位置ChangeDisplayInfo(m_Scrollbar.GetScrollPos();returnTRUE;/returnTRUEunlessyousetthefocustoacontrol 本讲稿第十八页,共七十五页为滚动条添加消息响应。在ClassWizard的“Message Map”下,在“Object IDs”中 选CL9_2Dlg,在

24、Message列 表 中,为 WM_VSCROLL(单 击 Add Function)添加一个成员函数OnVScroll()。选择成员函数OnVScroll(),单击Edit Code,为滚动条添加消息处理函数(P200):voidCL9_2Dlg:OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/TODO:Addyourmessagehandlercodehereand/orcalldefaultintiNowPos;switch(nSBCode)if(pScrollBar=&m_Scrollbar)caseSB_THUMBTRACK

25、:/拖动滚动滑块时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_Scrollbar.GetScrollPos();break;本讲稿第十九页,共七十五页caseSB_LINEUP:

26、/单击滚动条向上箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);ChangeDisplayInfo(m_Scrollbar.GetScrollPos();break;caseSB_PAGEUP:/单击滚动条上面的箭头与滚动块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPosEnableWindow(FALSE);功能:是ID为IDC_

27、BUTTON_DELETE的按钮灰选。(24)GetDlgItem(IDC_BUTTON_DELETE)-EnableWindow(TRUE);功能:是ID为IDC_BUTTON_DELETE的按钮还原。(25)str.Left(length);功能:获取字符串str左边长度为length的值。(26)intlength=str.GetLength()功能:获取字符串str的长度(27)dlg.DoModal()功能:建立一个对话框dlg为该对话框的类的对象。(28)CDialog:OnCancel()功能:关闭窗口(29)CMenu*pSysMenu=GetMenu();功能:获取程序菜单指

28、针(30)intnCount=pSysMenu-GetMenuItemCount();功能:获取项层菜单项的项数 本讲稿第二十九页,共七十五页(31)intnIndex=m_ListBox.GetCurSel();功能:获取指针在列表框中的位置m_ListBox为ClistBox类型变量。(32)GetWindowText(str)功能:获取当前窗口的标题Str为Cstring类型的变量(33)GetDlgItem(IDC_CLICKHERE)-SetFocus();将光标设置在控件IDC_CLICKHERE处,若是在打开某个对话框时候做此设置,则将该语句加 到消息处理函数OnInitDial

29、og的return语句前,并且将最后的语句returnTRUE;该为returnFALSE;GetDlgItem(IDC_CLICKHERE)-SetFocus();也可写成m_strit.SetFocus();其中m_strit为该控件对应的变量。(34)GetDlgItem(IDC_STATIC_NUMBER1)功能:获取ID为IDC_STATIC_NUMBER1控件的指针.例:CStringstr GetDlgItem(IDC_STATIC_NUMBER1)-GetWindowText(str)/此句等价于GetDlgItemText(IDC_STATIC_NUMBER1,str);(3

30、5)intnum1=GetDlgItemInt(IDC_EDIT1);功能:获取ID为IDC_EDIT1控件的文本并且转化成整形的值,如果文本中含有非数字字符则转化失败.(36)SetDlgItemInt(IDC_EDIT3,num3)功能:将整数num3显示在ID为IDC_EDIT3的编辑框中.本讲稿第三十页,共七十五页(37):SendMessage(GetDlgItem(IDC_EDIT1)-m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);注意:在函数前面加上作用域分节符表示调用的是全局函数.功能:取ID为IDC_EDIT1控件的文本,获取的最大长度为10,并且将获取

31、的内容存储在ch1中.相当于GetDlgItemText(IDC_EDIT1,ch1,10);说明:第一个参数为对应控件的句柄,第二个参数为消息名称,第三个参数为获取文本的最大长度,第四个参数为存储文本的缓冲区,此处ch1为字符数组,即charch110;第四个参数的类型必须强制转换成LPARAM.此函数有多种调用方式,其功能是相同的。列举如下::SendMessage(GetDlgItem(IDC_EDIT1)-m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);GetDlgItem(IDC_EDIT1)-SendMessage(WM_GETTEXT,10,(LPARAM)c

32、h1);m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);:SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);其中m_edit1是IDC_EDIT1控件的类别为Control,类型为CEdit的变量.本讲稿第三十一页,共七十五页(38):SendMessage(GetDlgItem(IDC_EDIT3)-m_hWnd,WM_SETTEXT,0,(LPARAM)ch3);功能:将缓冲区ch3的内容显示在D为IDC_EDIT1控件上.其作用相当于SetDlgItemText(IDC_EDIT1,c

33、h1);说明:第一个参数为对应控件的句柄,第二个参数为消息名称,第三个参数用不上,故设置为零,第四个参数为要显示的文本内容,第四个参数的类型必须强制转换成LPARAM.(39)SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);功能等价于:SendMessage(GetDlgItem(IDC_EDIT1)-m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);(40)SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);功能等价于:SendMessage(GetDl

34、gItem(IDC_EDIT3)-m_hWnd,WM_SETTEXT,0,(LPARAM)ch3);本讲稿第三十二页,共七十五页静态文本框风格SS_CENTER字符居中显示。SS_LEFT字符左对齐。SS_LEFTNOWORADWRAP字符左对齐,可处理TAB制表符,不支持自动换行,超过末尾字符被裁剪。SS_BLACKRECT用窗口边框色填充的矩形。SS_BLSCKFRAME矩形边框,与窗口边框同色。SS_GRAYRECT用屏幕背景色填充的矩行。SS_GRAYFRAME矩形边框,使用屏幕背景色。SS_WHITERECT用窗口背景色填充的矩行。SS_RIGHT字符右对齐SS_WHITEFRAME

35、矩形边框,使用窗口背景色。本讲稿第三十三页,共七十五页/*控件样式参考列表:DS_ABSALIGN-对话框的坐标为屏幕坐标(缺省为客户区坐标)DS_SYSMODAL-系统模式(仅支持16位程序),不能与DS_CONTROL同用DS_LOCALEDIT-在对话框内部为编辑框分配内存(仅支持16位程序)DS_SETFONT-可定制对话框字体DS_MODALFRAME-框架样式(不能与WS_CAPTION同用)DS_NOIDLEMSG-无空闲消息DS_SETFOREGROUND-使对话框在最前面显示DS_3DLOOK-四周有3维边框DS_FIXEDSYS-使用系统固定字体DS_NOFAILCREAT

36、E-忽略创建过程中的错误DS_CONTROL-控件模式,可作为其他对话框的子窗口DS_CENTER-在屏幕居中DS_CENTERMOUSE-在鼠标位置居中DS_CONTEXTHELP-有上下文帮助按钮本讲稿第三十四页,共七十五页94 静态控件静态控件是一种包含正文或图形的小窗口,显示字符串、框、图标、位图等内容,用于作标签、框、或分隔其它的控件,为某块区域的功能提供标识信息,并可以接收通告消息,作出响应。941静态控件的特点一般静态控件,不接收输入,也不产生消息通知。若在创建静态控件时,选择SS_NOTIFY样式,则静态文本就具有超文本的功能,响应用户的输入,向应用程序发送控件消息。选择SS_

37、NOTIFY样式,点击静态控件可向其父窗口发送WM_COMMAND消息:其中,wParam的低字节是静态控件的ID,wParam的高字节中包含通知码(表9_11),lParam 为静态控件的句柄。本讲稿第三十五页,共七十五页9.4.2 静态控件的应用举例例9-3 单击位图控件,显示位图尺寸。l位图编辑及资源文件添加过程将照片编辑为位图文件在“附件”中,选择“画图”(或用其它图片编辑软件);在“画图”中,打开一张照片,如:IMG166.jpg使用“选定”工具,选定部分照片,用“编辑”中的“复制”;在“文件”中,选择“新建”后,用“编辑”中选“粘贴”;在“文件”中,选择“保存”:输入文件名:L9_

38、3.bmp(24位)将位图文件添加到资源文件中在VC+中创建工程后,将L9_3.bmp拷贝到工程文件中;在项目空间下的ResourceView中,右键点根目录l9_3resources,在弹出的菜单中选“Insert”;在弹出的“插入资源”对话框中,选“Bitmap”类型,按“导入”按钮。找到位图L9_3.bmp位置,按导入按钮“Import”完成。在l9_3resources下,能看到Bitmap中标识为IDB_BITMAP1。本讲稿第三十六页,共七十五页向对话框安放静态控件在静态控件的“General”项,改ID为ID_STATIC_BMP;在静态控件的“Styles”项,选中“通知(no

39、tify)”风格,以响应鼠标点击的消息;在静态控件的“ExtendetStyles”项,选静态控件带边框“staticedge”。在ClassWizard 的Member Variable中,添加静态控件的成员变量:m_bmp;为ID_STATIC_BMP,建立“BN_CLICKED”的消息响应函数:OnStaticBmp()。在L9_3Dlg.CPP的函数OnInitDialog()中,添加代码:BOOLCL9_3_3Dlg:OnInitDialog()./TODO:Addextrainitializationherem_bmp.ModifyStyle(0,SS_BITMAP);/修改静态控

40、件风格为位图HBITMAPhBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1);/加载位图/AfxGetInstanceHandle()-获取当前应用程序实例句柄/MAKEINTRESOURCE(IDB_BITMAP1)-位图名称/MAKEINTRESOURCE宏是把一个整数转换成一个资源。m_bmp.SetBitmap(hBmp);/获取位图returnTRUE;/returnTRUEunlessyousetthefocustoacontrol本讲稿第三十七页,共七十五页为CL9_3_3Dlg:OnStatic

41、Bmp(),添加代码:voidCL9_3_3Dlg:OnStaticBmp()/TODO:AddyourcontrolnotificationhandlercodehereBITMAPbmp;/定义位图句柄GetObject(m_bmp.GetBitmap(),sizeof(BITMAP),&bmp);/获取指定图形对象的消息.返回0表示失败.CStringmsg;msg.Format(ImageSize%d*%d,bmp.bmWidth,bmp.bmHeight);AfxMessageBox(msg);编译运行。点击静态框,显示与位图大小有关的消息框。本讲稿第三十八页,共七十五页9.5列表框

42、控件列表框在应用程序中,用于按项目统计或查询等操作,并且每次操作时可以不用在文本框中输入项目名称,再进行查询或统计。在列表框对象中,可预先在设计时或动态地对可能使用到的项目名称进行设置,程序运行时,用户可以在列表框中选择。9.5.1 列表框控件的类结构列表框功能和结构列表框结构 矩形窗口,可带滚动条,能让用户浏览更多的项目。列表框可用样式如表9-12所示。列表框功能,是一个列有许多项目让用户选择的控件,可显示文件、目录等。对若干项从中进行单选(单个选项)或多选(多项选择),可添加或删除某些项。列表框有一个预定义的键盘接口,可用箭头和PageUp或PageDown键,在列表框中进行项选择,可与S

43、hift或Ctrl键组合使用。列表框分类 单选项列表框 只允许用户一次选择一项。单击列表项被选项以“反相”显示,表示被选中。多选项列表框 可以一次选择多项。列表框类CListBox类的层次结构如图9-20所示。本讲稿第三十九页,共七十五页本讲稿第四十页,共七十五页列表框通知消息具 有 LBS_NOTIFY样 式 的 列 表 框,可 向 它 的 所 有 者(cDialog派生的类)发送通知消息,或向父窗口发消息。对于CListBox类,应用程序只需处理通知消息。表9-13为列表框的通知消息。本讲稿第四十一页,共七十五页952列表框类的方法1通用方法(表9-14)用来获得和设置列表框数据的值和属性

44、,。2特定于单项选择的方法 所有的通用方法均适用于单选项(默认)列表框。GetCurSel()(获得当前选择列表框项的下标(基于0))和SetcurSel()(选择列表框字符串)两个类方法专门处理单选项列表框。3特定于多项选择的方法 多项选择特定方法(表9-15)可以解决在一个列表框中选择多项带来的复杂性。4特定于字符串的方法 列表框操作字符串的方法(表9-16),处理列表框中的字符串项。适用于单选和多选列表框。5虚拟方法 表9-17列出几个虚拟方法,可以从CListBox类中派生一些类替换到你的类中,完成MFC没有提供的功能。本讲稿第四十二页,共七十五页1.CListCtrl控件CListC

45、trl控件在数据库编程中是用得比较多的控件之一,也是Window控件中较难掌握的一个控件。他可以有四显示方式,Report、List、Icon、SmallIcon。Report报告式列表视图方式在数据库开发中是最常用的一种方式。在控件properties的Styles选项卡中在View项可以选择Report方式。Report方式中列表控件的显示方式是有行和列的,行又叫做Item,但有多列是我们只能操作每一行的第零列,也就是最前列。2.与CListCtrl控件相关的数据类型(1)LV_COLUMN结构该结构仅用于报告式列表视图,用来描述表项的某一列。要想向表项中插入新的一列,需要用到该结构。LV

46、_COLUMN结构定义如下:typedef struct_LV_COLUMNUINT mask;/屏蔽位的组合,表明哪些成员是有效的int fmt;/该列的表头和子项的标题显示格式(LVCF_FMT)int cx;/以象素为单位的列的宽度(LVCF_FMT)LPTSTR pszText;/指向存放列表头标题正文的缓冲区(LVCF_TEXT)int cchTextMax;/标题正文缓冲区的长度(LVCF_TEXT)int iSubItem;/说明该列的索引(LVCF_SUBITEM)LVCOLUMN;(2)LV_ITEM结构该结构用来描述一个表项或一个子项,它包含了项的各种属性,定义为:type

47、def struct_LV_ITEMUINT mask;/屏蔽位的组合,表明哪些成员是有效的int iItem;/从0开始编号的表项索引(行索引)int iSubItem;/从1开始编号的子项索引(列索引),因为编号0的列使用InsertItem时已经写入数据UINT state;/项的状态(LVIF_STATE)UINT stateMask;/项的状态屏蔽LPTSTR pszText;/指向存放项的正文的索引区(LVIF_TEXT)int cchTextMax;/标题正文缓冲区的长度(LVCF_TEXT)int iImage;/图标的索引(LVIF_IMAGE)LPARAM lParam;/

48、32位的附加数据(LV_PARAM)LV_ITEM;本讲稿第四十三页,共七十五页3.CListCtrl类的成员函数(1)列的插入和删除项在初始化列表视图时,先要调用InsertColumn插入各个列,该函数的声明为:int InsertColumn(int nCol,const LV_COLUMN*pColumn);其中参数nCol是新列的索引,参数pColumn指向一个LV_COLUMN结构,函数根据该结构来创建新的列。若插入成功,函数返回新的索引;否则返回-1。要删除某列,应调用DeleteColumn()函数,其声明为:BOOL DeleteColumn(int nCol);(2)表项的

49、插入要插入新的表项,应调用InsertItem。如果要显示图标,则应该创建一个CImageList对象并使该对象包含用作显示图标的位图序列,然后调用SetImageList为列表视图设置位图序列。函数的声明为:int InsertItem(const LV_ITEM*pItem);或者int InsertItem(int nItem,LPCTSTR lpszItem);int InsertItem(int nItem,LPCTSTR lpszItem,int nImage);使用的时候多用第二种和第三种。因此省去了定义并初始化LV_ITEM数据类型这一步。参数pItem指向一个LV_ITEM结

50、构,该结构提供了对表项的描述。若插入成功,返回新表项的索引;否则返回-1。参数nItem是表项的索引(行索引,从0开始);参数lpszItem为控件头的名字。(3)函数GetItemText()和函数SetItemText()用于查询和设置表项以及子项显示的正文。SetItemText()函数的一个重要用途就是对子项进行初始化。函数声明为:int GetItemText(int nItem,int nSubItem,LTPSTR lpszText,int nLen)const;CString GetItemText(int nItem,int nSubItem)const;BOOL SetIt

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档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