GetWindowText()有关问题解答——VS2012
2016-09-13 16:03
309 查看
GetWindowText()有关问题解答——VS2012
GetWindowText()问题解答——VS2012
int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
问题描述:(VC6.0没问题)view plain
//定义了三个编辑框控件 接受num1 num2 num3
void CTestDlg::OnBnClickedButton1() //响应按钮 add
{
// TODO: 在此添加控件通知处理程序代码
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowTextW(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowTextW(ch3);//当计算好num1+num2 显示在第三个编辑框控件中
}
出现错误
f:/visual studio 2008/projects/mydialog/mydialog/testdlg.cpp(75) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数
1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:/visual studio 2008/projects/mydialog/mydialog/testdlg.cpp(76) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”:
不能将参数 1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:/visual studio 2008/projects/mydialog/mydialog/testdlg.cpp(84) : error C2664: “CWnd::SetWindowTextW”: 不能将参数 1 从“char [10]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
以前遇到这种问题一直是在问题处加 _T() 就行
但是这里加就会发出错误
f:/visual studio 2008/projects/mydialog/mydialog/testdlg.cpp(75) : error C2065: “Lch1”: 未声明的标识符
1.在以前的书上都是用的GetWindowText 现在的好多函数都加W 这是为什么呢??
#ifdef UNICODE #define GetWindowText GetWindowTextW #else #define GetWindowText GetWindowTextA #endif // !UNICODEMFC定义了2和版本的GetWindowText:GetWindowTextW(UNICODE)和GetWindowTextA(ANSI编码)
2.还有加_T是什么意思啊???
_T("")是一个宏,定义于tchar.h下。
#define __T(x) L ## x
#define _T(x) __T(x)
他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows
NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。
LPSTR:32bit指针指向一个字符串,每个字符占1字节
LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节
LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR:32-bit指针每字符可能占1字节或2字节,取决于Unicode是否定义
L是表示字符串资源为Unicode的。
比如
wchar_tStr[] = L"Hello World!";
这个就是双字节存储字符了。
_T是一个适配的宏~
当
#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。
[cpp] view plaincopy
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
3.帮忙解决上面的错误
我的解决:
一、
int num1,num2,num3; CString str1,str2,str3; GetDlgItem(IDC_EDIT1)->GetWindowText(str1); GetDlgItem(IDC_EDIT2)->GetWindowText(str2); num1 = _ttoi(str1); num2 = _ttoi(str2); num3 = num1 + num2; str3.Format(_T("%d"),num3); GetDlgItem(IDC_EDIT3)->SetWindowText(str3);
二、
int num1,num2,num3; TCHAR ch1[10],ch2[10],ch3[10]; GetDlgItem(IDC_EDIT2)->GetWindowText(ch1,10); GetDlgItem(IDC_EDIT3)->GetWindowText(ch2,10); num1=_ttoi(ch1); num2=_ttoi(ch2); num3=num1+num2; _itot(num3,ch3,10); GetDlgItem(IDC_EDIT4)->SetWindowText((LPTSTR)ch3);
两个重载函数
/********************************************/ int num1,num2,num3; CString str1,str2,str3; GetDlgItemText(IDC_EDIT1,str1); GetDlgItemText(IDC_EDIT2,str2); num1 = _ttoi(str1); num2 = _ttoi(str2); num3 = num1 + num2; str3.Format(_T("%d"),num3); SetDlgItemText(IDC_EDIT3,str3); /********************************************/ int num1,num2,num3; TCHAR str1[10],str2[10],str3[10]; GetDlgItemText(IDC_EDIT1,str1,10); GetDlgItemText(IDC_EDIT2,str2,10); num1 = _ttoi(str1); num2 = _ttoi(str2); num3 = num1 + num2; _itot_s(num3,str3,10); SetDlgItemText(IDC_EDIT3,str3); /**********************************************/
以下来自其他网友的解决方法:
问题解决:
view plain
C/C++ codevoidCTestDlg::OnBnClickedButton1()//响应按钮 add{//TODO: 在此添加控件通知处理程序代码intnum1,num2,num3;
CString str1, str2, str3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2);
num1=_ttoi((LPCTSTR)str1);
num2=_ttoi((LPCTSTR)str2);
num3=num1+num2;
_itot(num3,(TCHAR*)str3.GetBuffer(10),10);
str3.ReleaseBuffer();
GetDlgItem(IDC_EDIT3)->SetWindowText(str3);//当计算好num1+num2 显示在第三个编辑框控件中
个人新想法,看了你之前的转的解决方法,是用了GetWindowText的另一重载函数,我是试着用视频里的那种函数形式,结果没有发现错误,目前暂时认为是对的…………哈哈
相关文章推荐
- GetWindowText()问题解答——VS2012
- 有关 .NET Framework 3.0 版本控制和部署的问题与解答
- 有关Applet无法在IE中显示问题的解答!
- Andriod Studio科学文章——4.常见问题解答有关编译
- csdn一个有关影像处理问题帖子的解答
- 关于windows server 2012的有关问题及解答
- 有关《查找两个List中的不同元素》的问题解答与编程实践
- 有关cannot restore segment prot after reloc: Permission denied 问题的解答
- 一个有关数组的问题的解答
- 有关Moblin的十大技术问题解答
- 有关HashMap的一些问题及解答
- 一个有关DISTINCT的问题解答
- 一个有关typeglob问题的解答
- 有关《查找两个List中的不同元素》的问题解答与编程实践
- 有关office 2010办公软件安装不上的问题解答
- 有关Linux Shell脚本的10个常见面试问题与解答
- 有关“树上剩余几只鸟”的问题的思考及解答
- 有关Sybase ASE数据库的几个问题的解答
- [Android实例] 有关spinner 的item问题 谁能给解答下??
- 一个有关DISTINCT的问题解答