我正在尝试使用 TextOut 函数在我的窗口上绘制文字,以下方法对我来说效果很好:
HDC hdc = GetDC(windowHandle);
TextOut(hdc, 10, 10, TEXT("Hello World"), 16);
ReleaseDC(windowHandle, hdc);
这输出:Hello World
到目前为止一切都很好,但是当我执行以下方法时:
HDC hdc = GetDC(windowHandle);
string myString = "Hello World";
TextOut(hdc, 10, 10, myString.c_str(), 16);
ReleaseDC(windowHandle, hdc);
程序输出:Hello World#$%^&
和#$%^& 部分实际上是我不确定如何在键盘上书写的其他方形符号。我知道 TextOut 函数的第四个参数是 LPCSTR 类型,并且在我的字符串之后使用 .c_str() 函数应该正确输出 LPCSTR 变量,自程序运行以来它也是如此,但是为什么我得到 teh #$% ^& 包含在 Hello World 的末尾,我该如何解决这个问题?我确实需要使用第二种方法而不是第一种方法,因为我的程序将生成字符串,然后我想将其输出到我的窗口。
最佳答案
根据 TextOut ( http://msdn.microsoft.com/en-us/library/windows/desktop/dd145133%28v=vs.85%29.aspx) 的文档,fith 参数反射(reflect)了字符串的长度。您在这里说的是 16
,但实际上只有 11。
关于TextOut() gdi 函数 LPCSTR 参数的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429722/