首页 > 编程知识 正文

灵异事件真实十大灵异事件,灵异片演员app

时间:2023-05-05 23:42:31 阅读:258147 作者:204

成果如下图:

视频演示效果可以关注微信公众号“艺千秋录”恢复“计算器”点击观看,同时还有更多功能实现的代码免费分享

具体实现步骤:
首先新建一个MFC应用项目并命名


选择基于对话框,单击完成

创建完成之后,进行对话框的搭建,首先在一下界面打开解决方案管理器---->选中资源文件打开箭头所指文档

将已有的一些控件选中删除

打开对话框旁边的工具栏---->将按钮控件和编辑框控件拖入对话框中

单击按钮直接在键盘上输入即可改变按钮名称
注意:双击按钮将会跳转到相应函数的实现

选中编辑框,添加两个变量,分别是控件变量m_edit和值变量m_str,操作一样



后面我们主要是对CString类型变量m_str进行操作,完成以上步骤,接下来我们就可以去实现各个控件的功能了,我们首先点击类视图---->打开头文件---->在类里面添加我们后续要用到的变量这些变量的功能我下面都给了注释

接下来我们可以回到对话框

双击一个你想要实现功能的Button控件进去它的实现函数,比如我们双击‘+’号控件,下面是对‘+’法按钮的实现

`//“加法”按键的实现void CCalculateDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//用来读取编辑框中的m_str内容if (m_str.Right(1) != '(')//如果前面没有括号,则输入的是运算符,否则就是正号{savevalue1();//读取第一个操作数if (c != '0')calculate();savevalue1();//读取第一个操作数c = '+';slength = m_str.GetLength() + 1;//后面会看到slength的用处}m_str = m_str + '+';UpdateData(FALSE);//显示更新编辑框的内容,即将m_str的内容显示}`

上面我们用savevalue1()函数从m_str变量中读取第一个操作数;

比如我们在编辑框中输入式子:“123 + 111” ,(此时编辑框关联的CString变量m_str=“123 + 111”),其实在我们点击‘+’号之前我们就已经进入了加法函数的实现,也就是说实现加法之前,m_str的内容还是“123”;

我们可以看到我们首先是利用savevalue1()为第一个操作数num1赋值为123并存储起来,功能的实现如下:

//保存第一个操作数据void CCalculateDlg::savevalue1(){CString m_str1;UpdateData(TRUE);//用来读取编辑框中的m_str内容if (m_str[0] == '(')//如果第一个操作数用括号括起来了,则不读入括号{m_str1 = m_str.Right(m_str.GetLength() - 1);m_str1 = m_str1.Left(m_str1.GetLength() - 1);num1 = _ttof(m_str1);//将CString类型转换为double类型}elsenum1 = _ttof(m_str);//将CString类型转换为double类型UpdateData(FALSE);//显示更新编辑框的内容,即将m_str的内容显示}

紧接着的是一个if语句,变量c是用来判断我们在点击‘+’号之前是否有点击过其它比如‘-’或‘*’等运算符,如果有点击过,m_str的内容应该会是这样“123 - 34 + 111”,这个时候它并不是一个操作数,而是一个式子,这个时候我们读取第一个操作数肯定会失败(有个‘-’号);

所以我们应该在读取第一个操作数之前,先将上面的式子预算一遍,并将变量m_str的内容更新为该式子的结果(此时为89 + 111),然后再读取第一个操作数(即89),再进行加法运算;

相信大家看到savevalue1()这个函数是还有一个问题,有一段关于是否有括号的if语句到底是什么意思?

其实这是后面我们实现时遇到的问题,比如当我们输入(-123)时,如果没有这段if语句,第一个操作数就会读取失败;

虽然一般没有人把第一个操作数括起来,但为了以防万一,我们可以避免这个问题;

这个时候我们已经完成了第一个操作数的读取,但是下一步我们又该怎么读取第二个操作数并实现加法这个功能呢?

其实我们读取第二个操作数是在运算函数calculate()里面实现的,具体内容如下:

void CCalculateDlg::calculate(){UpdateData(TRUE);num2 = _ttof(m_str.Right(m_str.GetLength() - slength));//读取第二个操作数double result = 0.0;if (c == '+'){result = num1 + num2;}m_str.Format(TEXT("%f"), result);c = '0';//表示默认无符号输入UpdateData(FALSE);}//“等号”键实现void CCalculateDlg::OnBnClickedButton6(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);if (c != '+' && c != '-' && c != '*' && c != '/'&& c != '!' && c != '^' && c -'0' > 9){num1 = _ttof(m_str);}//当单击输入数值而没有单击操作符按钮、直接单击“=”时,界面上保持显示第一个操作数elsecalculate();c = '0';//表示默认无符号输入UpdateData(FALSE);}

我们看到对于第二个操作数num2的读取,我们这里是利用了CString类型的一个函数Right(n),这个函数的功能就是读取字符串右边n个元素;

比如字符串为“123+111”时,我们使用m_str.Right(3),就会读取到字符串最右边三位元素(即111),所以我们就可以利用获取字符串字长的函数Getlength()以及变量slength来计算出第二个操作数占据字符串右边的位数;

以上述例子“123+111”,Getlength()会获取字符串长度为7,slength表示第二个操作数前面的字符串长度“123+”,此时slength=4,两数相减就可以得到第二个操作数的位数3了;

紧接着我们就可以对结果进行简单的加法运算了;

下面是关于“使用说明”、“退格”以及“清零”键的功能实现:

//“说明”按钮的实现void CCalculateDlg::OnBnClickedButton5(){// TODO: 在此添加控件通知处理程序代码MessageBox(TEXT("此计算器可以实现简单的加、减、乘、除等运算,对于操作数直接在键盘上输入即可,运算符请选择计算器中限定的运算符;n注意事项:n一、如果第二个操作数想输入负数,需在运算符后面将第二个数据括起来;n二、对于正弦、余弦、正切、阶乘、开方等计算,请先按运算符按键,再输入角度值或数值,比如计算90度的正弦值:sin+90(非弧度制);n三、对于“转为其它进制”的按键,这里只提供二进制(B)、八进制(O)以及十六进制(H)三种进制,输入其它进制均视为无效输入,输入格式为(需转换的数)->(进制基数)n四、对于log对数的输入格式要求:先输入底数(非负数且不等于1)+log+真数(非负数);n五、该计算器每次运算只支持两个操作数,如果想连续运算,可在结果后继续操作"),TEXT("使用说明"));}//“后退”键的实现void CCalculateDlg::OnBnClickedButton8(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//将屏幕中的数据转换到变量中if (!m_str.IsEmpty())//如果字符串不为空{if (m_str.Right(1) == '*' || m_str.Right(1) == '+' || m_str.Right(1) == '-' || m_str.Right(1) == '/' || m_str.Right(1) == '^' || m_str.Right(1) == '!')c = '0';m_str = m_str.Left(m_str.GetLength() - 1);}UpdateData(FALSE);//将变量中的信息显示到相应的框中}//“清零”键的实现void CCalculateDlg::OnBnClickedButton3(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);m_str = "";UpdateData(FALSE);}

更多功能的代码实现请微信关注公众号“艺千秋录”,回复“计算器”即可查看


参考文章:
参考文章直通车
推荐阅读网站

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。