我无法使用DrawText()函数

3

我正在尝试使用C ++上的GDI绘制一些文本。我的类有一个方法返回状态,我想画出它。这个状态是一个std :: string!

目前为止,我已经做到了以下几点:

        RECT status = RECT();
        status.left = rcClient.right-200;
        status.left = rcClient.left;
        status.top = rcClient.top;
        status.bottom = rcClient.bottom;

        DrawTextW(hdc, game->GetStatus().c_str(), 1, status, 0);

我遇到的错误如下:
error C2664: 'FormatMessageW' : 无法将参数 5 从 'LPWSTR' 转换为 'char *'687 damas
error C2664: 'FormatMessageW' : 无法将参数 5 从 'wchar_t *' 转换为 'char *'damas
error C2664: 'DrawTextW' : 无法将参数 2 从 'const char *' 转换为 'LPCWSTR'
我找不到解决方法...有人能帮帮我吗?

2
看起来你正在使用不同宽度的字符串来打印你想要从当前选择的Windows API中打印的文本。要么切换到使用窄字符串(可能不是最好的解决方案),要么将游戏状态设置为宽字符串。 - Will
2
使用 DrawTextA()FormatMessageA(),因为 W 变量需要宽字符串,但是 std::stringchar* - hmjd
我尝试了另一种替代方法,使用了textout...但它打印了一些奇怪的东西 :( - Killercode
1
@Killercode 这不是奇怪的东西,你只是使用了错误类型的字符串。就像之前的评论所说,要么改为wstring,要么改为DrawTextA。 - john
项目设置可能是选择了 unicode,这会选择宽字符串和函数的 DrawTextW 版本。您可能需要更改设置 - Peter Wood
1个回答

3

std::string使用的是char类型,但DrawTextW期望使用宽字符(WCHAR,与wchar_t相同)。

您可以显式调用DrawTextA并传递字符串。它将使用宽字符复制您的字符串,并将其传递给DrawTextW

DrawTextA(hdc, game->GetStatus().c_str(), 1, &status, 0);

(请注意,它需要指向RECT的指针,因此您还需要&。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接