字符串到 LPCTSTR [重复]
Posted
技术标签:
【中文标题】字符串到 LPCTSTR [重复]【英文标题】:string to a LPCTSTR [duplicate] 【发布时间】:2012-03-25 18:14:33 【问题描述】:可能重复:C++ std::string conversion problem on WindowsHow to convert std::string to LPCSTR?
我想将一个窗口 ( WM_SETTEXT ) 重命名为其他名称。有一个包含新窗口名称的 std::string 。我需要将 std::string 转换为“LPCTSTR”,这是因为 SendMessage 需要“LPCTSTR”中的名称。
我无法让它工作,有人可以帮我将字符串转换为 LPCTSTR 吗?
【问题讨论】:
C++ std::string conversion problem on Windows 或 ***.com/questions/1200188/… 的可能重复项,或此页面上的许多其他“相关”问题。 你的程序是用Unicode还是ANSI模式编译的?这会影响LPCTSTR
的真正含义。
使用 SetWindowTextA() 是快速修复。
哦@Hans,不要鼓励 ANSI 文本的邪恶! ;-)
【参考方案1】:
使用std::string
的c_str()
方法。这将返回一个 C 字符串,即一个指向以 null 结尾的字符数组的指针。
SendMessage(Handle, WM_SETTEXT, 0, (LPARAM)str.c_str());
如果您正在为 ANSI 编译,这很好。如果您正在为 Unicode 编译,那么您应该使用 wstring
而不是 string
。如果是这种情况,只需更改为 wstring
,对 SendMessage
的调用就可以完全按照上面的说明进行。
【讨论】:
如果我这样做,那么我的窗口会得到一个奇怪的名称“?????_|” 那是因为 ANSI 和 Unicode 不匹配。如果您以 Unicode 为目标,请使用wstring
。如果您使用 ANSI,请使用 string
。我强烈建议您不要在 2012 年使用 ANSI。为 Unicode 构建您的应用程序并使用 wstring
。根本不要理会TCHAR
,在我看来,它只会让人感到困惑,没有明显的收获。以上是关于字符串到 LPCTSTR [重复]的主要内容,如果未能解决你的问题,请参考以下文章