我试图显示在我的窗口应用程序的客户区中,例如系统本地时间。

作为结果,我得到一个错误:IntelliSense:类型为“CHAR *”的参数与TextOut函数(参数4)中类型为“LPCWSTR”的参数不兼容。
有人可以帮我吗?

case WM_PAINT:

    hdc = BeginPaint(hWnd, &ps);
       SYSTEMTIME lt;
       GetLocalTime(&lt);
       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());

08-05 14:01