4.1程序效果要求
程序应具有的功能:(1)程序运行窗口如图4.1。(2)程序的主窗口包含一个主控件、一个静态文本框、一个编辑框、两个复选框和三个按钮。窗口上还有最大化和最小化按钮。图4.1。(3)在编辑框中输入Calculator,则可以执行计算器程序;若输入其他字符,再单击Len按钮,则计算该字符串长度,并弹出一消息框进行显示,如图4.2。单击Clear按钮则清除编辑框中的信息。(4)两个复选框的功能是分别设置编辑框的两个属性。如果不选择show复选框则无法看到编辑框,如图4.3。如果不选择active复选框则不能改变编辑框中的内容,如图4.4。4.2程序实现过程
4.2.1创建工程在文件菜单下,用新建命令分5个步骤自动生成一个可运行的程序。(1)创建工程,选择AMFCAppWizard(exe)选项,输入文件名和保存位置。(2)进入MFC应用程序向导步骤1,选择“基本对话”。“下一个”。(3)在向导步骤2中选择“关于相框”和“3D控制”。“下一个”。(4)在向导步骤3中选择“是”和动态链接库DLL。“下一个”。(5)在向导步骤4中保留默认。“完成”。AppWizard将完成应用程序的自动生成。4.2.2程序可视化设计1.设计主窗口在上面创建的可运行程序的主窗口中,应用6个步骤:(1)删除主窗口中的内容;(2)加入组控件,右击,选中“属性”,标题设置为“Len”;(3)加入静态文本控件,右击,选中“属性”,标题设置为“统计字符串的长度”;(4)加入编辑框控件,右击,选中“属性”,将ID值设置为ID_LEN_EDIT;(5)加入两个复选框控件,打开“属性”窗口,分别将其ID值设置IDC_SHOW和IDC_ACTIVE,将其标题设置为show和active;(6)加入三个按钮控件,打开“属性”窗口,分别将其ID值设置IDC_LEN、IDC_CLEAR、IDC_EXIT。将其标题设置为:Len、Clear、Exit。2.属性设置在对话框的任意区域右击,在快捷菜单中,选择“属性”命令,设置“最大化”和“最小化”属性。这是为窗口设置属性。设计好的程序主窗口如图。4.2.3引入变量为了在程序运行中访问各种控件,使控件能够以变量的形式出现在程序代码中,必须为相应的控件引入对应的变量。在本例中,编辑框和复选框都要引入变量。1.为编辑框引入变量,分两步进行变量设置(1)从“查看”菜单中选择“建立类向导”命令,选择MessageVariables标签,如图4.7。Classname:CLenDlgControlIds:IDC_LEN_EDIT(2)单击AddVariable按钮,弹出AddMemberVariable对话框,如图4.8。进行如下设置:Variablename:m_LenEditCategory:ValueVariabletype:Cstring变量m_LenEdit用来存放编辑框中的内容。2.为复选框引入变量用同样的方法为两个复选框进行变量,在AddMemberVariable对话框中进行如下设置:(注意在设置前,要选对对象的ControlIds,如show复选框的号是:IDC_SHOW,active复选框的号是:IDC_ACTIVE)。IDC_SHOW复选框:Variablename:m_showCategory:ValueVariabletype:BOOLIDC_ACTIVE复选框:Variablename:m_activeCategory:ValueVariabletype:BOOL变量m_show设置IDC_SHOW复选框的状态,变量m_active设置IDC_ACTIVE复选框的状态。4.2.4代码编写1.编写初始化对话框的代码(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:CLenDlgMessage:WM_INITDIALOG(2)此时VC++自动选中名为ON_WM_INITDIALOG的函数,单击EditCode按钮,打开文件LenDlg.cpp,其中有一个OnInitDialog()函数,在该函数中加入如下代码://TODO:m_show=true;m_active=true;UpdateData(false);ReturnTRUE;要使变量m_show、m_active的取值反映到控件显示的外观上,还必须调用参数为false的函数UpdateData(false),这样将根据变量的取值来更新对话框的显示。2.为show复选框编写代码本例有两个复选框,其中show复选框没有被选中时,编辑框将被隐藏,active复选框没有被选中时,将导致编辑框显示的文本内容无法改动。设置或取消复选框的选中标记时,将引发的是BN_CLICKED事件。(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_SHOWMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnShow,并单击EditCode按钮,编写代码如下://TODOUpdateData(true);//用屏幕上的当前值去更新控件的变量if(m_show==true)
GetDlgItem(IDC_LEN_EDIT)->ShowWindow(SW_SHOW);else
GetDlgItem(IDC_LEN_EDIT)->ShowWindow(SW_HIDE);
当设置或取消Show复选框的选中标记时,BN_CLICKED事件发生,OnShow函数也随之自动执行。语句UpdateData(true);的作用。
3.为active复选框编写代码(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_SHOWMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnActive,并单击EditCode按钮,编写代码如下://TODOUpdateData(true);if(m_active==true)
GetDlgItem(IDC_LEN_EDIT)->EnableWindow(true);else
GetDlgItem(IDC_LEN_EDIT)->EnableWindow(false);
当设置或取消active的选中标记时,单击事件发生。OnActive()函数将自动执行。GetDlgItem(IDC_LEN_EDIT)函数的功能是根据控件的ID返回一个指向该
控件的指针,本语句就是返回一个指向编辑框的指针。EnableWindow(true)函数的参数为真,可以激活编辑框。
4.为编辑框编写代码编辑框中的文本内容发生变化时将引发EN_CHANGE事件。(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_LEN_EDITMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnChangeLenEdit,并单击EditCode按钮,编写代码如下://TODOUpdateData(true);//用屏幕上的当前值去更新控件的变量m_LenEditCStringUpperValue;//创建一个名为UpperValue字符串变量
UpperValue=m_LenEdit;//把编辑框变量m_LenEdit的值赋给字符串变量UpperValue
UpperValue.MakeUpper();//把字符串中的小写字母转换为大写字母
if(UpperValue==”CALCULATOR”)//如果编辑框中的值为CALCULATOR执行以下语句
{system(”calc.exe”);//调用计算器程序
m_LenEdit=””;//为与编辑框相关的变量赋一个空串UpdateData(false);//刷新屏幕}
if(UpperValue==”EXIT”)//如果编辑框中的值为EXIT退出程序{OnOK();}}
5.为Len按钮编写代码(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_LENMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnChangeLenEdit,并单击EditCode按钮,编写代码如下://TODOunsignedintclen;
clen=strlen(m_LenEdit);//求字符串长度charcstrlen[5];
itoa(clen,cstrlen,10);//把数值型的变量赋值给字符串型的变量,10表示第二个参数是十进制
MessageBox(cstrlen);//弹出消息框
6.为Clear复选框编写代码(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_CLEARMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnChangeLenEdit,并单击EditCode按钮,编写代码如下://TODOm_LenEdit=””;//为与编辑框相关的变量赋一个空串UpdateData(false);//刷新屏幕
7.为Exit复选框编写代码(1)从“查看”菜单中选择“建立类向导”命令,选择MessageMap标签.设置为:Classname:CLenDlgObjectIDs:IDC_EXITMessage:BN_CLICKED(2)单击AddFunction按钮,将新函数命名为OnChangeLenEdit,并单击EditCode按钮,编写代码如下:VoidCLenDlg::OnExit(){//TODOOnOK();//退出程序}
4.3理论总结
4.3.1编辑框1.编辑框类简介编辑框与静态文本框的区别:编辑框的主要作用接收用户键盘输入,用户可以方便地输入各种文字、数字或者口令,也可以编辑或者修改简单的文本文件;而静态文本框只能用来显示文本,不可以用来输入文本。所以,编辑框是Windows应用程序中一种重要的交互工具。编辑框控件有两种形式:单行编辑控件和多行编辑控件。在输入文本的地方可以使用单行编辑控件,例如输入一个名字或地址。多行编辑控件通常带有滚动条,使用户能输入比显示的更多的文本。MFC在类CEdit中提供标准的Windows编辑框控件服务,CEdit是CWnd类直接派生来的,它具有CWnd类的所有功能。编辑框控件的默认模式是在一行显示所有编辑文本,表4.1是通用CEdit的方法。多行编辑框控件支持在编辑窗口进行多行文本编辑。表4.2是多行编辑所支持的CEdit的方法。2.编辑框控件的创建创建编辑控件有两种方法:方法一:在对话框模板中创建(1)在ResourceView中双击需要添加编辑框控件的对话框模板,打开对话框模板;(2)在控件工具窗口中选择编辑控件,在对话框中画出一个编辑框控件;(3)右击编辑框控件,打开属性对话框,选择Styles选项卡,就可以设置各项属性了;见图4.9。其中有这样几个属性:Number:选中,不能输入非数字字符。Password:用户键入的所有字符都会显示为星号(*)。Multiline:创建一个多行文本编辑控件Wantreturn:当用户在多行编辑控件中按下Enter键时,插入一个回车符,否则按下Enter键将被解释为选择了对话框中的默认命令按钮。AutoHscroll:如果插入点超过了控件的右边界,多行编辑控件自动进行水平滚动。方法二:使用编辑控件的基类CEdit的Create函数进行创建。例如创建一个输入窗口可以使用函数:BOOLCEdit∷Create(LPCTSTRlpszText,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID)参数dwStyle指定了编辑框控件的风格,如表4.3。dwStyle可以是这些风格的组合。rect指定了编辑框控件的位置和尺寸,pParentWnd指定了父窗口,不能为NULL,编辑框的ID由nID指定。如果创建成功,该函数返回true,否则返回false。3.对编辑框控件的基本操作(1)修改编辑框控件VoidSetWindowsText(LPCTSTRlpszString);CWnd的成员函数:voidSetWindowText(LPCTSTRlpszStrung);可以来设置窗口的标题或控件中的正文。参数lpszStrung可以是一个Cstring对象,或是一个指向字符串的指针。(2)接收从编辑框控件中输入的文本为了从用户处接收信息,用CEdit类的成员函数接收文本信息非常有用。利用GetWindowText()得到当前显示的文本。intGetWindowText(LPCTSTRlpszStrungBuf,intnMaxCount)const;voidGetWindowText(Cstring&rString)const;这两个函数均是CWnd的成员函数,可用来获得窗口的标题或控件中的正文。4.编辑框控件与应用程序的消息传递(1)编辑框向应用程序传递消息控件通过向父窗口发送控件通知消息来表明发生了某种事件控件的通知消息是通过WM_COMMAND消息发给父窗口的,在该消息的wParam中含有消息通知码和自窗口的标志ID。(2)应用程序向编辑框发送消息可以调用函数SendMessage向特定的子窗口发送消息。4.3.2复选框1.按钮控件类简介按钮控件类是从CWnd类继承下来的,包括命令按钮、复选框、单选按钮、组框和自绘式按钮。命令按钮的作用是对用户的鼠标单击作出反应并触发相应的事件,在按钮中既可以显示正文,也可以显示位图。单选按钮和复选框的作用,我们都知道。组框用来将一些控件聚成一组。自绘式按钮是指由程序员而不是系统负责重绘的按钮。创建按钮可用命令:BOOLCButton∷Create(LPCTSTRlpszCaption,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID)参数lpszCaption指定了按钮显示的正文。dwStyle指定了按钮的风格。如表4.5。dwStyle可以是这些风格的组合。rect指定了按钮的位置和尺寸,pParentWnd指定了父窗口,不能为NULL。ID由nID指定。如果创建成功,该函数返回true,否则返回false。除了Windows风格,还有按钮专用的一些风格,如表4.5。2.复选框的设置复选框一般有两种状态,选中与未选中。如果设置了BS_3STATE或BS_AUTO3STATE风格就可能出现第三种状态:灰色,不能接受用户的输入,以表明控件是无效的或无意义的。通过调用intGerCheck()const;函数会返回复选框或按钮状态,0未选中,1选中,2不确定状态。调用voidCButton∷SetCheck(intnCheck);设置当前复选框按钮的选中状态。3.按钮控件与应用程序之间的消息传递当与复选框交互时,控件向其父窗口发给WM_COMMAND消息,该消息的wParam中含有消息通知码和子窗口的标志ID。向复选框发消息时,可调用函数SendMessage()【上机练习6】:在对话框模式下创建一个简单的计算器,能进行加、减、乘、除运算运行结果如图:1.创建工程在文件菜单下,用新建命令分5个步骤自动生成一个可运行的程序。(1)创建工程,选择AMFCAppWizard(exe)选项,输入工程名“计算器”和保存位置。(2)进入MFC应用程序向导步骤1,选择“基本对话”。“完成”。2.设计主窗口(1)为对话框添加3个静态文本,标题分别为:“操作数1”,“操作数2”和“结果”。(2)为对话框添加3个编辑框,在属性中更改ID为用户自定义ID,如下表:原ID新ID作用IDC_EDIT1IDC_NUM1操作数1IDC_EDIT2IDC_NUM2操作数2IDC_EDIT3IDC_RESULT计算结果(3)为对话框添加4个单选按钮,在属性中更改ID为用户自定义ID,并设置标题。原ID新ID标题IDC_RADIO1IDC_JIA+IDC_RADIO2IDC_JIAN-IDC_RADIO3IDC_CHENG*IDC_RADIO4IDC_CHU/(4)为对话框添加1个命令按钮,在属性中更改标题为“=”,ID为IDC_BUTTON1。为对话框添加另1个命令按钮,在属性中更改标题为“退出”,ID为IDC_EXIT。为对话框添加另1个命令按钮,在属性中更改标题为“清除”,ID为IDC_CLEAR。3.属性设计在快捷菜单中,选择“属性”命令,设置“最大化”和“最小化”属性。4.引入变量从“查看”菜单中选择“建立类向导”命令(或用Ctrl+W),打开MFCClassWizad对话框,选择MemberVariables选项卡,在Classname下拉列表框中选择“L计算器Idlg”选项,在ControlIDs列表框中选择IDC_NUM1选项,单击AddVariable按钮,打开AddMemberVariable对话框,为3个编辑框添加变量:m_num1,m_num2,m_result。添加字符型变量:fuhao,在Class标签下右击CmyDlg选添加变量命令,弹出“添加变量”对话框,在类型框中输入char,在名称框中输入fuhao。5.添加函数在MFCClassWizad对话框中,选择MemberMaps选项卡,在ObjectIDS列表框中选择IDC_BUTTON1选项,在Messages列表框中双击BN_CLICKED选项,打开“添加函数”对话框,为命令按钮“=”添加函数。在OnButton1()函数中,添加代码:UpdateData(TRUE);switch(fuhao){case’+’:m_result=m_num1+m_num2;break;case’-’:m_result=m_num1-m_num2;break;case’*’:m_result=m_num1*m_num2;break;case’/’:m_result=m_num1/m_num2;break;}UpdateData(FALSE);}用同样的方法为4个单选按钮添加函数。6.代码编写在OnJia()函数中,添加代码:fuhao=’+’;在OnJian()函数中,添加代码:fuhao=’-’;在OnCheng()函数中,添加代码:fuhao=’*’;在OnChu()函数中,添加代码:fuhao=’/’;7.为命令按钮“清除”、“退出”添加函数。在OnExit()函数中,添加代码:OnOk();在OnClear()函数中,添加代码:UpdateData(TRUE);m_num1=0;m_num2=0;m_result=0;UpdateData(FALSE);运行程序,输入数据进行运算。第二次作业(11月9日布置,11月16日交)
1.请简述VisualC++面向对象的程序设计特点有3个基本特点。2.请简述VisualC++中类与对象的概念。3.一个类使用之前必须先进行类的定义,写出定义格式。4.写出类的定义中公有类型(public)、保护类型(protected)、私有类型(private)的含义。5.写出类成员函数实现的基本格式。6.什么是内联函数?使用内联函数时应注意哪几个问题?7.什么是构造函数和析构函数?8.说明使用构造函数和析构函数应注意哪几个问题?第三次作业(11月23日布置,11月30日交)
1.什么是操作符的重载?重载的规则是什么?2.什么是友元?友元重载的规则是什么?友元函数的声明的格式?3.说明继承和派生的概念。4.请简述VisualC++中多态性的概念。5.说明在VisualC++集成开发环境中,实用工具AppWizard的作用。6.说明Windows系统中的事件和消息的关系。并说明消息主要的3种类型。7.采用文档视图结构的应用程序主要由哪4个部分组成?各部分的功能是什么?8.请简述框架窗口和应用程序窗口的概念。第四次作业(12月14日布置,12月21日交)
1.在VisualC++的设计中,“查看”菜单选“建立类向导”,出现MFCClassWizard对话框,MessageMaps选项卡的主要功能是什么?2.在VisualC++的设计中,为什么有时候要给某个对象(例如编辑框)添加变量?3.请简述控件:静态文本框,编辑框和组合框的功能和用法。4.设对话框中有命令按钮,其功能是清除编辑框中的内容,请写出实现这个功能的代码。5.菜单由哪几部分组成?菜单操作方法有两个函数,这两个函数的功能是什么?6.请说明模式对话框和无模式对话框的区别。7.什么是图形设备接口GDI?8.请简述获取设备环境对象的三种方法。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务