![[高等教育]MFC对话框.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb1.gif)
![[高等教育]MFC对话框.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb2.gif)
![[高等教育]MFC对话框.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb3.gif)
![[高等教育]MFC对话框.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb4.gif)
![[高等教育]MFC对话框.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb5.gif)
已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对话框和常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:移动、最大化、最小化等)都可在对话框中实施,一般来说,在对话框中通过各种控件(如:按钮、编辑框、列表框、组合框等)来和用户进行交互。控件是在系统内部定义的用于和用户交互的基本单元。一、对话框的使用 Visual C+提供的对话框编辑器能“可视”地进行设计、编辑,并可用ClassWizard为对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等操作的许多功能函数,例如:DoModal函数用来显示模式对话框并返回用户操作的结果。1、模式对话框(为186附加举例页) 所谓模式对话框是指,当对话被弹出时,用户必须在对话框中进行相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。平常我们所见到的对话框大多是模式对话框。例:模式对话框(通过菜单命令弹出)1) 建一个单文档(SDI)应用程序2) 创建对话框模板InsertResource选中Dialog单击New拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建模式对话框”。3)鼠标右键对准对话框的任何位置单击,选择properties选项,设置ID为IDD_MYDIALOG4)给对话框创建类 双击新建对话框的任何位置,单击OK,写类名为“CMyDlg”,保证”CDialog”作为该类的基类。 5)创建菜单命令:a) 打开资源编辑器的菜单项Menub) 双击IDR_MAINFRAMEc) 双击右边空白菜单,点开pop_up(让它是空白),在名字处写”弹出对话框(&A)”,ID处写ID_PUPDIALOG6)将菜单命令连接到主框架程序中,完成ID_PUPDIALOG的消息映射: ViewClassWizard保证Class name里是CMainFrame,在ObjectIDs里找到ID_PUPDIALOG点黑Messages里(右边)点COMMAND建立主框架对象方法并加代码:void CMainFrame:OnPupdialog() CMyDlg MyDlg;MyDlg.DoModal(); /DoModal()是CDialog类成员函数,通过调用该/函数将显示对话框。 7)在CMainFrame.cpp文件里加: #include “MyDlg.h” / 之后运行。 2、无模式对话框(为186附加页)非模式对话框,弹出后,可一直保留在屏幕上,用户可继续在应用中进行其它操作或启动其它应用程序,当需要使用对话框时,只需象激活一般窗口一样激活对话框即可。1)建一个SDI(单文档)应用程序2)创建对话框模板InsertResource点黑DialogNew拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建非模式对话框”。3)为对话框创建类点出对话框(IDD_DIALOG1缺省的ID号),双击对话框中的任意位置,出现一个表,你点OK出现一个对话框,你写类名:CDlg保证基类为CDialog4)创建菜单打开工作区MenuIDR_MAINFRAME双击空白菜单写“非模式对话框”关闭再点下面空菜单写名字“显示非模式对话框”ID处写ID_DLG.5) 添加菜单命令消息 WiewClassWizardMessage Maps保证Class name里是Wiew类(视图类),在Object IDS里找到ID_DLG(菜单的ID)点黑右边COMMAND双击它OK6)a、你在Wiew.h里加:#include “Dlg.h” b、在public:里加:CDlg *dlg;/创建CDlg对象 c、在View.cpp的OnDlg()函数里加: CMyView:OnDlg() dlg=new CDlg(this); dlg-Create(IDD_DIALOG1);/使对话框摸板从资源中创建一个非/模式对话框 dlg-ShowWindow(SW_RESTORE);/显示对话框 二、使用对话框编辑器(对话框编程)(187页)*1、可建一个单文档应用程序名为“对话框编程”,在此程序中加入一个对话框: InsertResource点黑Dialognew 出现188页的图2、拖入一些控件,对这些控件进行排序、布局、大小调整、上下对齐、测试等。*最后在对话框IDD_DIALOG1上留一个按钮控件,其标识符为:IDC_BUTTON13、识别控件工具栏(188页)4、在加对话框时,InsertResource点开+Dialog见有7类对话框,分别了解其不同用途(见192页)。5、对话框的属性A、ViewProperties B、按Alt+Enter C、用鼠标右键单击对话框模板Properties都能弹出对话框的属性框,见书193页对属性General的解释。*6、为对话框添加类(194页) 对准对话框的任意非控件区域双击鼠标,将弹出书194页图5.11所示的对话框,询问是否为对话框资源创建一个新类单击OK弹出书194页图5.12所示的对话框你定义一个新类的名字如:CMyDlg(注意:类名必须以C打头),下面的基类Base class和ID标识符Dialog ID内容一般不改。* 7、添映射消息(195页) 接上,点OK出现“MFC ClassWizard”对话框,如书195页图5.13所示(保证类名处是CMyDlg)选定点黑IDC_BUTTON1单击BN_CLICKED消息Add Function出现书195页图5.14对话框OKEdit Code *8、添加用户代码(195页)接上,到MyDlg.cpp文件中,写:void CMyDlg:OnButton1() MessageBox(“欢迎进入对话框的设计!”);/这时运行还不见对话框,接下*9、在程序中使用对话框(196页) 由于对话框的代码是以类为模块来设计的,使用时需要在程序中加入该类的头文件,并定义一个类对象,然后就可以使用该类的相关成员。项目工作区FileView打开应用程序的.cpp文件,在前面加: #include “MyDlg.h” 在InitInstance函数体中的return TRUE语句之前添加下列代码: CMyDlg dlg; dlg.DoModal();/DoModal()函数是负责对话框的显示和终止。运行!则直接显示出对话框,单击按钮则出现“欢迎进入对话框的设计”的字样。本例建的CMyDlg类及以后在各个项目中建立的类,在文档、视图、主框架类中都可同样使用。(1)添加对话框资源对话框资源类型:IDD_DIALOGBAR 对话条,往往和工具条放在一起。IDD_FORMVIEW 一个表状风格的对话框,用于无模式对话框或视图类IDD_OLE_PROPPAGE_LARGE一个大的OLE属性页IDD_OLE_PROPPAGE_SMALL一个小的OLE属性页IDD_PROPPAGE_LARGE一个大属性页,用于属性对话框IDD_PROPPAGE_MEDIUM一个中等大小的属性页,用于属性对话框IDD_PROPPAGE_SMALL一个小的属性页,用于属性对话框(2)改变对话框的属性ID框:修改或选择对话框的标识符名称Caption框:输入对话框的标题名称,中英文均可。Font按钮:单击此按钮可选择字体的种类(如宋体)及尺寸(如9号)Xpos/Ypos:对话框左上角在父窗口中的X,Y坐标都为0时表示居中Menu框:默认值为无,当对话框需要选单时输入或选择指定的选单资源Class name:默认值为无,它提供C/C+语言编程时所需要的对话框类名,对 MFC类库的资源文件来说,该项不被激活三、控件的创建和使用方法(197页) 控件是在系统内部定义的能够完成特定功能的控制程序单元。在应用程序中使用控件不仅简化了编程,还能完成常用的各种功能。为了更好地发挥控件的作用,用户还必须理解和掌握控件的属性、消息以及创建和使用方法。注:控件工具栏及各按钮含义:1、 控件的选择2、静态文本3、组框4、复选框5、组合框6、水平滚动条7、旋转按钮8、滑动条9、列表视图10、标签11、复合编辑12、月历13、用户定制工具14、静态图片15、编辑框16、按钮17、单选框18、列表框19、垂直滚动条20、进展条21、热键22、树形视图23、动画24、日期选择25、IP地址26、组合框的扩展(从左边往下数,再从右边往下数) 1、控件的创建和使用方法(197页) 控件的创建方法有2种:1)是在对话框摸板中用编辑器指定控件,也就是说,将控件的父窗口指定为对话框,如:上面的BUTTON1按钮控件。2)是将控件看做任意一窗口的子窗口,并通过调用相应的Create函数来创建。下面我们用第2种方法创建控件(此种方法涉及的内容复杂,也不能发挥对话框编辑器可视化编程的优点,故不提倡此种方法,而用第一种方法)。(1)打开上个项目,在CMyDlg类的头文件MyDlg.h里添加一个按钮类CButton 指针变量:(public:里) CButton *m_btnWnd;(2)按Ctrl+W或ViewClassWizard打开MFClassWizard对话框,并切换到Message Maps页面,在Object IDs列表中选定点黑CMyDlg项,并在Message列表中找到WM_INITDIALOG消息点黑AddFunctionEditCode(3)添加代码:BOOL CMyDlg:OnInitDialog() - m_btnWnd=new CButton();/构造按钮控件/下面“”按钮上的字,创建子窗口|窗口最初是可见的|创建的是按键按钮 m_btnWnd-Create(“你好”,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(20,20,120,60),this,201);/创建 CFont *font=this-GetFont();/获取对话框的字体 m_btnWnd-SetFont(font);/设置控件字体 return TRUE;/(程序原有的)代码中,Create用来创建一个按钮控件,该函数的第一个参数用来指定该按钮的标题,第二个参数用来指定控件的风格,第三个参数用来指定它在父窗口中的位置和大小,第四个参数用来指定父窗口指针,最后一个参数是指定该控件的标识值。WS_CHILD表示按钮是作为对话框的一个子窗口来创建的。WS_VISIBLE是使控件可见。BS_PUSHBUTTON表示创建的是按键按钮。 (4)编译并运行2、控件的数据交换和数据效验(数据成员)(198页) 使用ClassWizard可以很容易地定义一个控件的成员变量及其数据范围。例如:上面的CMyDlg类的按钮控件IDC_BUTTON1添加并使用其成员变量m_MyBtn,步骤如下:(1)打开上例项目,ViewClassWizardMember Variables选定Class name中为CMyDlg,然后在Control IDs列表中点黑IDC_BUTTON1AddVariable(或双击鼠标左键),弹出Add Member Variable对话框,如书198页图5.17写好数据成员名:m_MyBtn 下面Category和Variables type里的不动OK见表上已建成(如:书199页图5.18)下面是建成员变量的三个对话框图:(2)再向对话框加一个编辑控件,并加成员变量m_strEdit,类型为CString置数值为Value(注:Category框内可选择Value或Control两种类型。Control所对应的变量类型就是MFC为该控件封装的控件类。Value所对应的是数值类型。不同控件所提供的关联的数值类型各不同,例如:对于编辑框来说,Variables type中的数值类型有CString (字符串),int,UINT(32位无符号整数),long(32位带符号整数), DWORD(32位无符号整数,段地址和相关的偏移),float,double,BYTE(8位无符号整数),short,BOOL等)。OK后在下面写20为最大值。(下面见书199200页)打开本项目的MyDlg.h见到: CButton m_MyBtn; CString m_strEdit;在MyDlg.cpp里见到: m_strEdit=_T(“ “);在DoDataExchange函数体内见: DDX_Control(pDX,IDC_BUTTON1,m_MyBtn); DDX_Text(pDX,IDC_EDIT1,m_strEdit);/IDC_EDIT1是标识m_strEdit/是成员变量DDV_MaxChars(pDX,m_strEdit,20);/校验m_strEdit的最大字符个数不超过20。 (3)将CMyDlg:OnButton1()修改成: void CMyDlg:OnButton1() UpdateData();/默认参数值是真TRUE m_MyBtn.SetWindowText(m_strEdit); /GetDlgItem(IDC_BUTTON1)-SetWindowText(“欢迎”);/用此条代替/上条也行, /单击Button1按钮,此按钮名就是“欢迎”。之后运行该程序,当在编辑框输入Hello后,单击Button1按钮,则该按钮的名称就变成了编辑框中的内容Hello了,见书200页。八、控件的通用属性 (201页) 在控件的属性对话框中含有许多属性,如:书201页(按钮的属性对话框),General(一般属性)、Styles(控件的风格)、Extended Styles(控件的扩展风格)。Styles和Extended Styles是用来设定控件的外观的、辅助功能的。不同控件具有不同的风格和扩展风格。见201页表5.5.控件的General属性:ID:控件的标识符,每种控件都有默认的ID,例如按钮控件为IDC_BUTTON1Caption:控件的标题,大多数控件都有默认的标题,例如按钮控件为Button1Visible:指定控件初始化时是否可见Group:指定控件组中的第一个控件,如果该项被选中,则此控件后的所有控件均被看成一组,成组的目的是可以让用户键盘方向键在同一组控件中进行切换Help ID:若该项被选中,则为该控件建立一个上下文相关的帮助标识符Disabled:指定控件初始化时是否禁用TabStop:若该项被选中,则用户可以使用Tab键来选择控件九、控件的消息 对于每个消息,系统都会用一个MSG结构来记录(见201页)。对一般控件来说,其通知消息是一条WM_COMMAND消息(见202页)。例:1、打开上面的项目“对话框”2、ViewClassWizard在CMyDlg里(左边的Object IDs里点黑CMyDlg) 在Message里找到OnCommand点黑Add FunctionEdit Code写: BOOL CMyDlg:OnCommand(WPARAM wParam,LPARAM lParam) WORD nCode=HIWORD(wParam);/控件的通知消息 WORD nID=LOWORD(wParam);/控件的ID号 if(nID=201)&(nCode=BN_CLICKED)/用户单击按钮产生的消息MessageBox(你按下了你好按钮!); - /WORD是16位无符号整数 /EN_CHANGE是编辑框中的文本被改变时发出的消息BN_CLICKED是当用户单击按钮产生的消息:单击对话框中的“你好”按钮,弹出你按下了你好按钮!的消息对话框。由于Create创建的控件无法用ClassWizard直接映射其消息,因此上述方法祢补了ClassWizard的不足,使用时要特别注意。见书202页通知消息是所有Windows控件所共有的:NM_CLICK 在控件中单击鼠标左键按钮NM_DBLCLK 在控件中双击鼠标左键按钮NM_RDBLCLK在控件中双击鼠标右键按钮NM_RETURN当控件具有输入焦点时按下ENTER键NM_SETFOCUS控件得到输入焦点NM_KILLFOCUS控件失去输入焦点NM_OUTOFMEMORY没有足够的内存使控件十、常用控件静态控件 CStatic 用于向用户显示一些几乎固定不变的文字或图形描述按 钮 CButton 用于产生某些命令或改变某些选项设置编辑框 CEdit 可完成文字的输入、输出双向操作,使用户能查看并编辑文字 列表框 CListBox显示一个列表,让用户从中选取一个或多个项组合框 CComboBox它把列表框和编辑框有机地组合在一起,用户不仅能选择列表中已有的项,还能编辑出新的项滚动条 CScrollBar通过滚动块在滚动条上的移动来改变某些数值进展条 CProgressCtrl 用于指示一个操作的进度旋转按钮 CSpinButtonCtrl 又称“上下控制”,是一对箭头按钮,用户单击它们可以增加或减小某个值滚动条 CSliderCtrl 是一个包含一个滑动块和可选的刻度线,用户可以用鼠标或方向键沿某个方向移动滑动块图象列表 CImageList是一系列相同大小的图象的集合标签控件 CTabCtrl类似于一个笔记本的分割器或一个文件柜上的标签,使用它可以将一个窗口或对话框的相同区域定义为多个页面1、静态控件 静态控件是用于显示一个字符、框、矩形、图标、位图或增强的图元文件,它可以用做标签、框或用于分隔其它的控件。一个静态控件一般不接受用户输入,也不产生通知消息。在对话框编辑器的控件工具栏中,属于静态控件的有:静态文本(Static Text)、组框(Group Box)、图片控件(Picture)三种。其中,静态图片控件的属性对话框如:书204页图5.21所示,表5.7列出了其一般属性和风格的各个项的意义。我们可以选择Type(图片类型)、Image(图象资源)两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中。另外,用户还可设置其风格来改变控件的外观以及图象在控件的位置等。静态图片控件的General和Style属性对话框:Type 图片类型,用户可以从中选择Frame(框)、Rectangle(矩形区域)、Icon(图标)、Bitmap(位图)、Enhanced Metafile(增强图元文件,它是各种绘图命令的集合)Image 当图片类型为Icon或Bitmap时,通过此框可选择指定的资源ID号 设置Frame和Rectangle的颜色,它可以是black(黑色)、white(白色)、 gray(灰色)、或者是具有3D外观的etched(腐蚀色)Sunken 选中时,在控件的周围有下沉的边框Notify 选中时,当用户单击或双击图片时会向其父窗口发出通知消息Right justify 选中时,用户重置图片大小,图片右下角是固定不变的Border 选中时,图片周围有边框Center image 选中时,图片显示在控件中央,其余区域由图片左上角的象素颜色来填充Real size image选中时,按图片的原始大小来显示,超过控件区域的部分被裁剪 在它的属性中,用户可以选择Type(图片)、Image(图象资源)两个组合框中的有关选项内容,并可将应用程序资源中的图标、位图等内容显示在该静态图片控件中,另外,用户还可以设置其风格来改变控件的外观以及图象在控件的位置等。例1:图片控件(将一个.bmp图形显示在图片控件上)(附加举例)1)建一个单文档(SDI)应用程序2)创建对话框模板: InsertResource点黑Dialognew3)将图片控件Picture拖到对话框上,并拉大些,将OK和CANCEL拖到下面。4)向项目中插入一个 .bmp图片:InsertResource点黑BitmapImport在出现的表中要下拉出:所有文件(*.*)在某处找到一个.bmp图形Import放到此项目中。5)将这个图片放到图片控件上 右键对准图片控件单击出现属性框Type处下拉置Bitmapimage处下拉置IDB_BITMAP1,就将图片加到了图片控件上。6)为刚才建的对话框添加类 双击新建对话框的任何位置OK类名写:CMyDlg7)创建一个菜单项,用来显示对话框 ResourceViewMenuIDR_MAINFRAME双击空白菜单点POPUPID处写:ID_DLG 菜单名写:显示图片对话框关闭8)将菜单命令映射到View中去 ViewClassWizard要加到View中ID-DLGCOMMANDEditCode (在View.h的头部加:#include “MyDlg.h” 在public:下加:CMyDlg *dlg;)并加代码: CMyView:OnDlg() dlg=new CMyDlg(this); dlg-Create(IDD_DIALOG1); dlg-ShowWindow(SW_RESTORE); 9)编译运行2:按钮常见的按钮有三种类型:(204页)(1)按键按钮 按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命令按钮。(2)单选按钮 其外形是在文本前有一个圆圈,当它被选中时,就标上一个黑点。(3)复选框其外形是在文本前有一个空心方框,当它被选中时,就加上一个“”标记1)按钮的消息 常见的按钮映射消息有两个:(1) BN_CLICKED(单击按钮)(2)BN_DOUBLE_CLICKED(双击按钮)见下图:2)按钮选中操作 最常用的按钮操作是设置或获取一个按钮或多个按钮的选中状态。CButton类的以下2个成员函数原型如下: void SetCheck(int nCheck); /设置指定按钮的选中状态 int GetCheck()const; /获取指定按钮的选中状态 其中:nCheck和GetCheck函数返回的值可以是:0表示不选中,1表示选中, 2表示不确定(仅用于三态按钮) 而对于多个单选按钮的选中状态的设置或获取,需要使用CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton,它们的原型如下:void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);其中,nIDFirstButton和nIDLastButton分别指定这组单选按钮的第一个和最后一个按钮ID值,nIDCheckButton用于指定要设置选中状态的按钮ID值,函数GetCheckedRadioButton返回被选中的按钮ID值。例2:用静态图片、单选按钮、复选框和按键按钮控件设计界面,运行结果如:书205页图5.23所示。刚开始,所有单选按钮都是灰显的,我们不能选择它们,这种情况称为“禁用”,而当选中“允许”复选框后,所有单选按钮可以使用,用户选定一个单选框后,单击应用按钮,则弹出相应的消息对话框。(1)用MFC AppWizard(exe)创建一个名为:“按钮的使用”的基于对话框的应用程序。(第一步将类型选择为Dialog Based,然后按Finish按钮即可。)(2)打开属性对话框,将其标题改为“使用Windows常用控件”。(3)参看书205页图5.23的控件布局,用编辑器为对话框添加如书206页表5.8所示的一些控件。(4)说明:上面4个单选按钮的Tab次序应连续,而且从IDC_RADIO1到IDC_RADIO4依次增加。(5)ViewClassWizard(或按Ctrl+W快捷键)切换到Member Variables页面,在Class name中选择CMyDlg,在Control IDs里选中点黑IDC_CHECK1复选框ID号Add Variables按钮,为其添加一个BOOL类型的成员变量 m_bEnabledOK。(6)切换到ClassWizard的Message Maps页面,分别选中点黑复选框IDC_CHECK1和按钮IDC_BUTTON1,分别为其添加映射消息,并添如下代码: void CMyDlg:OnCheck1() UpdateData(); for(int i=0;iEnableWindow(m_bEnabled);/EnableWindow是使一个控件窗口禁用或允许使用,它取决于该函数/的参数,为TRUE时表示可以使用,否则禁用。void CMyDlg:OnButton1() UpdateData(); if(!m_bEnabled) return; int nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4); if(nID=IDC_RADIO1) MessageBox(“1”); if(nID=IDC_RADIO2) MessageBox(“2”); if(nID=IDC_RADIO3) MessageBox(“3”); if(nID=IDC_RADIO4) MessageBox(“4”); (7)在此文件中找到CMyDlg:OnInitDialog函数体,添加下列代码: BOOL CMyDlg:OnInitDialog() CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1); /设置第一个单选按钮为选中 OnCheck1(); return TRUE;/此条是原有的(8)编译运行3、编辑框 编辑框是一个让用户从键盘输入和编辑文本的矩形窗口,用户可以通过它,很方便地输入各种文本、数字或口令,也可使用它来编辑和修改简单的文本内容。 当编辑框被激活且具有输入焦点时,就会出现一个闪动的插入符(又可称为文本光标),表明当前插入点的位置。 1)编辑框的属性和风格 Align text 各行文本对齐方式:Left,Center,Right,默认时为LeftMultiline 选中时为多行编辑框,否则为单行编辑框Number 选中时控件只能输入数字Horizontal scroll 水平滚动,仅对多行编辑框有效Auto HScroll当用户在行尾键入一个字符时,文本自动向右滚动Vertical scroll 垂直滚动,仅对多行编辑框有效Auto VScroll 当用户在最后一行按ENTER键时,文本自动向上滚动一页,仅对多行编辑框有效Password 选中时,键入编辑框的字符都将显示为”*”,用于口令设置,仅对单行编辑框有效No hide selection通常情况下,当编辑框失去键盘焦点时,被选择的文本仍然反色显示,选中时,则不必具备此功能OEM convert 选中时,实现对特定字符集的字符转换Want return 选中时,用户按下ENTER键,编辑框中就会插入一个回车符Border 选中时,在控件的周围存在边框Uppercase 选中时,键入在编辑框的字符全部转换成大写形式Lowercase 选中时,键入在编辑框的字符全部转换成小写形式Read-Only 选中时,防止用户键入或编辑文本多行编辑框具有简单文本编辑器的常用功能,例如:它可以有滚动条,用户按Enter键另起一行以及文本的选定、复制、粘贴等常见操作。而单行编辑框功能较简单,它仅用于单行文本的显示和操作 2)编辑框的基本操作A、设置口令 口令设置在编辑框中不同于一般的文本编辑框,用户输入的每个字符都被一个特殊的字符代替显示。这个特殊的字符称为口令字符。默认的口令字符是”*”。应用程序可以用成员函数CEdit:SetPasswordChar来定义自己的口令字符,其函数原形如下: void SetPasswordChar(TCHAR ch);其中,参数ch表示设定的口令字符;当ch=0时,编辑框内将显示实际字符。B、选择文本编程选择文本,调用成员函数CEdit:SetSel来实现,还有:CEdit:GetSel和CEdit:ReplaceSel,它们分别用来获取编辑框中选择的开始和结束的位置以及替换被选择的文本。C、设置编辑框的页面边距用CEdit:SetMargins函数来实现,其函数原型如下:void SetMargins(UINT nLeft,UINT nRight); 其中,参数nLeft和nRight分别用来指定左、右边距的象素大小。D、剪帖板操作E、获取多行编辑框文本(见书208页-209页)。如何设置口令(密码):附加例题见后面(教案页)3)编辑框的通知消息当编辑框的文本修改或者被滚动时,会向其父窗口发送一些消息,这些消息是:(参看书209页表5.10并由下图所示:)EN_CHANGE当编辑框中的文本已被修改,在新的文本显示之后发送此消息EN_HSCROLL当编辑框的水平滚动条被使用,在更新显示之前发送此消息EN_KILLFOCUS编辑框失去键盘输入焦点时发送此消息EN_MAXTEXT文本数目到达了限定值时发送此消息EN_SETFOCUS编辑框得到键盘输入焦点时发送此消息EN_UPDATE编辑框中的文本已被修改,新的文本显示之前发送此消息EN_VSCROLL当编辑框的垂直滚动条被使用,在更新显示之前发送此消息 例:使用静态文本、组框、编辑框以及按钮等控件设计界面,运行结果参书209页图5.25即下图所示。当用户在“成绩1”、“成绩2”、和“成绩3”编辑框中输入成绩后,单击计算平均分按钮,将显示出这三个成绩的平均分。 程序设计步骤如下:(1) 打开前面的项目“按钮的使用”。(2) 向应用程序中添加一个对话框资源,insertResource点黑Dialognew出现一个新的对话框右键单击这个新对话框properties打开其属性对话框Font将其字体设置为“新宋体,9”,标题改为“使用编辑框”,ID号改为IDD_EDIT,删除默认的Cancel按钮。(3)、(4)、(5)按书210页往下作书(6)m_strAve=0.00; UpdateData(FALSE);/将成员变量数据传给控件,并在控件中显示书(7)UpdateData();/将控件显示的数据传给成员变量 double ave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0; m_strAve.Format(%6.2f,ave);/Format是CString类的一个经常使用的成/员函数,它通过格式操作使任意类型的数据转换成一个字符串 UpdateData(FALSE);/将成员变量数据传给控件,并在控件中显示书(8)定位到void CMyDlg:OnButton1() -/注意,这是你上个程序的按钮命令,在里找到: if(nID= =IDC_RADIO1) CEditDlg dlg; /注意,将原来MessageBox(1);去掉 dlg.DoModal(); /加上这2条 书(9)在上个程序的:按钮的使用Dlg.cpp即CMyDlg.cpp的头文件处加: #include EditDlg.h(就是(8)所在的文件) 编译运行4、列表框列表框是一个列有许多项目让用户选择的控件。它与单选按钮组或复选框组一样,都可让用户在其中选择一个或多个项。但不同的是,列表框中项的数目是可灵活变化的,程序运行时可往列表框中添加或删除某些项。并且,当列表框中项的数目较多而不能一次全部显示时,还可以自动提供滚动条来让用户浏览其余的列表项。1) 列表框的风格按性质来分,列表框有单选、多选、扩展多选以及非选四种类型,默认风格下的单选列表框让用户一次只能选择一个项,多列表框可让用户一次选择几个项,而扩展多项列表框允许用户用鼠标拖动或其它特殊组合键进行选择,非选列表框不提供选择功能。还有其它一系列风格,用于定义列表框的外观及操作方式,这些风格可在下图所示的列表框属性对话框中设置:列表框的Styl属性:Selection指定列表框的类型:单选(Single)、多选(Multiple)、扩展多选(Extended)、不选(None)Owner draw自画列表框,默认为NoHas strings选中时,在自画列表框的项目中含有字符串文本Border选中时,使列表框含有边框Sort选中时,列表框的项目按字母顺序排列Notify选中时,当用户对列表框操作就会向父窗口发送通知消息Multi-column选中时,指定一个具有水平滚动的多列列表框Horizontal scroll选中时,在列表框中创建一个水平滚动条Vertical scroll选中时,在列表框中创建一个垂直滚动条No redraw选中时,列表框发生变化后不会自动重画Use tabstops选中时,允许使用停止位来调整列表项的水平位置Want key input选中此项,当用户按键且列表框有输入焦点时,就会向列表框的父窗口发送相应消息Disable no scroll选中时,即使列表框的列表项能全部显示,垂直滚动条也会显示,但此时是禁用的(灰显)No integral height选中时,在创建列表框的过程中,系统会把用户指定的尺寸完全作为列表框的尺寸,而不论是否有项目在列表框,也不能完全显示出来2) 列表框的基本操作当列表框创建之后,往往要添加、删除、改变或获取列表框中的列表项,这些操作都可以调用MFC的CListBox类成员函数加以实现。索引:表明项目在列表框中排列的位置,它是以0为基数的,即列表框中第一项的索引是0,第二项的索引是1,依次类推。(1)添加列表项列表框创建时是一个空的列表,需要用户添加或插入一些列表项,其函数原型为:int AddString(LPCTSTR lpszItem); int InsertString(int nIndex,LPCTSTR lpszItem); 其中:列表项的字符串文本由参数pszItem来指定,成功返回列表在列表框的索引,错误返回LB_ERR,空间不够返回LB_ERRSPACE。但:InsertString函数不会将列表项进行排序,不论列表框控件是否具有sort属性,只是将列表项插在指定索引的列表项之前,若nIndex等于-1,则列表项添加在列表框末尾。而:AddString函数在当列表框控件具有sort属性时会自动将添加的列表项进行排序。以上2个函数只能将字符串增加到列表框中,但有时用户还会需要根据列表项使用其他数据。这时,ListBox的SetItemData和SetItemDataPtr能有效解决这个问题,它们能使用户数据和某个列表项关联起来:int SetItemData(int nIndex,DWORD dwItemData);int SetItemDataPtr(int nIndex,void *pData);其中,SetItemData是将一个32位数与某列表项(由nIndex指定)关联起来,而 SetItemDataPtr可以将用户的数组、结构体等大量的数据与列表项关联 若产生错误,它们都返回LB_ERR而:GetItemData和GetItemDataPar分别用来获取相关联的用户数据。 以下等待修改(2)删除列表项(3)查找列表项(4)列表框的单项选择(5)列表框的多项选择3) 列表框的通知消息 当列表框中发生了某个动作,如用户双击选择了列表框中某仪项时,列表框就会向父窗口发送一条通知消息。常用的通知消息如书214页表5.14所示。例:将一个SCORE结构(含有三门成绩的数据成员)数据和列表中每一个学生姓名列表关联起来。当用户单击添加记录按钮时,学生成绩记录中的“姓名“被添加在列表框中,且该学生的成绩与该列表项关联。当用户单击删除记录按钮时,列表框中当前选择项被删除,相关联的数据所占的内存空间被释放。任何时候选中列表框中某个学生,相应的记录数据被显示出来,如:书214页图5.27所示。(1) 打开前面的基于对话框的项目“按钮的使用”。(2) 向项目中添加一个对话框资源IDD_LISTBOX,标题为“使用列表框”,并用ClassWizard为此对话框建类为:CListBoxDlg。接着按书214页往下作:(3)、(4)-(可在此处将第9步、第11步作出. 因为第5步要用到SCORE结构体 )书(5)UpdateData(TRUE);if(m_strName.IsEmpty()/判断m_strName是否为空 MessageBox(姓名不能为空!); return;m_strName.TrimLeft();/裁剪m_strName左边的空格m_strName.TrimRight();/裁剪m_strName右边的空格if(m_List.FindString(-1,m_strName)!=LB_ERR) MessageBox(列表框中已有相同姓名,不能添加!); return;int nIndex=m_List.AddString(m_strName);/向列表框添加学生 /姓名将该学生成绩与新增的列表项关联起来SCORE data;data.score1=m_nScore1;data.score2=m_nScore2;data.score3=m_nScore3;m_List.SetItemDataPtr(nIndex,new SCORE(data);书(6)int nIndex=m_List.GetCurSel();/获得当前选项的索引if(nIndex!=LB_ERR) m_List.DeleteString(nIndex);/删除当前选择项 m_strName.Empty(); m_nScore1=m_nScore2=m_nScore3=0; UpdateData(FALSE);else MessageBox(当前没有选择项或列表框操作失败!);书(7)int nIndex=m_List.GetCurSel();if(nIndex!=LB_ERR) m_List.GetText(nIndex,m_strName); SCORE *data=(SCORE *)m_List.GetItemDataPtr(nIndex); m_nSc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内经考试题及答案
- 汽修考试题及答案
- 中级财务会计(上)知到智慧树答案
- 工务维修考核试卷及答案
- 药品检查员能力提升培训班结业考试试题(附答案)
- 幼儿园教师业务考试试题及答案
- 内科考试题含答案
- 酒水饮料理论知识考核试题题库及答案
- 加氢工艺考试模拟卷及答案
- 国家基本药物培训试题及答案
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 医院药品采购与质量控制规范
- 枣庄学院《图学基础与计算机绘图》2024-2025学年第一学期期末试卷
- 2025版仓储库房租赁合同范本(含合同生效条件)
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 2025至2030年中国纳米抛光浆料行业发展监测及发展趋势预测报告
- 养老护理员培训班课件
- 2025-2030城市矿产开发利用政策支持与商业模式创新报告
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 近十年中职试卷及答案
- 股票k线图入门图解
评论
0/150
提交评论