如何将int转换为LPCTSTR? Win32的

时间:2011-08-25 03:05:40

标签: c++ winapi

我想在win32 MessageBox中显示一个int值。我已经阅读了一些不同的方法来执行此演员表。有人可以为我提供良好的实施。

Win32编程新手,所以请轻松一下:)

更新

所以这就是我到目前为止所拥有的。它工作..但文本看起来像中文或其他一些双字节字符。我不是在研究Unicode而不是Unicode类型。有人能帮我理解我哪里错了吗?

 int volumeLevel = 6;
 std::stringstream os;
 os<<volumeLevel;
 std::string intString = os.str();  
  MessageBox(plugin.hwndParent,(LPCTSTR)intString.c_str(), L"", MB_OK);

5 个答案:

答案 0 :(得分:4)

转换为像belov一样的MFC:

int number = 1;

CString t;

t.Format(_T("%d"), number);

AfxMessageBox(t);

我用过,它对我有用。

答案 1 :(得分:3)

n几种方式:

int value = 42;
TCHAR buf[32];
_itot(value, buf, 10);

另一种更友好的方式:

int value = 42;
const size_t buflen = 100;
TCHAR buf[buflen];
_sntprintf(buf, buflen - 1, _T("the value is %d"), value);

答案 2 :(得分:3)

LPCTSTR的定义如下:

#ifdef  UNICODE
typedef const wchar_t* LPCTSTR;
#else
typedef const char* LPCTSTR;
#endif

std::string::c_str()仅返回const char*。您无法将const char*直接转换为const wchar_t*。通常编译器会抱怨它,但是使用LPCTSTR强制转换,最终会迫使编译器关闭它。所以当然它不能像你期望的那样在运行时工作。要建立在你的问题中,你可能想要的是这样的:

// See Felix Dombek's comment under OP's question.
#ifdef UNICODE
typedef std::wostringstream tstringstream;
#else
typedef std::ostringstream tstringstream;
#endif

int volumeLevel = 6;    
tstringstream stros;    
stros << volumeLevel;     
::MessageBox(plugin.hwndParent, stros.str().c_str(), L"", MB_OK);  

答案 3 :(得分:1)

int OurVariable;

LPCWSTR result=(to_string(OurVariable).c_str());

LPCWSTR result=LPCSTR(to_string(OurVariable).c_str());

LPCSTR result=(to_string(OurVariable).c_str());

它 真的有用吗

答案 4 :(得分:0)

使用_T()装饰器获取支持Unicode的代码:

int number = 1;

CString t;

t.Format(_T("%d"), number);

AfxMessageBox(t);

参考:https://social.msdn.microsoft.com/Forums/vstudio/en-US/f202b3df-5849-4d59-b0d9-a4fa69046223/how-to-convert-int-to-lpctstr?forum=vclanguage