Рисование значения переменной с 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 или любой другой вариант, который вам подходит.

Другие вопросы по тегам