当前位置:首页 > vs2005 MFC计算器制作
制作计算器
本文采用动态创建控件的方法,使用 vs2005 MFC,仿照windows自带的计算器进行制作。 通过这个程序可以使你了解: 1 如何使用文本框、按钮
2 如何通过控件的ID获取控件指针 3 得到控件指针后可以对控件做些什么
4 字符串如何处理(拼接、查找、转换等) 5 如何给控件绑定响应事件 6 如何重载原有的函数 7 其他自己体会
界面分析:不要上面的菜单栏,也不要第一排的按钮,
这
些按钮都不要,只要一个文本框和下面右图中的按钮,布局方式也按照这个图布局。仔细数一数,共有23个按钮和一个编辑框。
功能分析:
用一下windows的计算器,可以发现: 1. 初始状态为0
2. 如果按下数字键,这个0就会变成相应的数字,如果按下小数点,就会变为“0.” 3. 除数不能为0
4. 连续按下多个运算符,以最后一个计算符为准
5. 每次按下运算符都会把之前的结果先经行计算,例如:你已经输入了 1+ 1 此时再按下
“+”,就会先把1+1进行计算,保存结果2.
6. 这个计算器分两行显示,上面一行显示算式,下面显示结果. 7. 当你输入一个数字和一个运算符就按下“=”时,第二个数默认和第一个相同,例如:“3*”
按下“=”,显示“9” 8. 开平方不能是负数 9. 其它异常暂不处理
新建项目
这里我给项目命名为:Calculator
应用程序的类型选择 基于对话框,点击完成
完成之后,先来观察一下项目中都有哪些东西:资源视图(下面右图)是我们的界面,解决方案中的是我们的源文件(下面左图)。我们的代码主要写在
中,.h文件中主要定义一些东西,.cpp文件中写具体的东西。
和
准备知识
初始界面
打开
界面,可以看到,上面已经给我们放上去了两个按
钮—确定和取消。由于我们建立的是对话框应用程序,这两个按钮的功能就是接受Enter键和ESC键的响应。先不要删除它,不然会造成不必要的麻烦:例如如果你删除了这两个按钮,当你在界面上按下回车时,程序找不到响应的控件,就会导致异常。
添加编辑框
在工具箱中找到编辑框控件中把它的ID改为TEXTC,便于记忆,
,把它拖放到界面合适的位置,并在属性栏
,这个编辑
框的作用就是显示数字。
有的资料会给这个编辑框关联一个值,用于处理编辑框中内容,在这里,我们就不给他关联值,要想给编辑框显示一个值或者是获取文本框中的值,通过代码去实现。包括后面按钮的处理,我们都尽量通过代码去实现它的功能。 至此,一行代码还没有写,先运行一下看看(如下图),如果你在文本框中按下回车键或者ESC键,就会发现程序会直接退出。这是因为“确定”按钮响应回车事件,“取消”按钮响应ESC键,如果不想退出,可以重载这两个按钮的响应事件,也可以屏蔽键盘的输入,这里暂不处理。(换句话说,如果不建立对话框应用程序,不就可以了吗?没办法暂时先学一学这个吧),如果觉着两个按钮很碍眼,可以把他们隐藏掉:把这两个按钮的Visible属性改为false
设置编辑框可以换行,有三个属性要更改;
Auto HScroll 设置为 False MultiLine 设置为 True
Want Return 设置为 True 代码写法:
CEdit* pEdit = (CEdit*)GetDlgItem(TEXTC); //断言,判断是不是pEdit(类似if语句) ASSERT(pEdit && pEdit->GetSafeHwnd());
即可。
//pEdit->SetSel(-1); //追加模式
pEdit->ReplaceSel(_T(\第一行\\r\\n第二行\)); 或者
SetDlgItemText(TEXTC,_T(\));
\\r\\n就是换行符 GetDlgItem
这个方法很有用,要注意!
读/写编辑框中内容
编辑框已经添加上去,那么怎样使用这个编辑框呢?主要就是怎样获取它里面的内容或者让它显示指定的内容。主要使用到两个函数: 读取控件中的内容:写入控件内容:
nID:控件的ID,也可以使控件的名字
rString:保存到的字符串(即:将控件上的文本获取到rString中)
lpszString:要显示出来的字符串。需要注意的是这个参数是LPCTSTR类型,不是CString类型,在使用的过程中要进行转换:(LPCTSTR)str
怎样在编辑框后面追加内容,不删除之前的内容呢?后面会讲到。
在界面上添加按钮
定义
你可以一个一个按钮拖放上去,但这里我使用的是通过代码进行创建。
根据开始时候的分析,共需要23个按钮,于是我们需要定义一个长度为23的按钮数组,为了便于更改,这里定义一个常量NUM,表示23. 如下:
public: static const int NUM = 23;
public: CButton *p_Button[NUM] ;
除此之外,为了便于写代码,再定义一个函数,用了创建按钮,如下:
public: CButton* NewMyButton(LPCTSTR m_Caption,int nID,CRect rect);
LPCTSTR m_Caption:m_Caption是按钮上显示的文字,LPCTSTR是参数类型 int nID:是按钮的ID号
CRect rect:rect是按钮的左上角坐标和大小,原型顺便再定义几个变量,后面写代码要用到:
CString equation ;//算式
CString inputNum ;//输入的数字 CString op;//运算符 double result;//计算结果 double number;//输入的数字
文件,写在里面就可以了。
前面说过,定义是放在“.h”文件中的,打开
写完之后先运行一下试试看,如果没有报错,就说明你写对了,如果报错,就这几行定义你
也能写错?! 接下来进入主题:
共分享92篇相关文档