我想在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);
答案 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);