在 TextOut 行的这段代码中遇到一些问题,它说:
error: cannot convert 'std::string* {aka std::basic_string<char>*}' to
'LPCSTR {aka const char*}' for argument 4 to
'BOOL TextOutA(HDC, int, int, LPCSTR, int)'
我已经搜索了一段时间,但没能找到任何既不会永远让我感到困惑,也不会完成我想做的事情的东西,那就是绘制一个字符串。
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
string text = "Something";
RECT rect;
GetClientRect( hwnd, &rect );
hdc = BeginPaint( hwnd, &ps );
TextOut( hdc, rect.right/2, rect.bottom/2, &text, 1 );
EndPaint( hwnd, &ps );
}
return 0;
break;
最佳答案
错误消息解释了问题所在:
LPCSTR
类型是 typedef(别名)const char *
.这是一个C风格的指针,也就是常量字符串"Something"
默认为(但不是 text
)。
std::string
类型是 typedef(别名)std::basic_string<char>
.这是一个 C++ 模板类,用于动态管理字符串,如 C#/Java 字符串或 CString
从 MFC/ATL 类型。
&text
line 是指向字符串对象的指针,而不是指向字符串本身的指针。同样,std::string
不提供对 const char *
的隐式转换.您需要显式调用 text.c_str()
它旨在与采用 C 风格字符串的 API 一起使用。
对于 TextOut
的最后一个参数, 你可以通过 -1
让它计算字符串的长度(不是 1
)。或者,因为您在 std::string
中有字符串对象,您可以使用 text.size()
.
关于c++ - Win32编程 TextOut WM_Paint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25829243/