我试图显示在我的窗口应用程序的客户区中,例如系统本地时间。
作为结果,我得到一个错误:IntelliSense:类型为“CHAR *”的参数与TextOut函数(参数4)中类型为“LPCWSTR”的参数不兼容。
有人可以帮我吗?
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SYSTEMTIME lt;
GetLocalTime(<);
CHAR info[20] ;
_itoa(lt.wHour,info,16);
TextOut(hdc,200,200,info,strlen(info));
EndPaint(hWnd, &ps);}
break;
最佳答案
您正在为Unicode编译程序,这意味着将对文本进行操作的Win32函数映射到宽版本。因此,TextOut
是一个宏,它扩展为TextOutW
,并期望使用UTF-16编码的const wchar_t*
文本。但是您提供的是8位文字。
一个简单的解决方法是调用ANSI版本的TextOut
,即TextOutA
。
TextOutA(hdc, 200, 200, info, strlen(info));
但是从长远来看,您可能会考虑使用本机范围的API。这将要求您使用任何文本处理功能的宽版本。您也最好避免使用
itoa
,并开始使用标准C++方法在文本和整数之间进行转换。例如,使用C++ 11可以使用
std::to_wstring
。std::wstring hour = std::to_wstring(lt.wHour);
TextOut(hdc, 200, 200, hour.c_str(), hour.length());