[英]Win32 programming TextOut WM_Paint
在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;
您需要传递一个指向char数组的指针,而不是C ++字符串。 尝试:
TextOut( hdc, rect.right/2, rect.bottom/2, text.c_str(), 1 );
请注意,您已要求它仅输出一个字符。
错误消息说明了问题所在:
LPCSTR
类型是const char *
的typedef(别名)。 这是C风格的指针,这是常量字符串"Something"
默认为的值(而不是text
)。
std::string
类型是std::basic_string<char>
的typedef(别名)。 这是一个C ++模板类,用于动态管理字符串,例如C#/ Java字符串或MFC / ATL中的CString
类型。
&text
行是指向字符串对象的指针,而不是指向字符串本身的指针。 同样, std::string
不提供对const char *
隐式转换。 您需要显式调用text.c_str()
,该text.c_str()
旨在与采用C样式字符串的API一起使用。
对于TextOut
的最后一个参数,您可以传递-1
以获取它来计算字符串的长度(而不是1
)。 另外,当字符串在std::string
对象中时,可以使用text.size()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.