来自 wchar_t* 的 C++ Win32 GDI+ 拉绳

Posted

技术标签:

【中文标题】来自 wchar_t* 的 C++ Win32 GDI+ 拉绳【英文标题】:C++ Win32 GDI+ drawstring from wchar_t* 【发布时间】:2014-09-22 07:12:02 【问题描述】:

我已经完成了搜索并为此花费了至少一个小时。

wchar_t* fooBar = (wchar_t*)L"BlahBlah\0";
//GetWindowText(pDIS->hwndItem, (wchar_t*)fooBar, 64); 
g->DrawString(fooBar, -1, &font, rectf, &strFormat, textColorUp);

这可以工作,并且可以编译;因为正确绘制了字符串“BlahBlah”。

问题是我想使用已注释掉的 GetWindowText() 的值。

转换可能有问题,但我就是找不到。

【问题讨论】:

【参考方案1】:

您需要为GetWindowText 函数分配空间来写入。您不能提供字符串文字的地址,因为它们是不可修改的。

wchar_t buffer[1024];
GetWindowText(pDIS->hwndItem, buffer, _countof(buffer));
g->DrawString(fooBar, -1, &font, rectf, &strFormat, textColorUp);

【讨论】:

谢谢。我找到了_countof()的宏,即:#define _countof(array) (sizeof(array)/sizeof(array[0])) @EvanCarslake 除非你想被限制在一个固定的最大长度,你可以先调用GetWindowTextLength,然后分配一个动态缓冲区。

以上是关于来自 wchar_t* 的 C++ Win32 GDI+ 拉绳的主要内容,如果未能解决你的问题,请参考以下文章

将 wchar_t* 转换为字符串 [重复]

C++中char和wchar_t转换

C++数据类型问题,wchar_t和char;size_t

❥关于C++之ASCII/Unicode/ISO10646及wchar_t/char16_t/char32_t

无法将“wchar_t”转换为“LPCSTR”[重复]

在 C++ 中获取 `wchar_t*` 的长度