Отрисовка значения переменной с помощью 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'

Любая помощь приветствуется.


person Neevo    schedule 14.06.2012    source источник


Ответы (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-строки для вашего приложения.

person JustSomeGuy    schedule 14.06.2012

Как упоминалось в предыдущем постере, вы можете использовать строковые потоки для преобразования целых чисел в строки и наоборот, но в C++11 появились некоторые новые функции, которые избавляют от необходимости делать это. Вы можете использовать std::to_string или std::to_wstring для преобразования целых чисел в строки или wstrings, и вы можете использовать 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 или любой другой вариант, который вам подходит.

person derpface    schedule 10.02.2013