GetWindowText和SetWindowTextW以及SetWindowText

时间:2022-09-07 21:12:44
代码如下:
void CTestDlg::OnClickedBtnSum()
{
// TODO: Add your control notification handler code here
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1) ->GetWindowText(ch1, 10);
问题一:“->”处提示错误,信息如下,
1 IntelliSense: no instance of overloaded function "CWnd::GetWindowTextW" matches the argument list c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\mybole\mybole\testdlg.cpp 102 23 Mybole

“10”处提示错误,信息如下:
2 IntelliSense: too many arguments in function call c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\mybole\mybole\testdlg.cpp 102 43 Mybole


GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=atoi(ch3);
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText( ch3);

问题二:“ch3”处提示错误,信息如下:
5 IntelliSense: argument of type "char *" is incompatible with parameter of type "LPCTSTR" c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\mybole\mybole\testdlg.cpp 108 39 Mybole

如果将“ch3”改为“_T(ch3)”,则会提示错误:
5 IntelliSense: identifier "Lch3" is undefined c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\mybole\mybole\testdlg.cpp 108 39 Mybole

这是怎么回事,应该怎样修改???



}

问题三:VS2010智能提示方法“SetWindowTextW”而不是“GetWindowText”,为什么???两者之间有什么样的差别呢???

13 个解决方案

#1


把你的char换成TCHAR

#2


下面的atoi()这些函数也需要修改_ttoi();

#3


你F12找一下SetWindowText的定义应该会发现其实它是根据工程所用字符集来调用SetWindowTextW或SetWindowTextA,而xp以上系统内部只有SetWindowTextW一个函数,SetWindowTextA也只是把参数转换后再调用SetWindowTextW而已

#4


你看你的编译环境是什么
多字节,还是Unicode。。

#5


		int num1,num2,num3;
TCHAR ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);



GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
num1=_wtoi(ch1);
num2=_wtoi(ch2);
num3=_wtoi(ch3);
_itow(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

#6


引用 5 楼 wangweixu520 的回复:
C/C++ code
        int num1,num2,num3;
        TCHAR ch1[10],ch2[10],ch3[10];
        GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);



        GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
        n……


编译环境用的是VS2010。。。
为什么要用“TCHAR”???

“_wtoi”中“_w”是什么意思???

“_itow”中为什么要用“_”呢???

#7


该回复于2011-11-29 09:39:43被版主删除

#8


你把工程属性改成多字节字符集

#9


编译环境中有个项目属性其中可以设置Unicode字符集和多字节字符集
Unicode对应TCHAR
多字节对应char

对于函数来说一般都有最后带W的是对应Unicode 最后带A的是对应多字节

比如SetWindowTextW 这个函数就是对应Unicode 他的输入参数就需要是TCHAR

#10


char * 和 lpctstr 可不一应哦,需要转化的。

#11


“LRESULT”是什么类型,返回“0”可以吗???

LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
//取出接收到的数据
CString str=(char*)lParam;
CString strTemp;

//获得已有数据
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECEV,str);
return 0;
}

#12


“LRESULT”是什么类型,返回“0”可以吗???

LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
//取出接收到的数据
CString str=(char*)lParam;
CString strTemp;

//获得已有数据
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECEV,str);
return 0;
}

#13


找本windows 编程序书看看,也是很不错的选择了。

#1


把你的char换成TCHAR

#2


下面的atoi()这些函数也需要修改_ttoi();

#3


你F12找一下SetWindowText的定义应该会发现其实它是根据工程所用字符集来调用SetWindowTextW或SetWindowTextA,而xp以上系统内部只有SetWindowTextW一个函数,SetWindowTextA也只是把参数转换后再调用SetWindowTextW而已

#4


你看你的编译环境是什么
多字节,还是Unicode。。

#5


		int num1,num2,num3;
TCHAR ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);



GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
num1=_wtoi(ch1);
num2=_wtoi(ch2);
num3=_wtoi(ch3);
_itow(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

#6


引用 5 楼 wangweixu520 的回复:
C/C++ code
        int num1,num2,num3;
        TCHAR ch1[10],ch2[10],ch3[10];
        GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);



        GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);
        n……


编译环境用的是VS2010。。。
为什么要用“TCHAR”???

“_wtoi”中“_w”是什么意思???

“_itow”中为什么要用“_”呢???

#7


该回复于2011-11-29 09:39:43被版主删除

#8


你把工程属性改成多字节字符集

#9


编译环境中有个项目属性其中可以设置Unicode字符集和多字节字符集
Unicode对应TCHAR
多字节对应char

对于函数来说一般都有最后带W的是对应Unicode 最后带A的是对应多字节

比如SetWindowTextW 这个函数就是对应Unicode 他的输入参数就需要是TCHAR

#10


char * 和 lpctstr 可不一应哦,需要转化的。

#11


“LRESULT”是什么类型,返回“0”可以吗???

LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
//取出接收到的数据
CString str=(char*)lParam;
CString strTemp;

//获得已有数据
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECEV,str);
return 0;
}

#12


“LRESULT”是什么类型,返回“0”可以吗???

LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
//取出接收到的数据
CString str=(char*)lParam;
CString strTemp;

//获得已有数据
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECEV,str);
return 0;
}

#13


找本windows 编程序书看看,也是很不错的选择了。