我有一条pMsg->wParam
来自 WM_KEYDOWN 消息,我想将其转换为CString
. 我怎样才能做到这一点?
我尝试了以下代码:
TCHAR ch[2];
ch[0] = pMsg->wParam;
ch[1] = _T('\0');
CString ss(ch);
但它不适用于高 ASCII 字符。
我有一条pMsg->wParam
来自 WM_KEYDOWN 消息,我想将其转换为CString
. 我怎样才能做到这一点?
我尝试了以下代码:
TCHAR ch[2];
ch[0] = pMsg->wParam;
ch[1] = _T('\0');
CString ss(ch);
但它不适用于高 ASCII 字符。
根据文档,WM_CHAR
发送一个字符代码wParam
。备注部分的第一段说代码确实是 Unicode UTF-16 代码点。无论您是为 8 位还是 16 位编译代码都是如此TCHAR
。
CString
CodyGray 的评论在提供各种构造函数的部分是正确的。您正在寻找的是将 awchar_t
作为其第一个参数的那个(第二个参数,重复计数,默认设置为 1)。因此,要从 a 构造 a CString
,WPARAM
您将值转换为wchar_t
。以下示例打印“0”,确认构造的字符串确实是预期的。
#include <stdio.h>
#include <Windows.h>
#include <cstringt.h>
#include <atlstr.h>
int main ()
{
WPARAM w = 0x222D;
CString cs ((wchar_t)w);
printf ("%d", cs.Compare (L"\x222D"));
}
它在 _UNICODE 和 ANSI 编译模式下的工作方式相同,并且可以跨 32 位和 64 位移植。
问题是它wParam
包含一个指向字符数组的指针。它不是单个字符,因此您不能ch[0]
像在此处尝试那样通过将其分配给自己来创建字符串。
解决方案比您预期的要容易得多。该类CString
有一个构造函数,它接受一个指向字符数组的指针,这正是你在wParam
.
(实际上,它有一堆构造函数,一个几乎可以满足你所需要的一切......)
所以你所要做的就是:
CString ss(pMsg->wParam);
构造函数将负责其余的工作,将指向的字符串复制wParam
到ss
类型中。