intGetDlgItemText(intnID,LPTSTRlpStr,intnMaxCount)const;
int GetDlgItemText( int nID, CString& rString ) const;
下面就通过两条途径来实现:
1、第一种方法:intGetDlgItemText(intnID,LPTSTRlpStr,intnMaxCount)const;
int num1,num2,num3;
CString ch1,ch2,ch3;
GetDlgItemText(IDC_EDIT1,ch1.GetBuffer(10),10);
GetDlgItemText(IDC_EDIT2,ch2.GetBuffer(10),10);
num1=_wtoi(ch1);
num2=_wtoi(ch2);
num3=num1+num2;
_itow(num3,ch3.GetBuffer(10),10);
SetDlgItemText(IDC_EDIT3,ch3.GetBuffer(10));
ch1.ReleaseBuffer(10);
ch2.ReleaseBuffer(10);
ch3.ReleaseBuffer(10);
说明:
(1)本来没有必要这么麻烦,因为在创建这个工程的时候勾选了Unicode支持,程序支持了宽字符,因此在类型转换的时候遇到了很多新问题,因此,如果不是必须,可以在创建工程的时候去掉Unicode支持。不加Unicode支持的代码如下,不用CString而用了char数组。
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
SetDlgItemText(IDC_EDIT3,ch3);
(2)在用GetDlgItem()的时候,曾经用了如下代码:
GetDlgItemText(IDC_EDIT1,ch1.GetBuffer(ch1.GetLength()),((ch1.GetLength())));
其中GetBuffer()的作用主要是获得LPTSTR类型,GetLength()是为了获得编辑框中字符的长度,貌似没有问题的代码,在运行的时候却出现了问题。在Debug模式下,总是出现溢出,但在Realese模式下反而工作正常。经过测试,发现 ch1.GetLength()的值为0,说明Ch1.GetBuffer()只是取得了ch1的指针,但只有在执行了GetDlgItemText()执行后才能获得内容的长度。
(3)atoi()、_wtoi()、_ttoi() 与 itoa()、_itow()
atoi()函数和itoa()函数是ANSI下的函数,分别实现字符型与整型数据之间的互换;
_wtoi()和_itow()函数是Unicode下的函数,功能也是实现字符型与整型数据之间的互换;
另外,_wtoi()、_ttoi()功能相同,都是实现字符型向整型之间的转换。
2、第二种方法:int GetDlgItemText( int nID, CString& rString ) const;
int num1,num2,num3;
CString ch1,ch2,ch3;
GetDlgItemText(IDC_EDIT1,ch1);
GetDlgItemText(IDC_EDIT2,ch2);
num1=_wtoi(ch1);
num2=_wtoi(ch2);
num3=num1+num2;
_itow(num3,ch3.GetBuffer(10),10);
SetDlgItemText(IDC_EDIT3,ch3.GetBuffer(10));
ch3.ReleaseBuffer(10);