2012-03-25 67 views
1

可能重复:
C++ std::string conversion problem on Windows
How to convert std::string to LPCSTR?字符串到LPCTSTR

我想重新命名一个窗口(WM_SETTEXT)到别的东西。有一个包含新窗口名称的std :: string。我需要将std :: string转换为“LPCTSTR”,这是因为SendMessage需要“LPCTSTR”中的名称。

我不能得到这个工作,有人可以帮我把字符串转换为LPCTSTR吗?

+0

可能的[Windows上的C++ std :: string转换问题](http://stackoverflow.com/questions/874433/c-stdstring-conversion-problem-on-windows)或http:// stackoverflow的重复。 com/questions/1200188/how-to-convert-stdstring-to-lpcstr,或者本页面上其他相关的其他问题。 – Mat 2012-03-25 18:16:42

+1

您的程序是以Unicode还是ANSI模式编译的?这会影响'LPCTSTR'的真实含义。 – 2012-03-25 18:18:00

+0

使用SetWindowTextA()是快速修复。 – 2012-03-25 19:38:04

回答

6

使用std::stringc_str()方法。这返回一个C字符串,即一个指向空终止字符数组的指针。

SendMessage(Handle, WM_SETTEXT, 0, (LPARAM)str.c_str()); 

这很好,如果你正在为ANSI编译。如果您正在编译Unicode,那么您应该使用wstring而不是string。如果是这种情况,只需更改为wstring,致电SendMessage的呼叫与上面所述完全相同。

+0

如果我这样做,那么我的窗口会得到一个奇怪的名字“????? _ |” – Laurence 2012-03-25 18:20:03

+6

这是因为您的ANSI和Unicode之间不匹配。如果您的目标是Unicode,请使用'wstring'。如果您使用ANSI,请使用'string'。我强烈建议你不要在2012年使用ANSI。为Unicode构建应用程序并使用'wstring'。在我看来,根本不用“TCHAR”,它只是混淆了没有明显的收益。 – 2012-03-25 18:22:51