Win32编程TextOut WM_Paint

时间:2014-09-14 01:17:06

标签: c++ winapi

在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;

2 个答案:

答案 0 :(得分:3)

您需要将指针传递给char数组,而不是C ++字符串。尝试:

TextOut( hdc, rect.right/2, rect.bottom/2, text.c_str(), 1 );

请注意,您已要求它只输出一个字符。

答案 1 :(得分:3)

错误消息解释了问题所在:

LPCSTR类型是typedef(别名)const char *。这是一个C风格的指针,它是常量字符串"Something"默认为(但不是text)。

std::string类型是typedef(别名)std::basic_string<char>。这是一个C ++模板类,用于动态管理字符串,如C#/ Java字符串,或MFC / ATL中的CString类型。

&text行是指向字符串对象的指针,而不是指向字符串本身的指针。同样,std::string不会向const char *提供隐式转换。您需要显式调用text.c_str(),它适用于采用C风格字符串的API。

对于TextOut的最后一个参数,您可以传递-1来计算字符串的长度(不是1)。或者,当您在std::string对象中包含字符串时,可以使用text.size()