CString 在 MFC 中编辑控件
Posted
技术标签:
【中文标题】CString 在 MFC 中编辑控件【英文标题】:CString to Edit Control in MFC 【发布时间】:2014-12-22 18:36:13 【问题描述】:所以我正在从 .txt 文件中检索 so 数据到 myclass(类),包括
public:
vector<int> ID
vector<string> name
vector<string> add
但是当我尝试访问它们以在 MFC dlg 的编辑框中显示它们时,它只会将这个返回到框中:
ID: 1
Name: (jibberish)
address: (jiberish)
ID: 2
Name: (jibberish)
address: (jiberish)
etc...
for循环中编辑控件框使用的代码
int s1;
CString s2, s3;
s1.Format(_T("\r\nID: %d"),myclass.ID[i]);
s2.Format(_T("\r\nName: %s"),myclass.name[i]);
s3.Format(_T("\r\nAddress: %s"),myclass.add[i]);
Edi_box += s1 + s2 + s3;
所以它读取整数向量而不是字符串向量
【问题讨论】:
【参考方案1】:_T
宏将根据 VS 项目的字符集设置创建 wchar_t 字符串或 char 字符串。为了将std::string
(基于字符的)格式化为其中之一,您必须使用正确的转换。 Microsoft 为许多函数支持的“普通”printf()
样式语法提供了一个扩展:使用 %ls
插入 wchar_t 字符串,使用 %hs
插入 char 字符串。
注意事项:
从 wchar_t 到 char 的转换可能会失败,因此除非您已经有限制输入,否则不要期望那里的质量结果。 您不能通过省略号传递任何类类型对象,因此您需要来自 c_str() 函数的 C 风格、以 NUL 结尾的字符串。 如果您有多个向量,其中每个元素对应于另一个元素的一个元素,请使用带有结构的单个向量,这会使您的代码更加清晰。 将行尾字符(“\r\n”)放在end。 ;)【讨论】:
这很好,但只是与 .c_str() 结合非常感谢 很高兴我能帮上忙,@FranciscoMatias。实际上我很惊讶编译器没有告诉你,因为通过省略号传递任何类对象是不正确的——也许你禁用了相应的警告?【参考方案2】:您不能(或至少不应该)使用%s
格式化std::string
。试试这个:
s2.Format( _T("\r\nName: %s"), myclass.name[i].c_str() );
对其他 std::string
变量进行同样的操作。
【讨论】:
因为Format
的可变参数列表,它无法判断你什么时候用错了。大多数无法通过原始std::string
的地方,如果您尝试,您会收到错误消息,但这里不会。
我已经试过了,但是我有更多的乱码,而不是 1 个乱码
将 .c_str 与 %hs 结合使用,它终于可以工作了。非常感谢你们俩以上是关于CString 在 MFC 中编辑控件的主要内容,如果未能解决你的问题,请参考以下文章