




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对话框是应用程序中最重要的界面元素之一,是与用户交互的重要手段。它是一个特殊的窗口,其特殊是因为对话框中往往有多个控件(控件是用于和用户交互的基本单元。控件常用于对话框中,另外它还可由其它的父窗口所拥有以完成其它的任务。),如文本框、编辑框、列表框、滚动条等。用户通过与对话框中各控件的交互,起到输入/输出数据或完成其它任务的目的。,第五章对话框及常用控件,从MFC编程的角度看,一个对话框(DialogBox)由两部分组成:1.对话框(资源)模板对话框(资源)模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。2.对话框类对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此需要从CDialog类派生一个新类,以完成特定的功能。,相应地,对话框的设计包括对话框模板的设计和对话框类的设计两个主要方面。与对话框有关的消息主要包括WM_INITDIALOG消息和控件通知消息。在对话框创建时将发出WM_INITDIALOG消息(初始化对话框消息),该消息的消息处理函数是OnInitDialog。OnInitDialog函数的主要用途是初始化对话框。对话框的控件会向对话框发送控件通知消息。,CObjectCCmdTargetCWndCDialogCCommonDialog(通用对话框)CColorDialog(颜色对话框)CFileDialog(文件对话框)CFindReplaceDialog(查找替换对话框)CPageSetupDialog(页面设置对话框)CFontDialog(字体对话框)CPrintDialog(打印对话框),MFC的部分对话框类继承关系如下:,MFC的CDialog类封装了用于对话框显示、关闭等常用操作的许多成员函数。5.1.1模式对话框和无模式对话框1.模式对话框模式对话框(ModalDialogBox)是指当对话框出现时,它的父窗口将暂时失效,只有处理完对话框所要求的动作后,才会把控制权交回给父窗口。,5.1对话框的使用,模式对话框一般创建过程:Step1:用CDialog:CDialog构造器创建模式对话框;Step2:用CDialog:DoModal函数显示对话框();Step3:用CDialog:EndDialog函数终止对话框。CDialog:CDialog构造函数:格式:CDialog(UINTnIDTemplate,CWnd*pParentWnd=NULL);功能:构造一个基于资源的模式对话框。参数:nIDTemplate-对话框模板资源ID号;pParentWnd-指向父窗口的指针,若为NULL,则对话框窗口为应用程序主窗口。,CDialog:DoModal函数:格式:virtualintDoModal();功能:激活并显示模式对话框,操作完成后返回对话框结果。返回:返回一个int值(IDOK或IDCANCEL),若创建失败,则返回0。CDialog:EndDialog函数:格式:voidEndDialog(intnResult);功能:退出模式对话框。参数:nResult-为DoModal函数的返回值。,2.无模式对话框/共存式对话框无模式对话框(ModalessDialogBox)又称共存式对话框,它不会令父窗口失效,因此无模式对话框出现时,使用者可以继续执行父窗口的工作。无模式对话框一般创建过程:Step1:用CDialog:Create函数创建无模式对话框();Step2:用CWnd:ShowWindow函数显示对话框();Step3:用CWnd:DestroyWindow函数终止对话框。注:由于函数CDialog:OnOK()和CDialog:OnCancel()调用EndDialog(),所以需要重载CDialog:OnOK()和CDialog:OnCancel();若按下Cancel按钮时,结束对话框,则在CDialog:OnCancel()中调用DestroyWindow()。,CDialog:Create函数:格式:BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);功能:创建一个无模式对话框。返回:若创建成功则返回非0。参数:nIDTemplate-对话框模板资源ID号;pParentWnd-指向父窗口的指针,若为NULL,则对话框窗口为应用程序主窗口。,CWnd:ShowWindow函数:格式:BOOLShowWindow(intnCmdShow);功能:显示窗口。返回:若窗口原可见,则返回非0;若窗口原隐藏,则返回0。参数:nCmdShow-规定如何显示CWnd窗口,常用取值有:SW_HIDE:隐藏窗口SW_SHOWMINIMIZED:最小化窗口SW_RESTORE:激活并显示窗口;若已最小化或最大化,则恢复其原大小和位置SW_SHOW:激活窗口并以其当前大小和位置显示窗口SW_SHOWMAXIMIZED:最大化窗口。,CWnd:DestroyWindow函数:格式:virtualBOOLDestroyWindow();功能:删除与CWnd对象连接的窗口。返回:若删除成功,则返回非0值。CDialog:OnOK函数:格式:virtualvoidOnOK();功能:当单击模式无模式对话框中Ok按钮(ID号为IDOK的按钮)时调用该函数。可重载该函数以实现特定的Ok按钮动作。CDialog:OnCancel函数:格式:virtualvoidOnCancel();功能:当单击模式无模式对话框中Cancel按钮(ID号为IDCANCEL的按钮)时调用该函数。可重载该函数以实现特定的Cancel按钮动作。,5.1.2使用对话框编辑器操作方法:Insert-Resource-Dialog-New。1.打开对话框编辑器。2.控件工具栏中各控件含义。3.控件布局工具栏。5.1.3对话框的编程程序例:用MFCAppWizard创建一SDI程序,程序运行后单击OUSE弹出一模式对话框。(见操作演示)主要步骤:Step1:用MFCAppWizard创建一SDI程序(设工程名为CH51A);Step2:Insert-Resource-Dialog-New添加对话框资源;,Step3:View-ClassWizard为对话框派生一个类CMyDlg;此步操作完成时要生成一对文件:MYDLG.H和MYDLG.CPP。Step4:View-ClassWizard选择视图类CXXXView,添加OnLButtonDown处理函数;Step5:在OnLButtonDown函数中添加以下代码:voidCXXXView:OnLButtonDown(UINTnFlags,CPointpoint)/TODO:Addyourmessagehandlercodehereand/orcalldefaultCMyDlgdlg;/生成并构造一个对话框对象dlg.DoModal();/显示对话框CView:OnLButtonDown(nFlags,point);Step6:在CXXXView.CPP文件开始的#include后添加以下代码:#includeMyDlg.h,程序例:为模式对话框增加一个命令按钮,单击该按钮弹出一消息框。按钮控件的常用消息有两个:、BN_CLICKED(单击按钮消息)当用户单击按钮时,由按钮控件发送给对话框。、BN_DOUBLECLICKED(双击按钮消息)当用户双击按钮时,由按钮控件发送给对话框。程序例:用MFCAppWizard创建一SDI程序,程序运行后单击OUSE弹出一无模式对话框。(见操作演示)主要步骤:Step1:用MFCAppWizard创建一SDI程序(设工程名为CH51B);Step2:Insert-Resource-Dialog-New添加对话框资源;,Step3:View-ClassWizard为对话框派生一个类CMyDlg;此步操作完成时要生成一对文件:MYDLG.H和MYDLG.CPP。Step4:View-ClassWizard选择视图类CH51BView,添加OnLButtonDown处理函数;Step5:在OnLButtonDown函数中添加以下代码:voidCCH51BView:OnLButtonDown(UINTnFlags,CPointpoint)/TODO:Addyourmessagehandlercodehereand/orcalldefaultCMyDlg*pDlg=newCMyDlg;pDlg-Create(IDD_DIALOG1,this);pDlg-ShowWindow(SW_SHOW);CView:OnLButtonDown(nFlags,point);,Step6:在CH51BView.CPP文件开始的#include后添加以下代码:#includeMyDlg.h从上面两种不同对话框的例子可以看出:模式对话框在显示时,未关闭窗口前其它窗口是不能成为活动窗口的;无模式对话框在显示时,未关闭窗口前其它窗口则是可以成为活动窗口的。,控件(Control)是能够完成输入/输出等特定功能的一种特殊窗口。系统定义的标准控件所对应的类一般是由CWnd派生的。5.2.1在对话框中创建和使用控件控件的创建方式有两种:1、在对话框模板中用编辑器指定控件即将控件的父窗口指定为对话框。2、把控件看作任一窗口的子窗口,通过调用Create()函数来创建,5.2控件的创建和使用,程序例:在本例中,可学到三种改变按钮控件标题的方法:法1:通过ClassWizard增加资源IDD_DIALOG1的CButton类对象CButtonm_MyBtn;在OnInitDialog()中添加:m_MyBtn.SetWindowText(“欢迎”);/将按钮控件标题设为/“欢迎”CWnd:SetWindowText函数:格式:voidSetWindowText(LPCTSTRlpszString);功能:设置窗口或控件的标题。参数:lpszString-指向用作新标题或控件文本的CString对象或字符串。,法2:通过CWnd:GetDlgItem获取按钮控件对象指针实现设新增按钮控件的ID号为IDC_BUTTON1,则与m_MyBtn.SetWindowText(“欢迎”);等价的代码如下:GetDlgItem(IDC_BUTTON1)-SetWindowText(“欢迎”);CWnd:GetDlgItem函数:格式:CWnd*GetDlgItem(intnID);功能:获取指定控件或子窗口的指针。参数:nID-控件或子窗口的ID标识符。法3:在对话框模板中,通过设定控件属性对话框实现,5.2.2控件的数据交换和数据验证DDV/DDX技术DDX(dialogdataexchange)DDV(dialogdatavalidation)UpdateData()函数实现控件的控制程序例(P200)UpdateData();M_mybtn.SetWindowText(m_strEdit),5.2.3控件的通用属性控件的属性对话框的修改,5.2.4控件的消息在控件的使用和编程过程中,用户可以向控件发送消息来完成特定的任务,或者是根据控件产生的消息来执行所需要的程序代码。当控件的状态发生改变时,控件会向其父窗口发送消息,该消息称为通知消息。每个消息均由一个MSG结构来记录。对一般控件,通知消息通常是WM_COMMAND。MSG结构中记录的该消息的几个常用参数说明如下:HIWORD(wParam)-控件ID标识符LOWORD(wParam)-控件的具体消息代码(如命令按钮有BN_CLICKED和BN_DOUBLECLICKED两个)lParam-控件的句柄,5.2.5如何在程序中加载其它的应用程序?有时,需要在一个应用程序中加载另一个应用程序。在VC中,有三个API函数WinExec()、ShellExecute()、CreateProcess()可以实现这种应用目的。WinExec最简单,原型如下:WinExec(LPCSTRlpCmdLine,/程序文件的路径UINTFuCmdShow/窗口显示方式);如,加载C盘windows文件夹下的notepad.exe记事本程序,代码如下:WinExec(c:windowsnotepad.exe,SW_SHOWMAXIMIZED);,运行EMAIL或网址,在某消息映射中添加实现EMAIL运行charszMailAddress80;strcpy(szMailAddress,mailto:netvc);ShellExecute(NULL,open,szMailAddress,NULL,NULL,SW_SHOWNORMAL);在某消息映射中添加实现网址启动charszMailAddress80;strcpy(szMailAddress,);ShellExecute(NULL,open,szMailAddress,NULL,NULL,SW_SHOWNORMAL);,可将控件分为三类:1、一般控件/标准控件表:一般控件控件名称MFC类静态控件CStatic()按钮控件CButton()(包括:命令按钮、单选钮、复选框)编辑控件CEdit()列表框CListBox()组合框CComboBox()滚动条CScrollBar(),5.3Window常用控件,2、新增的公共控件Windows支持18种新的公共控件,VC的MFC类库提供相应的类以方便程序员编程。表:公共控件控件名称MFC类动画控件CAnimateCtrl扩展组合框控件CComboBoxEx(比一般的组合框控件多一项功能:支持图象列表)日期时间控件CDateTimeCtrl标题控件CHeaderCtrl热键控件CHotKeyCtrl(它是一个窗口,用于显示用户输入的热键,如Ctrl+Shift+F8。使用热键可迅速地完成指定的操作。它常用于对话框中。),图象列表CImageListIP地址控件CIPAddressCtrl列表控件CListCtrl月历控件CMonthCalCtrl进展条控件CProgressCtrl丰富编辑控件CRichEditCtrl(是一个窗口,用户可以在其中输入和编辑文字,同时允许用户在编辑时使用丰富的格式特性,就像Word中使用脚注Footnote等一样。它既支持文字和图形格式,也可包括嵌入的OLE对象。)滑动条控件CSliderCtrl()旋转按钮控件CSpinButtonCtrl(),状态栏控件CStatusBarCtrl标签控件CTabCtrl工具栏控件CToolBarCtrl工具栏提示控件CToolTipCtrl树形控件CTreeCtrl3、ActiveX控件ActiveX(ActivetheInternet:激活Internet)控件:是MS提出的一组使用COM(ComponentObjectModel:组件对象模型)使得软件组件在网络环境中进行交互的技术集。另外,我们还可编写代码定制自己的控件(CustomControl)。,5.3.1静态控件和按钮1、静态控件静态控件的功能比较简单,可作为显示字符串、图标、位图用。静态控件一般不接收用户输入,也不能被选择。在对话框的资源编辑器的控件工具栏中,属于静态控件的有:静态文本(StaticText)、成组框(GroupBox)、静态图片(Picture)。成组框(GroupBox):是一个矩形框,其中有一组控件(如单选钮或复选框)。它可用于把具有公共用途的控件组织在一起。成组框不能被选中,应用程序也不能向它发送消息。静态图片(Picture)可将应用程序资源中的位图、图标等显示在该控件中。,2、按钮事实上,Wndows可为我们提供4种按钮:命令按钮/按键按钮(Button)、单选钮(RadioButton)、复选框(CheckBox)、自画按钮四种。MFC提供类CButton来实现按钮控件的功能。从对话框模板创建,只需向对话框类加入CButton类型的成员变量即可。(1)命令按钮/按键按钮(Button)几乎所有的对话框都使用命令按钮,应用程序通常使用命令按钮启动某一操作。(2)单选钮(RadioButton)应用程序通常在成组框中使用单选按钮,用户可以在一组相关但又对立的选项中进行选择,在同一时刻只能选中其中一个。它通常有两种状态:选中(按钮上有黑点)和未选中(没有黑点)。另外如果为三态单选钮,则还有禁止状态(灰钮)。,(3)复选框(CheckBox)应用程序通常在成组框中使用复选框,用户可以在一组相关但又独立的选项中进行选择,在同一时刻可以选择任意个选项。它通常有两种状态:选中(框中有)和未选中(没有)。另外如果为三态复选框,则还有禁止状态(灰框)。例:见教材P205图5.22。(4)自画按钮对于手工创建,则首先要调用CButton()构造对象,然后再调用CButton:Create创建按钮控件,并将其连接到CButton对象。最典型的自画按钮就是位图按钮,它是用位图图象代替文字标签的按钮控件。位图按钮的作用与命令按钮相同。MFC提供的CButton的派生类CBitmapButton(位图按钮类)来实现位图按钮的功能,通过几个独立的位图分别代表按钮的松开(Up)、按下(Down)、获取输入焦点(Focused)和禁止(Disabled)状态。,创建按钮CButton:Create成员函数:格式:BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constRECT参数:lpszCaption-按钮上显示的文字;dwStyle-按钮风格,除了Windows风格可以使用外(如WS_CHILD|WS_VISUBLE|WS_BORDER)还有按钮专用的一些风格,常用的有:BS_CHECKBOX复选框BS_DEFPUSHBUTTON默认命令按钮BS_OWNERDRAW自绘按钮BS_PUSHBUTTON命令按钮BS_RADIOBUTTON单选按钮BS_3STATE允许按钮有三种状态,即:选中,未选中,未定,Rect-窗口所占据的矩形区域;pParentWnd-父窗口指针;nId-该窗口的ID值。获取/改变按钮状态:通过调用intCButton:GetCheck得到当前是否被选中,返回0:未选中,1:选中,2:未定。调用voidCButton:SetCheck设置当前选中状态。3、按钮的消息BN_CLICKED:单击按钮消息;BN_DOUBLECLICKED:双击按钮消息。处理按钮消息:要处理按钮消息需要在父窗口中进行消息映射,映射宏为ON_BN_CLICKED(id,memberFun)id为按钮的ID值,就是创建时指定的nID值。处理函数原型为afx_msgvoidmemberFun();演示:P205【例Ex_Ctrls1】,voidCEx_CommCtrlsDlg:OnButton1()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();if(!m_bEnabled)return;intnID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4);if(nID=IDC_RADIO1)CEditDlgdlg;dlg.DoModal();if(nID=IDC_RADIO2)CListBoxDlgdlg;dlg.DoModal();if(nID=IDC_RADIO3)CComboDlgdlg;dlg.DoModal();if(nID=IDC_RADIO4)CScrollDlgdlg;dlg.DoModal();voidCEx_CommCtrlsDlg:OnCheck1()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();for(inti=0;iEnableWindow(m_bEnabled);BOOLCEx_CommCtrlsDlg:OnInitDialog()/TODO:AddextrainitializationhereCheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1);OnCheck1();returnTRUE;/returnTRUEunlessyousetthefocustoacontrol,4.技巧-位图按钮举例位图按钮是以位图(而不是文本)作标题的按钮。可用CBitmapButton位图按钮类和CBitmapButton:AutoLoad()函数实现。一个CBitmapButton对象按钮可以包含四幅位图,即:松开(Up)、按下(Down)、聚焦(Focused)、禁止(disabled),其中第一幅位图是必须的。实现步骤:用对话框资源编辑器在对话框中放置一个命令按钮(Button),并选中Styles卡片中Owner_draw/自绘按钮复选框为按钮设定标题名和ID(如ID编辑框输入:IDC_MYIMAGE,Caption编辑框输入:MYIMAGE)用资源编辑器生成四幅位图,并把位图资源ID设置成与按钮标题相对应的字符串ID这里要注意位图资源不能用数字ID,而是使用字符串ID(即用双引号将ID标识符括起来),使用格式如下:,按钮标题名U-松开(Up)位图按钮标题名D-按下(Down)位图按钮标题名F-聚焦(Focused)位图按钮标题名X-禁止(disabled)位图在对话框类中生成CBitmapButton对象(该类要用#include)CBitmapButtonm_BitmapButton;在CDialog:OnInitDialog()函数中调用CBitmapButton:AutoLoad()函数实现位图与按钮的关联此处代码如下:m_BitmapButton.AutoLoad(IDC_MYIMAGE,this);,CBitmapButton:AutoLoad函数:格式:BOOLAutoLoad(UINTnID,CWnd*pParent);功能:初始化对话框中的按钮为位图按钮。参数:nID-按钮的ID号;pParent-指向父窗口的指针。建立位图按钮的消息处理机制,这样就可以使用位图按钮了,5.3.2编辑框(EditBox)Edit控件是用来接收用户输入和编辑文本的控件。1编辑控件的属性和风格见编辑框的属性对话框。2编辑框的常用操作(1)文本、数字的设置和读取为使编辑控件允许输入和读取不同类型的数据,需要使用对话框数据交据交换DDX(DialogDataeXchange)和数据验证DDV(DialogDataVerification)技术。DDX技术的实质就是为控件建立一数据映射,DDX接收CDataExchange类(该类提供上下文信息,它没有基类)中的信息,并将数据在指定控件和数据变量或CString对象之间传递。DDV技术的实质是验证数据的有效性,它主要验证数据是否在给定的最大值和最小值之间。一旦数据超出了有效范围,DDV函数将显示一消息框,并在消息框中给用户提示合理的输入范围。DDX和DDV的关键技术是DDX全局函数和DDV全局函数(通常DDV函数要与DDX函数成对出现)。,CWnd:UpdateData成员函数:用法1:UpdateData(TRUE);/UpdateData();功能:将对话框中控件的数据传送至相关联的成员变量。用法2:UpdateData(FALSE);功能:将对话框中控件相关联的成员变量的值传送至控件。(2)口令设置当编辑框控件设置口令形式时,用户输入的各字符都被一特殊的字符显示(该特殊字符叫口令字符),缺省的口令字符是星号“*”。应用程序可用CEdit:SetPassWordChar成员函数设置口令字符:格式:voidSetPassWordChar(TCHARch);功能:设置或删除输入文本时显示在编辑控件中的口令字符。参数:ch-设定的口令字符,若为0则显示用户实际输入的字符。Edit控件口令字符也可通过该控件的Password属性设置,当Password属性设为True时,就会将输入的内容屏蔽为星号“*”。,注:采用这里的方法设置口令存在漏洞,故此法只能用于一般的口令设置(漏洞:当把其Password属性设为True时,虽然我们看来都是星号,但程序中的Edit控件实际仍是用户输入的密码,应用程序可以获取该控件中的密码,其他应用程序也可以通过向Edit控件发送WM_GETTEXT或EM_GETLINE消息来获取Edit控件中的内容。黑客程序正是利用Edit控件的这个特性,当发现当前探测的窗口是Edit控件并且具有ES_PASSWORD属性值时,则通过SendMessage向此编辑控件窗口发送WM_GETTEXT或EM_GETLINE消息,这样Edit框中的内容就一目了然了。,(3)选择文本由于在编辑框中编辑文本时,用户可能选择要某一段文本,所以通过voidCEdit:GetSel(int/TODO:Addextrainitializationherem_strAve=0.00;UpdateData(FALSE);returnTRUE;/returnTRUEunlessyousetthefocustoacontrol/EXCEPTION:OCXPropertyPagesshouldreturnFALSEvoidCEditDlg:OnButton1()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();doubleave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0;m_strAve.Format(%6.2f,ave);UpdateData(FALSE);,5.3.3列表框(ListBox)列表框用来列出许多项目供用户选择的控件。1列表框的风格列表框按性质可分为单选(缺省)、多选、扩展多选、非选四种类型。单选列表框(Single):用户一次只能选择一个选项;多选列表框(Multiple):用户一次只能选择几个选项;扩展多选列表框(Extended):用户可用Mouse拖动或其它特殊组合键进行选择;非选列表框(No):不提供选择功能。见教材P140图表。,2列表框基本操作在列表框被创建后,往往要添加、删除、改变或获取列表框中的列表项,该操作可调用ClistBox类成员函数实现。列表框的(列表)项可用字符串标识或用索引确定(索引表明某项在列表框中的位置,它以0为基数,即:第一项索引为0,第二项索引为1,。)。(1)添加列表项列表框创建时是一个空表,需要由用户添加或插入一些项。添加列表项可使用ClistBox:AddString成员函数:格式:intAddString(LPCTSTRlpszItem);功能:在列表框中添加字符串文本的一个列表项。若列表框未以LBS_SORT风格创建,则添加字符串到列表的尾部,否则插到列表中。,返回:添加列表项在列表框中的索引。错误返回LB_ERR,空间不足返回LB_ERRSPACE。参数:lpszItem-列表项的文本字符串。CListBox:InsertString用于将列表项插入到指定位置:格式:intInsertString(intnIndex,LPCTSTRlpszItem)功能:将字符串文本插入到指定位置。返回:字符串在列表框中插入位置的索引。错误返回LB_ERR,空间不足返回LB_ERRSPACE。参数:nIndex-指定插入字符串的索引(从0开始)。若为-1,则该串插入到列表的尾部。lpszItem-列表项的文本字符串。,CListBox:SetItemData成员函数:格式:intSetItemData(intnIndex,DWORDdwItemData);功能:设置与列表框中指定列表项相关的32位值。返回:若出错,则返回LB_ERR。参数:nIndex-列表项的索引dwItemData-指定与列表项相关的32位值CListBox:SetItemDataPtr成员函数:格式:intSetItemDataPtr(intnIndex,void*pData);功能:设置与列表框中指定列表项相关的指针。返回:若出错,则返回LB_ERR。,参数:nIndex-列表项的索引。pData-指定与列表项相关的指针。CListBox:SetItemData是将一个32数值与某列表项(由nIndex指定)关联起来,而CListBox:SetItemDataPtr可将数组、结构体等数据与列表项关联。与上面相对应的两个函数CListBox:GetItemData和CListBox:GetItemDataPtr分别用来获取相关联的用户数据。CListBox:GetItemDataPtr函数:格式:void*GetItemDataPtr(intnIndex);功能:获取与指定列表项关联的指针。返回:若调用成功,则返回获取的指针;若发生错误,则返回-1。参数:nIndex-列表项索引(从0开始)。,(2)删除列表项intCListBox:DeleteString(UINTnIndex)成员函数用于删除指定列表项,并返回列表中剩下的列表项个数。voidCListBox:ResetContent()成员函数可删除列表框中所有列表项。通过调用intCListBox:GetCount()成员函数将得到当前列表框中列表项的个数。(3)查找列表项通过调用CListBox:FindString成员函数可以在列表框中查找指定的列表项的位置。格式:intFindString(intnStartAfter,LPCTSTRlpszItem);功能:在列表框中查找指定的字符串的列表项。返回:若查找成功,则返回所匹配的列表项索引,若查找不成功则返回LB_ERR。,参数:nStartAfter-查找的开始位置索引号。若为-1,则从头至尾查找。LpszItem-要查找的列表项文本串。(4)选择列表项若获取当前所选列表项,可调用CListBox:GetCurSel成员函数:格式:intGetCurSel();功能:获取列表框中当前所选列表项的索引。若设置某列表项为选中状态,可调用CListBox:SetCurSel成员函数:格式:intSetCurSel(intnIndex);功能:设置列表框中某列表项为选中状态(高亮显示)。参数:nIndex-指定列表项的索引。,若获取某列表项的文本串,可使用CListBox:GetText成员函数:格式:voidGetText(intnIndex,CString功能:若获取某列表项的字符串。参数:nIndex-列表项的索引。rString-获取的字符串对象。3列表框的Notification消息列表框可以向父窗口发六种Notification消息:LBN_DBLCLK鼠标双击列表框中某项字符串时产生(映射宏:ON_LBN_DBLCLK)LBN_ERRSPACE列表框无法分配内存时产生LBN_KILLFOCUS/LBN_SETFOCUS在列表框失去/得到输入焦点时产生LBN_SELCHANGE列表框选择的项发生改变时产生LBN_SELCANCEL取消当前列表框的选项时产生,使用以上几种消息映射的方法为定义原型如:afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。如果在对话框中使用列表框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。4CCheckListBox类(*)在MFC4.2版本中添加了CCheckListBox类(复选列表框类),该类是由CListBox派生并拥有CListBox的所有功能,不同的是可以在每行前加上一个复选框。必须注意的是在创建时必须指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE风格。,voidCListBoxDlg:OnDataAdd()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(m_strName.IsEmpty()MessageBox(姓名不能为空!);return;m_strName.TrimLeft();m_strName.TrimRight();if(m_List.FindString(-1,m_strName)!=LB_ERR)MessageBox(列表框中已有相同姓名,不能添加!);return;intnIndex=m_List.AddString(m_strName);SCOREdata;data.score1=m_nScore1;data.score2=m_nScore2;data.score3=m_nScore3;m_List.SetItemDataPtr(nIndex,newSCORE(data);,5示例:P214例Ex_Ctrls3,voidCListBoxDlg:OnDataDel()/TODO:AddyourcontrolnotificationhandlercodehereintnIndex=m_List.GetCurSel();if(nIndex!=LB_ERR)m_List.DeleteString(nIndex);m_strName.Empty();m_nScore1=m_nScore2=m_nScore3=0;UpdateData(FALSE);elseMessageBox(当前没有选择项或列表框操作失败!);voidCListBoxDlg:OnDestroy()CDialog:OnDestroy();/TODO:Addyourmessagehandlercodeherefor(intnIndex=m_List.GetCount()-1;nIndex=0;nIndex-)delete(SCORE*)m_List.GetItemDataPtr(nIndex);voidCListBoxDlg:OnSelchangeList1()/TODO:AddyourcontrolnotificationhandlercodehereintnIndex=m_List.GetCurSel();if(nIndex!=LB_ERR)m_List.GetText(nIndex,m_strName);SCORE*data=(SCORE*)m_List.GetItemDataPtr(nIndex);m_nScore1=data-score1;m_nScore2=data-score2;m_nScore3=data-score3;UpdateData(FALSE);,5.3.4组合框(ComboBox)组合框窗口一般由一个编辑框和一个列表框组成。1组合框的风格及类型组合框按主要性质可分为简单组合框、下拉式组合框(缺省)、下拉式列表组合框三种类型。简单组合框(Simple):其列表框不用下拉,而是直接显示出来。下拉式组合框(DropDown):Mouse单击下拉按钮后显示下拉的列表框。下拉式列表组合框(DropList):Mouse单击下拉按钮后显示下拉的列表框,但编辑框无效。组合框的其它一些风格见教材P146图表。2组合框常用操作由于组合框内包含了列表框,所以列表框的功能都能够使用,如:intCComboBox:AddString(LPCTSTRlpszItem)向组合框添加字符串项;,intCComboBox:DeleteString(UINTnIndex)用于删除指定的索引项;intCComboBox:InsertString(intnIndex,LPCTSTRlpszItem)将字符串插入到指定位置;voidCComboBox:ResetContent()可以删除组合框中所有项和编辑文本;intCComboBox:GetCount()获得当前组合框中列表项的个数。如果需要得到/设置当前被选中的项的位置,可以调用intCComboBox:GetCurSel()/intCComboBox:SetCurSel(intiIndex)。通过调用intCComboBox:GetLBText(intnIndex,LPTSTRlpszText)获得组合框内指定列表项的字符串。通过调用intCComboBox:FindString(intnStartAfter,LPCTSTRlpszItem)可以在当前所有项中查找指定的字符串的位置,nStartAfter指明开始查找的位置索引号。intCComboBox:SelectString(intnStartAfter,LPCTSTRlpszItem)可以选择指定的字符串。,此外编辑框的功能都能够使用。CComboBox:GetEditSel用于获取组合框的编辑框中被选中的字符位置:格式:DWORDGetEditSel();功能:获取组合框的编辑框中当前选择的首尾字符位置。返回:LOWORD-开始位置,HIWORD-选择字符串中的最后一个未选字符的位置。若为不含编辑框的下拉式列表组合框,则返回CB_ERR。CComboBox:SetEditSel用于设置组合框的编辑框中被选中的字符位置:格式:BOOLSetEditSel(intnStartChar,intnEndChar);功能:设置组合框的编辑框中要选择的字符位置。返回:成功,则返回非0。参数:nStartChar-指定开始位置。nEndChar-指定终止位置。,BOOLCComboBox:LimitText(intnMaxChars)用于设置组合框的编辑框中可输入的最大字符数。组合框中编辑控件的剪贴板功能CComboBox:Copy、CComboBox:Clear、CComboBox:Cut、CComboBox:Paste均可以使用。3组合框的Notification消息组合框可以向父窗口发送11种消息,消息前缀名为CBN_。CBN_DBLCLK鼠标双击组合框的某项字符串时产生CBN_DROPDOWN组合框的列表框被弹出时产生CBN_KILLFOCUS/CBN_SETFOCUS在编辑框失去/获得输入焦点时产生CBN_SELCHANGE组合框中选择的列表项改变时产生CBN_EDITUPDATE组合框中的编辑框内容被更新时产生CBN_EDITCHANGE组合框的编辑框内容改变后产生,使用以上几种消息映射的方法为定义原型如:afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。如果在对话框中使用组合框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。4示例P219【例Ex_Ctrls4】主要程序代码:voidCComboDlg:OnSelchangePattern()/TODO:AddyourcontrolnotificationhandlercodehereintnIndex=m_Pattern.GetCurSel();if(nIndex!=CB_ERR)m_nDrawPattern=m_Pattern.GetItemData(nIndex);Invalidate();,voidCComboDlg:OnPaint()CPaintDCdc(this);/devicecontextforpainting/TODO:AddyourmessagehandlercodehereCWnd*pWnd=GetDlgItem(IDC_DRAW);pWnd-UpdateWindow();CDC*pDC=pWnd-GetDC();CBrushdrawBrush;drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0);CBrush*pOldBrush=pDC-SelectObject(/returnTRUEunlessyousetthefocustoacontrol/EXCEPTION:OCXPropertyPagesshouldreturnFALSE,5.3.5滚动条(ScrollBar)滚动条是由两端的滚动箭头和中间的滚动框和其中的滚动块组成。根据滚动条的走向可分为水平滚动条和垂直滚动条两种。1滚动条基本操作MFC中,CScrollBar类是对滚动条控件提供支持的类,它封装了滚动条控件的各种操作,包括设置和获取滚动条的范围及滚动块的位置等。在创建滚动条后需要调用CScrollBar:SetScrollRange设置滚动范围:格式:voidSetScrollRange(intnMinPos,intnMaxPos,BOOLbRedraw=TRUE);功能:设置滚动块在滚动条控件中的范围。参数:nMinPos-指定滚动块最小滚动位置。nMaxPos-指定滚动块最大滚动位置。bRedraw-重画标志,为TRUE时表示滚动条被重画。,CScrollBar:SetScrollPos用来设置当前滚动块在滚动条控件的位置:格式:intSetScrollPos(intnPos,BOOLbRedraw=TRUE);功能:设置当前滚动块在滚动条控件的位置。返回:滚动块在滚动条控件的原位置。参数:nPos-新的滚动块位置。bRedraw-重画标志,为TRUE时表示滚动条被重画。,CScrollBar:GetScrollRange用于获得滚动范围:格式:voidGetScrollRange(LPINTlpMinPos,LPINTlpMaxPos);功能:获取滚动块在滚动条控件中的范围。参数:lpMinPos-得到指向滚动块最小滚动位置的指针。lpMaxPos-得到指向滚动块最大滚动位置的指针。CScrollBar:GetScrollPos用来获得当前滚动块在滚动条控件的位置:格式:intGetScrollPos();功能:获得当前滚动块在滚动条控件的位置。,CScrollBar:ShowScrollBar成员函数:格式:voidShowScrollBar(BOOLbShow=TRUE);功能:显示/隐藏滚动条。CScrollBar:EnableScrollBar成员函数:格式:BOOLEnableScrollBar(UINTnArrowFlags=ESB_ENABLE_BOTH);功能:设置滚动条上箭头是否为允许状态
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泉州华光职业学院《翻译理论与实践》2023-2024学年第二学期期末试卷
- 石家庄工商职业学院《法律英语》2023-2024学年第二学期期末试卷
- 山西财贸职业技术学院《电脑音乐制作》2023-2024学年第二学期期末试卷
- 重庆电子工程职业学院《小学数学教学与研究(一)》2023-2024学年第二学期期末试卷
- 太原师范学院《儿童画创作》2023-2024学年第二学期期末试卷
- 房顶花园设计施工方案
- 2025至2031年中国多面液压抽芯模具行业投资前景及策略咨询研究报告
- 2025至2031年中国可编址防宠物被动红外探测器行业投资前景及策略咨询研究报告
- 2025至2031年中国全瓷桥梁砖行业投资前景及策略咨询研究报告
- 2025至2031年中国PAR38大功率LED射灯行业投资前景及策略咨询研究报告
- 超声支气管镜相关知识
- 新视野大学英语(第四版)读写教程4(思政智慧版)课件 B4 Unit 4 Man and nature Section A
- 2025年河南省中招理化生实验操作考试ABCD考场评分表
- 2025年信阳职业技术学院单招职业适应性测试题库带答案
- 毕业设计(论文)-辣椒采摘装置结构设计
- 2024年宁波市消防救援支队社会招录政府专职消防员考试真题
- (高清版)DB35∕T 2230-2024 山岭公路隧道绿色施工信息化监测技术规程
- 新疆地区历年中考语文文言文阅读试题42篇(含答案与翻译)(截至2024年)
- 图解-“健康中国2030”规划纲要-医学课件
- 第十八届“地球小博士”全国地理知识科普竞赛题库(附答案)
- 安全在心中幸福伴我行
评论
0/150
提交评论