第六次作业
MFC的学习
接触了一下界面的设计MFC,这里安利一下一篇有意思的MFC学习文章(有点类似于教程)为MFC的学习提供了很多帮助。虽然每个控件的属性设计与界面的美化还在学习当中,这次已经做出一个简单生成算式的软件了,底下是核心的代码
void CMFCApplication1Dlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
GetDlgItemText(IDC_EDIT1, cstr1);//这儿就是取该输入框的值,并赋给str;
a = _ttoi(cstr1);
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if (a == sum)
{
Right++;
crstr.Format(_T("%d"), Right);
GetDlgItem(IDC_STATICR)->SetWindowTextW(crstr);
}
else //正确错误数量的显示
{
Wrong++;
cwstr.Format(_T("%d"), Wrong);
GetDlgItem(IDC_STATICW)->SetWindowTextW(cwstr);
}
}
void CMFCApplication1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
cstr2.Format(_T("%f"), sum);
AfxMessageBox(cstr2); //正确答案按钮
}
给出几组测试的图片吧(。・`ω´・)
顺便一提的是建立MFC设定基于对话框可以省去很多时间来进行繁琐的编码,直接从左侧工具栏拖动所需的按钮即可。之后包括添加事件等继续在编码中实现即可。
本次作业中栈的应用
原本是想用string类型可加性这种方法来替代栈的,后来还是老实用了栈(●'◡'●),不过的确是方便了许多。将算式中的符号与数字推入栈中,然后再输出即可实现要求,而且效率也相比之前的方法高。
这里也给出一下几处主要运用到栈来处理表示式的代码
while (!s.empty())
{
cout << s.top();
s.pop();
}
以上是主要用于清空栈,输出栈中的表达式。
s.push(str_num4);
s.push(sign2);
s.push(str_num3);
以上的则是通过将表达式的部分推入栈,再将表达式的符号等推入栈中。
这里说一个在处理栈问题中遇到的有意思的一点,因为设定的是string类型的栈,出现了之前没有遇到过的一种情况:switch在处理string类型会报错。翻阅了一下上学期的书再使用搜索引擎,发现switch表达式内的参数为一个int型的值,所以string无法使用。这里再安利一下 atoi(str.c_str())可以将string类型转换为int类型,这里我也就不再赘述了。
git链接
本次作业的感想
每次谈到感想的时候都感觉十分有意思,还是主要想谈谈对界面的看法。这次接触MFC可以说是对编程全新的的一种探索,与原来的控制台编程有十分大的差异,更加注重了人机之间的交互,同时MFC的框架也都帮你封装好了,只要着重考虑程序的逻辑性即可,而不是每次的编程都需要重复的东西,也就更具有灵活性。
而且考验耐性的一块也正是程序的调试,由于与之前的编码长度完全不是同一数量级的,查阅资料并且敲出代码,一整片的报错(笑容完全消失)再继续修改。充实的端午QWQ