MFC中的SetWindowTextA的显示问题,请求大神指导

在前面的项目中,定义了CStaticm_CityName;CStaticm_CityInfo;vector<string>city;vector<string>info;... 在前面的项目中,定义了
CStatic m_CityName;
CStatic m_CityInfo;
vector<string> city;
vector<string> info;
用来保存城市名称以及信息。

void CListDemoDlg::OnLbnSelchangeList1()
{
// TODO: 在此添加控件通知处理程序代码
vector<string>::size_type t=m_List.GetCurSel(); //获取当前项下标
m_CityName.SetWindowTextA(city[t].c_str()); //设置显示城市名 error
m_CityInfo.SetWindowTextA(info[t].c_str()); //设置显示城市信息 error
}
现在最后两行代码会出错。
Error:class"CStatic"没有成员“SetWindowTextA”。
展开
 我来答
intehel
推荐于2016-06-10 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1770万
展开全部
应该这样写:
SetWindowTextA(m_CityName.m_hWnd,city[t].c_str());

因为CWnd类只有SetWindowText成员函数,它内部调用的SetWindowText这个API。
而这个API根据编译时设置的字符集的不同而分别映射到SetWindowTextA或SetWindowTextW这两个API。
简而言之,就是CStatic类没有SetWindowTextA这个成员函数,只有SetWindowText。
更多追问追答
追问
谢谢回答,还有一个问题阁下可否随便回答一下:
while(in>>city_name>>city_info){
city.push_back(city_name);
info.push_back(city_info);
m_List.AddString(city_name.c_str()); //error

}
追答

因为你用的是UNICODE编码,所以AddString只接受LPCWSTR的指针(即UNICODE字符串),而string内部用的是MBCS编码。

有两种解决方法,第一种更彻底:

1、采用wstring替代string

2、

#include <atlconv.h>

将m_List.AddString(city_name.c_str());改为

USES_CONVERSION;
m_List.AddString(A2CW(city_name.c_str()));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式