Как мне конвертировать int в LPCTSTR?Win32 - PullRequest
3 голосов
/ 25 августа 2011

Я хотел бы отобразить значение int в win32 MessageBox. Я прочитал несколько разных методов, чтобы выполнить этот актерский состав. Может ли кто-нибудь предоставить мне хорошую реализацию.

Новое в программировании на 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 ]

4 голосов
/ 27 февраля 2014

Конвертирование для MFC, как Белов:

int number = 1;

CString t;

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

AfxMessageBox(t);

Я использовал, и у меня это сработало.

3 голосов
/ 25 августа 2011

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 голосов
/ 25 августа 2011

нет нескольких способов:

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);
1 голос
/ 02 июня 2014
int OurVariable;

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

или

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

или

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

это действительно работает

0 голосов
/ 25 апреля 2018

Используйте _T() декоратор для кода, поддерживающего Юникод:

int number = 1;

CString t;

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

AfxMessageBox(t);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...