繁体   English   中英

Win32编程TextOut WM_Paint

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM