Рисование значения переменной с C++ и DirectX9
Как я могу нарисовать значение переменной на экране с помощью DirectX9? Я знаю, что могу использовать метод DrawText() для рисования текста следующим образом:
m_pD3DFont->DrawText(0, "text", -1, &rect, DT_TOP | DT_RIGHT | DT_NOCLIP, D3DCOLOR_ARGB(255, 255, 255, 255));
Но как мне заставить его нарисовать значение переменной? Целое число, в частности. Я попытался преобразовать целое число в строку, но затем я получаю сообщение об ошибке
невозможно преобразовать параметр 2 из 'std::string *' в 'LPCWSTR'
Любая помощь приветствуется.
2 ответа
Для преобразования целых чисел в строки, строки в целые числа и т. Д. Вы можете использовать std::stringstream
как это
std::stringstream ss;
std::string s = "123";
ss << s;
int result;
ss >> result;
Более подробная информация здесь http://cplusplus.com/reference/iostream/stringstream/
Или вы можете использовать std::wstringstream
а также std::wstring
если вам нужны Unicode-строки для вашего приложения.
Как упоминалось в предыдущем постере, вы можете использовать строковые потоки для преобразования целых в строки и наоборот, но в C++11 есть некоторые новые функции, которые устраняют необходимость делать это. Вы можете использовать std::to_string или std::to_wstring, чтобы преобразовать целые числа в строки или строки wstring, и вы можете использовать c_str(), чтобы получить необработанный тип char * или wchar_t * из строкового объекта. Вы должны быть в состоянии преобразовать соответствующий тип указателя в вашу строку winapi, но некоторые могут зависеть от настроек вашего компилятора.
Для справки, вот что означают строки winapi:
LPSTR = char*
LPCSTR = const char*
LPWSTR = wchar_t*
LPCWSTR = const wchar_t*
LPTSTR = char* or wchar_t* depending on _UNICODE
LPCTSTR = const char* or const wchar_t* depending on _UNICODE
И вот быстрый пример того, как назначить их для строк C++:
#include <iostream>
#include <string>
#include <Windows.h>
#include <tchar.h>
int main()
{
// Declare winapi strings
LPSTR str_charPtr;
LPCSTR str_constCharPtr;
LPWSTR str_wcharPtr;
LPCWSTR str_constWcharPtr;
LPTSTR str_tcharPtr;
LPCTSTR str_constTcharPtr;
// Declare a test integer
int num = 5001;
// Convert the integer to a string and to a wstring
std::string regString = std::to_string(num);
std::wstring wideString = std::to_wstring(num);
// Attempt to assign the winapi strings to the C++ standard strings
str_charPtr = const_cast<char*>(regString.c_str()); // NOTE: removing const to store in non-const LPSTR
str_constCharPtr = regString.c_str();
str_wcharPtr = const_cast<wchar_t*>(wideString.c_str()); // NOTE: removing const to store in non-cost LPWSTR
str_constWcharPtr = wideString.c_str();
str_tcharPtr = const_cast<TCHAR*>(regString.c_str()); // Error if set to Unicode
str_tcharPtr = const_cast<TCHAR*>(wideString.c_str()); // Error if NOT set to Unicode
str_constTcharPtr = regString.c_str(); // Error if set to Unicode
str_constTcharPtr = wideString.c_str(); // Error if NOT set to Unicde
return 0;
}
Если вы уже перешли на Visual Studio 2012, вы можете настроить свои параметры следующим образом:
1. Щелкните правой кнопкой мыши проект в обозревателе решений.
2. Нажмите на Свойства.
3. На левой панели в разделе "Свойства конфигурации" выберите "Общие".
4. На правой панели посмотрите раздел "Настройки проекта по умолчанию".
5. Рядом с набором символов выберите Unicode или любой другой вариант, который вам подходит.