0
点赞
收藏
分享

微信扫一扫

简单计算(不是计算器,a+b=c类型的计算)


为了完成作业,我先写点简单的计算有关的MFC的函数。不小心发现有太多要学的

效果如下:

简单计算(不是计算器,a+b=c类型的计算)_MFC A+B=C类型计算(1)

一.组键的设计

像上一篇说的方式创建一个对话框。

1.添加一些组键如下:(具体操作看上一篇)

简单计算(不是计算器,a+b=c类型的计算)_字符串_02


2.来给3个编辑框添加类变量

例如第一个可以右键再这样给个名字就可以了,

简单计算(不是计算器,a+b=c类型的计算)_ico_03


二.代码区

例如第一个“+”的button:

点击Dialog中的“+”按钮直接进入

简单计算(不是计算器,a+b=c类型的计算)_MFC A+B=C类型计算(1)_04


简单计算(不是计算器,a+b=c类型的计算)_字符串_05


简单计算(不是计算器,a+b=c类型的计算)_ico_06


简单计算(不是计算器,a+b=c类型的计算)_MFC A+B=C类型计算(1)_07


还有一种int和CString TCHAR 转换(不过只能显示int类型结果,效果没有上面的好)

(还要#include “Tchar.h” // 需要包含此头文件)

例如加法的

void CMFCApplication12Dlg::OnBnClickedButton1()// +

{

int a, b, c;

TCHAR ch1[10], ch2[10], ch3[10]; //如果使用char的话,编译提示出错。msdn中给的范例采用TCHAR.

CString str1, str2, str3;
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1, 10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2, 10);

str1.Format(_T("%s"), ch1);//把TCHAR转换为CString
a = _wtoi(str1);// 再把CString转换为int
str2.Format(_T("%s"), ch2);
b = _wtoi(str2);
c = a + b;
str3.Format(_T("%d"), c);
result.SetWindowText(str3);

}

对于类型转化的,推荐
​​​https://www.baidu.com/link?url=PWy_B_xw-90​​三.分析代码
编辑框组键变量分别是 num1,num2,result
UpdateData(TRUE);//将控件上显示上的数据更新到关联变量
UpdateData(FALSE);将关联变量的值更新到控件显示。
当改变控件对应的关联变量的值的时候,要使用UpdateData(FALSE)来更新显示。
当在界面上更改控件的值的时候,要使用UpdateData(TRUE);将值更新到关联变量
或者如果不使用关联变量,可以使用GetDlgItemText(IDC_EDIT,str);或SetDlgItemText(IDC_EDIT,str)来更改控件的值的时候,就不需要UpdateData()函数

1.代码区中“ num1.GetWindowTextW(a);”函数原型:

int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

void GetWindowTextW( CString& rString ) const;

如果目标窗口属于当前进程,GetWindowText函数给指定的窗口或控件发送WM_GETTEXT消息。如果目标窗口属于其他进程,并且有一个窗口标题,则GetWindowTeXt返回窗口的标题文本,如果窗口无标题,则函数返回空字符串。

下面这个介绍的还可以
​​​http://blog.sina.com.cn/s/blog_c1a4e4540102w1yp.html​​​ 2. CString a, b, c;
代码区“double n1 = _ttof(a);”
函数是把CString转换为doube.
“c.Format(_T("%f"), n3);”是将double的n3值根据前面的变量c转换为CString
3.“result.SetWindowTextW©;“

SetWindowTextW表示设置的字符串是WCHAR (双字节字符 )
SetWindowTextA表示设置的字符串是CHAR (单字节字符 )
SetWindowText表示设置的字符串是自动匹配当前项目的字符环境是单字节还是双字节字符
Windows API宏,在WinUser.h中根据是否已定义Unicode被分别定义为SetWindowTextW和SetWindowTextA,这两个函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。特别需要引起重视的是,【SetWindowText函数不改变在其他应用程序中的控件的文本内容,如果需要可以用另外一个SendMessage函数发送一条WM_SETTEXT消息】。

4.“c.Format(_T("%f"), n3);”
_T("")就是把引号内的字符串转换为宽字节的Unicode编码,和TEXT("")作用是一样的。
在字符串前加一个L作用: unicode字符集是两个字节组成的。L告示编译器使用两个字节的 unicode 字符集。
如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。
_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式
如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T(“ABCD”) 相当于 L"ABCD" ,这是宽字符串。
如果没有定义,那么_T宏不会在字符串前面加那个L,_T(“ABCD”) 就等价于 “ABCD”

如果你接触过unicode你就明白在许多API函数中字符串都需要宽字符的,也就是用两个字节来表示一个字符,这与ANSI字符不同,后者使用一个字节表示一个字符,字符串前加L,就是将ANSI字符转换成UNICODE字符。

这篇文章详细介绍 ANSI 和 UNICODE


举报

相关推荐

0 条评论