使用C ++和DirectX9绘制变量的值

时间:2012-06-14 07:06:38

标签: c++ directx directx-9

如何使用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 个答案:

答案 0 :(得分:0)

要将整数转换为字符串,将字符串转换为整数等,您可以使用std::stringstream之类的

std::stringstream ss;
std::string s = "123";
ss << s;
int result; 
ss >> result;

此处提供更多信息http://cplusplus.com/reference/iostream/stringstream/

如果您的应用需要Unicode字符串,则可以使用std::wstringstreamstd::wstring

答案 1 :(得分:0)

正如之前的海报所提到的,你可以使用字符串流将int转换为字符串,反之亦然,但是使用C ++ 11时,有一些新功能可以消除这种需要。您可以使用std :: to_string或std :: to_wstring将int转换为字符串或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”或适合您的任何选项。