gpt4 book ai didi

c++ - LPCWSTR 不会在 TextOut() 方法上正确转换

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:26 26 4
gpt4 key购买 nike

整个代码片段...

#include <windows.h>
#include <string>
#include <vector>
using namespace std;
//=========================================================
// Globals.
HWND ghMainWnd = 0;
HINSTANCE ghAppInst = 0;
struct TextObj
{
string s; // The string object.
POINT p; // The position of the string, relative to the
// upper-left corner of the client rectangle of
// the window.
};
vector<TextObj> gTextObjs;

// Step 1: Define and implement the window procedure.
LRESULT CALLBACK
WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// Objects for painting.
HDC hdc = 0;
PAINTSTRUCT ps;
TextObj to;
switch( msg )
{
// Handle left mouse button click message.
case WM_LBUTTONDOWN:
{
to.s = "Hello, World.";
// Point that was clicked is stored in the lParam.
to.p.x = LOWORD(lParam);
to.p.y = HIWORD(lParam);
// Add to our global list of text objects.
gTextObjs.push_back( to );
InvalidateRect(hWnd, 0, false);
return 0;
}
// Handle paint message.
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
for(int i = 0; i < gTextObjs.size(); ++i)
TextOut(hdc,
gTextObjs[i].p.x,
gTextObjs[i].p.y,
gTextObjs[i].s.c_str(),
gTextObjs[i].s.size());
EndPaint(hWnd, &ps);
return 0;
}
// Handle key down message.
case WM_KEYDOWN:
{
if( wParam == VK_ESCAPE )
DestroyWindow(ghMainWnd);
return 0;
// Handle destroy window message.
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
}
// Forward any other messages we didn't handle to the
// default window procedure.
return DefWindowProc(hWnd, msg, wParam, lParam);
}

问题是我从 visual studio 2012 收到一条错误消息,告诉我“const char*”类型的参数与 LPCWSTR 类型的参数不兼容。这发生在这行代码中:

hdc = BeginPaint(hWnd, &ps);
for(int i = 0; i < gTextObjs.size(); ++i)
TextOut(hdc,
gTextObjs[i].p.x,
gTextObjs[i].p.y,gTextObjs[i].s.c_str(), // <---happens here
gTextObjs[i].s.size());
EndPaint(hWnd, &ps);
return 0;

我尝试了一个转换((LPCWSTR)gTextObjs[i].s.c_str()),但显然这是非常错误的,因为每个字符数组操作一个字节到两个?还收到了 "C4018: '<' : signed/unsigned mismatch" 的警告在这个变化之后。我是 c++ 的新手,考虑到转换是错误的,我对这个错误很迷茫。

我已经审查了 SO 中的一些不同线程,似乎没有任何内容适合这种特定情况(或者我只是不太了解这些线程与我的线程之间的相关性)。 :[

此外,只是为了澄清......转换“有效”,但它打印出一些奇怪的日文/中文符号,看起来像文字,而且总是不同。

最佳答案

TextOut 正在解析为 TextOutW。这需要 UTF-16 文本。您传递 8 位文本。要么切换到 wstring 中保存的 UTF-16,要么调用 TextOutA。

关于c++ - LPCWSTR 不会在 TextOut() 方法上正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com