从字符转换为 LPCWSTR
convert from char to LPCWSTR
我用C++学习Win API(我是新手)。我对字符/字符串数据类型有问题。
我也在谷歌上阅读了其他人的文档,但仍然不明白。
今天我遇到这个问题:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
char MyChar = 0;
switch (message)
{
case WM_CHAR:
MyChar = LOWORD(wParam);
MessageBox(hWnd, (LPCWSTR)MyChar, (LPCWSTR)MyChar, MB_OK);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
用途:键入 1 个字符和消息框显示它。
我的问题是MyChar是一个字符(8位),我想转换为LPCWSTR。但。。。不是成功。
任何人都可以帮助我。提前感谢!
LPCWSTR 应该是宽字符数组 (wchar_t
) 的地址,MessageBox()
期望该数组以空字符结尾。
然后,您可以使用包含两个元素的数组,在第二个元素中使用空字符,并像这样修改第一个
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
wchar_t myString[2];
myString[1] = ' '; // Ensure the second element is the null char
switch (message)
{
case WM_CHAR:
myString[0] = LOWORD(wParam); // Modify the first element only
MessageBox(hWnd, myString, myString, MB_OK);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
char a[] = "hello";
WCHAR wsz[64];
swprintf(wsz, L"%S", a);
LPCWSTR p = wsz;
对于 WM_CHAR
,wParam
是一个 UTF-16 代码单元 -- 所以,已经是一个可以存储在wchar_t
中的值:
wchar_t mystr[2];
mystr[0] = (wchar_t)wParam;
mystr[1] = 0;
MessageBox(hWnd, mystr, mystr, MB_OK);
您可能希望改用WM_UNICHAR
,其中wParam
是 UTF-32 码位。
您可以执行简单的转换操作,将 (char*) 转换为 (wchar_t*)。
例:
char text1[] = "My text vector char";
std::string text2 = "My text std::string";
wchar_t * lpcText1 = (wchar_t *) text1;
wchar_t * lpcText2 = (wchar_t *) text2.c_str();
相关文章:
- C++ 在参数中将字符串转换为 LPCWSTR
- CPP Windows 字符串转换混淆了 CStringA 和 LPCWSTR
- 代码 c++ VS 2010 中的 LPCWSTR 到字符串转换问题
- 无法将常量字符 [16] 转换为 LPCWSTR
- 无法将参数 2 从 'const char [5]' 转换为 'LPCWSTR'
- 如何转换LPCWSTR和CHAR
- 如何将 CStringW 转换为 LPCWSTR
- 将SystemTime转换为LPCWSTR
- LPCWSTR 无法在 TextOut() 方法上正确转换
- 无法将'LPCWSTR {aka const wchar_t*}'转换为 'LPCSTR {aka const char*}
- 如何将DWORD或char*类型的变量转换为LPCWSTR
- 'HMODULE GetModuleHandleW(LPCWSTR)':无法将参数 1 从 'const char *' 转换为 'LPCWSTR'
- 从字符转换为 LPCWSTR
- 如何将字符* 转换为 LPCWSTR
- 错误 C2664:'auxDIBImageLoadW':无法将参数 1 从 'LPSTR' 转换为 'LPCWSTR'
- 将浮点数转换为 LPCWSTR
- 如何将LPCWSTR转换为LPWSTR
- 将LPSTR转换为LPCWSTR
- 调用CreateProcessW(Mobile MFC)时BSTR到LPCWSTR的转换
- LPCWSTR转换为char*,反之亦然