tomvii  

第六次作业

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可以说是对编程全新的的一种探索,与原来的控制台编程有十分大的差异,更加注重了人机之间的交互,同时MFC的框架也都帮你封装好了,只要着重考虑程序的逻辑性即可,而不是每次的编程都需要重复的东西,也就更具有灵活性。

而且考验耐性的一块也正是程序的调试,由于与之前的编码长度完全不是同一数量级的,查阅资料并且敲出代码,一整片的报错(笑容完全消失)再继续修改。充实的端午QWQ

posted on 2017-05-31 21:15  tomvii  阅读(234)  评论(0编辑  收藏  举报