c++ - Win32编程 TextOut WM_Paint

标签 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;

最佳答案

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

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/

相关文章:

winapi - Windows SYSTEMTIME 结构与系统时钟不同吗?

windows - 在 Windows 8 上声明每个窗口的高 DPI 感知

c++ - 为什么 for_each + lambda 会触发 -Waggregate-return 警告?

c++ - 使用 GNU AutoTools 设置和使用数据目录路径

c++ - 从派生类调用虚函数崩溃

c++ - 获取 MAC 地址的代码似乎会损坏内存,但仅在 Release 版本中,而不是 Debug 版本中

python - 使用 pywin32 在登录屏幕中无法使用键盘

c++ - 如何将 SHFileOperation() 与 CString 路径一起使用

c++ - USB hid 设备插入/移除检测 winapi

c++ - 如何将图的一部分压缩成单个节点并能够找到从一个节点到所有节点的最短路径?