【问题标题】:I can't use DrawText()我不能使用 DrawText()
【发布时间】:2013-04-11 17:29:10
【问题描述】:

我正在尝试在 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);

我的错误是:

错误 C2664:“FormatMessageW”:无法将参数 5 从“LPWSTR”转换为“char *”687 damas 错误 C2664:“FormatMessageW”:无法将参数 5 从“wchar_t *”转换为“char *”damas 错误 C2664:“DrawTextW”:无法将参数 2 从“const char *”转换为“LPCWSTR”

我找不到解决此问题的方法...有人可以帮帮我吗?

【问题讨论】:

  • 您似乎正在为要从当前选定的 Windows API 打印的文本使用不同宽度的字符串。要么切换到使用窄字符串(可能不是最佳解决方案),要么将游戏状态设为宽字符串。
  • 使用DrawTextA()FormatMessageA() 作为W 变体采用宽字符串,但std::stringchar*
  • 我尝试了另一种使用 textout 的解决方法...但它打印了一些奇怪的东西:(
  • @Killercode 这不是什么奇怪的东西,只是你的字符串类型不对。正如前面的cmets所说,要么改成wstring,要么改成DrawTextA。
  • 项目设置可能是unicode,它选择宽字符串和DrawTextW版本的函数。您可能需要change the settings

标签: c++ winapi gdi


【解决方案1】:

std::string 使用字符,但 DrawTextW 期望使用宽字符(WCHARs,与 wchar_ts 相同)。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多