VC++可视化课程设计计算器Word下载.docx

上传人:b****2 文档编号:4499475 上传时间:2023-05-03 格式:DOCX 页数:40 大小:395.35KB
下载 相关 举报
VC++可视化课程设计计算器Word下载.docx_第1页
第1页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第2页
第2页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第3页
第3页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第4页
第4页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第5页
第5页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第6页
第6页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第7页
第7页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第8页
第8页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第9页
第9页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第10页
第10页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第11页
第11页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第12页
第12页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第13页
第13页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第14页
第14页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第15页
第15页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第16页
第16页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第17页
第17页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第18页
第18页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第19页
第19页 / 共40页
VC++可视化课程设计计算器Word下载.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VC++可视化课程设计计算器Word下载.docx

《VC++可视化课程设计计算器Word下载.docx》由会员分享,可在线阅读,更多相关《VC++可视化课程设计计算器Word下载.docx(40页珍藏版)》请在冰点文库上搜索。

VC++可视化课程设计计算器Word下载.docx

软件要求:

Windows95/98或WindowsNT3.51以上版本。

VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。

一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。

在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。

与一般的应用软件一样,有以下两种启动方式:

(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。

(2)用户也可以使用命令行启动VC。

单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:

\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。

2.2关于MFC

MFC是WinAPI与C++的结合,API,即微软提供的WinDOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对WinDOS下应用程序的开发,使这些被开发出来的应用程序能在WinDOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinDOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++&

MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。

MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类。

2.3可行性分析

本设计是简单计算器。

日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。

它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;

醒目美观的软件封面。

使用人员能快捷简单地进行操作。

2.4需求分析

本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。

要程序能实现:

加,减,乘,除,开方,倒数等运算功能;

还要实现数据的输入,输出,计算,显示及程序退出等功能。

另外还可以实现多种科学计算的功能,如:

三角函数的计算,弧度与角度间的转换,对数指数的计算等等。

3功能说明

计算器的设计按软件工程的方法进行,系统具有良好的界面;

必要的交互信息;

简约美观的效果。

即可单机按钮进行操作,也可直接通过键盘直接输入。

(1)包含的功能有:

加、减、乘、除运算,开方、求倒数等功能[1].

(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

(3)给对话框添加菜单。

(4)制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色[3]。

(5)制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。

(6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。

(7)实现对话框的扩展功能[2]。

(8)计算功能基本上是用系统内部函数。

(9)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。

(10)“CE”按钮可以清除所有已输入的数据从头计算

功能模块的实现:

(1)首先,添加高级按钮控件类,在这个类中实现高级的按钮控件。

在此类中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的,实现按钮对鼠标不同的位置和动作改变不同的颜色,并且按钮的客户区域变成一个椭圆。

(2)其次,添加一个高级编辑控件类,在此类的基础上实现高级编辑控件。

在OnDisplay函数中设置编辑框的显示文本,再调用OnDraw函数将其显示出来,并用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。

(3)最后,实现主对话框界面功能,主要是加载菜单资源和对话框扩展功能的实现。

在CCalculatorDlg:

:

OnCreate函数中设定对话框的初始大小与位置,可以在这个对话框中进行窗口风格修改,位置设置等操作,然后添加菜单项ID_EXTEND的响应函数OnExtend。

4系统的实现

4.1窗体设计

利用MFCAppWinzard生成计算器应用程序框架具体步骤如下:

(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFCAppWizard(exe)选项,然后在Projectname文本框中输入Calculator。

Lacation文本框是指项目的本地路径。

(2)单击OK按钮,弹出MFCAppWinzard_Step1对话框。

选中单选按钮,如图所示。

(3)单击Next按钮,弹出MFCAppWinzard_Step2of4对话框,如图所示。

(4)单击Next按钮,弹出MFCAppWinzard_Step3of4对话框,如图所示。

(5)单击Next按钮,弹出MFCAppWinzard_Step4of4对话框,如图所示。

单击Finish按钮,创建框架。

4.2编辑资源

(1)编辑对话框及控件资源

利用VisualC++提供的资源编辑器对对话框资源进行编辑。

删除对话框中默认的OK和Cancel按钮。

添加一个Edit控件,其控件ID为IDC_DSPEDIT。

添加若干按钮控件,其ID如表4-1所示。

表4-1按钮控件资源清单

按钮名称

按钮ID

用途

BTN_0

按键0

1

BTN_1

按键1

2

BTN_2

按键2

3

BTN_3

按键3

4

BTN_4

按键4

5

BTN_5

按键5

6

BTN_6

按键6

7

BTN_7

按键7

8

BTN_8

按键8

9

BTN_9

按键9

BTN_10

小数点

=

BTN_11

求值

+

BTN_12

加号

-

BTN_13

减号

*

BTN_14

乘号

/

BTN_15

除号

CE

BTN_16

清屏

Sqrt

BTN_17

开方

1/x

BTN_18

倒数

sin

BTN_19

正弦

cos

BTN_20

余弦

tan

BTN_21

正切

x^2

BTN_22

平方

x^3

BTN_23

立方

x^y

BTN_24

以X为底的y次幂

exp

BTN_25

以e为底的幂

ln

BTN_26

以e为底的对数

log

BTN_27

对数

-/+

BTN_29

正负号

10^x

BTN_30

10的x次方

n!

BTN_31

N的阶层

添加2个单选按钮,按钮资源清单如表4-2所示。

表4-2单选按钮控件资源清单

控件名

设置ID

DEGREE

BTN_DEGREE

RADIAN

BTN_RAD

添加4个静态框,将编辑控件,普通计算,高级计算分别分组。

其效果如图4.1所示。

图4.1编辑对话框资源

(2)编辑菜单资源

在VisualC++中的Workspace工具栏中,选中ResourceView选项卡。

在其中的Menu项上右击,在弹出的快捷菜单中选择Insert命令,如图4.2所示。

图4.2添加菜单资源

将添加的菜单资源的ID更改为IDR_MENU。

利用资源编辑器对菜单进行编辑,编辑后的菜单如图4.3所示。

图4.3编辑菜单资源

4.3实现高级按钮控件类

利用ClassWizard添加一个新类,如图4.4所示。

图4.4添加CAdvButton类

(1)添加成员变量和成员函数

为实现高级按钮控件对鼠标的移动和单击作出相应的颜色变化。

首先在CAdvButton的头文件中加入几种预定义颜色,其代码如下:

#defineDesiableColorRGB(192,192,192)//灰色,按钮不可用

#defineFocusColorRGB(255,0,0)//红色,按钮拥有焦点

#defineSelectColorRGB(0,255,0)//绿色,按钮被按下

#defineDefaultColorRGB(0,0,255)//蓝色,默认

#defineTextColorRGB(128,128,128)//浅灰色,文本颜色

接下来,添加成员变量:

public:

CRectm_ClientRect;

//用来保存按钮的客户的矩形区域

CRgnm_ClientRgn;

//用来保存按钮的客户区域,非矩形

UINTm_State;

//按钮所处状态

CPointm_Point;

//当前鼠标位置

BOOLm_IsTimerOn;

//标识计时器是否已经打开

利用ClassWizard添加消息映射和响应函数,如图4.5所示:

图4.5添加响应函数

再利用ClassWizard覆盖父类中的两个关键的虚函数:

//{{AFX_VIRTUAL(CAdvButton)

virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct);

protected:

virtualvoidPreSubclassWindow();

//}}AFX_VIRTUAL

其中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的。

(2)添加创建按钮控件代码

按钮的创建分两步完成。

首先,调用构造函数对按钮对象进行初始化;

其次,调用Create函数创建按钮。

代码如附录1所示。

(3)设置按钮形状、外观、颜色、标题

PreSubclassWindow函数在窗口被创建之前就被调用,因此,在PreSubclassWindow函数中,将按钮的风格设为BS_OWNERDRAW。

实现代码如下:

//修改按钮控件风格

ModifyStyle(0,BS_OWNERDRAW|BS_PUSHBUTTON);

要使按钮能对鼠标的移动与单击作出不同的变化,那么按钮就需要时刻知道鼠标的位置与动作。

所以,必须在鼠标的单击、弹起及移动消息的响应函数中填加相应的代码,以获取鼠标的位置与动作。

在鼠标左键按下时,得到按钮窗口客户区域的屏幕坐标位置和鼠标的屏幕坐标位置。

当鼠标坐标位落于窗口客户区域内,且当前按钮控件处于非选中状态时,将按钮状态标识设为选中状态,即将m_State设为2。

接着,调用Invalidate函数,使客户区无效,框架会自动调用DrawItem函数,重绘客户区。

//当鼠标在按钮的客户区内按下时,改变按钮状态

voidCAdvButton:

OnLButtonDown(UINTnFlags,CPointpoint)

{

CRectrect;

GetWindowRect(&

rect);

//得到按钮客户区域的屏幕坐标位置

GetCursorPos(&

m_Point);

//得到鼠标的屏幕坐标位置

if((rect.PtInRect(m_Point))&

&

(m_State!

=2))

m_State=2;

//2:

selectstate

Invalidate();

//重绘客户区

}

CButton:

OnLButtonDown(nFlags,point);

在鼠标左键抬起时,得到按钮窗口客户区域的屏幕坐标位置和鼠标的屏幕坐标位置。

当鼠标坐标位置落于窗口客户区域内,且当前按钮控件处于选中状态时,将按钮状态标识设为非选中状态,即将m_State设为1。

接着,调用Invalidate函数,使客区无效,框架会自动调用DrawItem函数,重绘客户区。

其代码如附录1所示。

在用户移动鼠标时,如果计时器没有启动,则启动计时器,并将计时器启动标识m_IsTimerOn设为TRUE。

其实现代码如下:

if(!

m_IsTimerOn)//如果计时器没用启动

SetTimer(1000,100,NULL);

//启动计时器

m_IsTimerOn=TRUE;

如果鼠标已经移出了按钮的客户区,则消毁计时器,并将计时器的起始标识

m_IsTimerOn设为FALSE。

OnTimer函数的实现代码如附录1所示。

实现客户区的绘置函数DrawItem。

在DrawItem函数中,首先得到窗口的有效矩形区域,在此矩形区域内创建椭圆。

调用SetWindowRgn函数,设置窗口的有效区域为椭圆。

从参数lpDrawItemStruct结构中得到按钮控件客户区域的设备环境变量指针。

根据按钮当前状态,创建不同的画笔。

调用设备环境类的成员函数,设置背景模式为透明,选择画笔,在按钮客户区内绘制椭圆及显示文本。

其实现代码如附录1所示。

通过上面操作,按钮已经具有对鼠标不同的位置和动作改变不同的颜色。

并且,按钮的客户区域已经是一个椭圆,而不再是一个矩形。

正是下面的代码将按钮的客户区域设定为椭圆形:

GetClientRect(&

m_ClientRect);

//通到窗口的有效矩形区域

m_ClientRgn.DeleteObject();

//删除区域对象

m_ClientRgn.CreateEllipticRgnIndirect(&

//在矩形区域内创建椭圆

//设置窗口的有效区域为椭圆

SetWindowRgn(m_ClientRgn,FALSE);

至此,一个完整的高级按钮类全部完成。

其效果如图4.6所示。

图4.6运行结果

4.4实现高级编辑控件类

利用ClassWizard添加一个新类,如图4.7所示.

图4.7添加CAdvEdit

(1)添加成员变量和成员函数

为CAdvEdit类添加一个字符串类型的成员变量m_Caption,用来记录编辑框中的文本内容。

//CAdvEdit头文件

public:

CStringm_Caption;

//编辑框文本

利用AppWizard添加消息函数OnPaint。

如图4.8所示。

图4.8添加函数

添加两个public类型的成员函数,分别用来绘制编辑控件客户区和设置编辑控件的显示文本。

voidOnDraw();

//绘制编辑控件客户区

voidOnDisplay(LPCTSTRlpszStr);

//设置编辑控件显示文本

//{{AFX_MSG(CAvEdit)

Afx_msgvoidOnPaint();

//WM_ON_PAINT消息的响应函数

//}}AFX_MSG

(2)添加编辑控件代码

在OnDisplay函数中设置编辑框的显示文本。

m_Caption=lpszStr;

OnDraw();

在OnPaint函数中调用自定义函数OnDraw。

CPaintDCdc(this);

//devicecontextforpainting

在OnDraw函数中,在编辑控件客户区域内绘制文本。

首先,得到编辑控件客户区的矩形域;

其次,得到编辑控件客户区的设备环境变量;

接着,用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。

效果如图4.9所示,其代码如附录2所示。

图4.9运行结果

4.5对话框界面设计

对主对话框添加成员变量和函数。

主要成员变量:

//CCalculatorDlg.h头文件

CButtonm_DspStatic;

CAdvEditm_DspEdit;

//显示计算结果的编辑框

CMenu*m_Menu;

//对话框菜单按钮

BOOLm_IsExtend;

//标志对话框是否已扩展

主要成员函数:

//{{AFX_VIRTUAL(CCalculatorDlg)

Protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

//数据交换函数

//}}AFX_VIRTUAL

virtualBOOLOnInitDialog();

//虚函数,可覆盖用来进行用户初始化操作

virtualvoidOnOK();

//虚函数,覆盖用来屏蔽Enter操作

//{{AFX_MSG(CCalculatorDlg)

//响应消息ON_WM_CTLCOLOR,用以修改对话框及其控件颜色

afx_msgHBRUSHOnCtlColor(CDC*Pdc,CWnd*pWnd,UINTnCtlColor);

afx_msgvoidOnPaint();

//响应消息WM_ON_PAINT

afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);

//响应消息WM_ON_CREATE

除以上主要成员外,还要对每个按钮控件定义一个CAdvButton的对象与之相关联,并为每个按钮控件建军立一个成员函数来响应其EN_CLICKED消息。

如图4.10所示:

图4.10为按钮控件添加消息响应

(1)加载菜单资源

在3.2节中,已经为工程新建了一个菜单资源IDR_MENU,现将其添加到计算器对话框上。

利用CMenu类的LoadMenu函数,将菜单资源加载到内存中。

再调用SetMenu函数,将菜单添加到对话框上,代码如附录3所示。

如图4.11所示:

图4.11运行结果

(2)关联控件与对象

在CCalculatorDlg类的声明中,已经为编辑框、静态框及每一个按钮声明了相应类型的对象与之对应。

但这些控件与对象的关联工作是在DoDataExchange函数中DDX_Control宏来完成的,如图4.12所示。

图4.12关联控件与对象

(3)实现对话框扩展功能

首先在CCalculatorDlg:

OnCreate函数中,设定对话框的初始大小与位置。

//得到对话框的窗口区域矩形

//指定窗口大小与位置:

宽为186像素,高度为245像素

SetWindowPos(&

wndTop,0,0,186,245,SWP_NOMOVE|SWP_NOZORDER);

其次,添加菜单项ID_EXTEND的响应函数OnExtend。

在OnExtend函数中,首先判断当前对话框状态,即是否已经被扩展。

如果对话框已被扩展,则收缩对话框。

首先得到对话框的当前位置,将其指定为新的宽度,但高度维持不变。

再将其中的编辑控件和编辑控件外的静态框收缩到合理位置。

最后将菜单项ID_EXTENDR的显示文本设置为“扩展”,将表示对话框是否扩展标识变量m

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2