1

我有一条pMsg->wParam来自 WM_KEYDOWN 消息,我想将其转换为CString. 我怎样才能做到这一点?

我尝试了以下代码:

TCHAR ch[2];
ch[0] = pMsg->wParam;
ch[1] = _T('\0');
CString ss(ch);

但它不适用于高 ASCII 字符。

4

2 回答 2

3

根据文档WM_CHAR发送一个字符代码wParam。备注部分的第一段说代码确实是 Unicode UTF-16 代码点。无论您是为 8 位还是 16 位编译代码都是如此TCHAR

CStringCodyGray 的评论在提供各种构造函数的部分是正确的。您正在寻找的是将 awchar_t作为其第一个参数的那个(第二个参数,重复计数,默认设置为 1)。因此,要从 a 构造 a CStringWPARAM您将值转换为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 位移植。

于 2012-02-16T14:44:28.490 回答
2

问题是它wParam包含一个指向字符数组的指针。它不是单个字符,因此您不能ch[0]像在此处尝试那样通过将其分配给自己来创建字符串。

解决方案比您预期的要容易得多。该类CString有一个构造函数,它接受一个指向字符数组的指针,这正是你在wParam.
(实际上,它有一堆构造函数,一个几乎可以满足你所需要的一切......)

所以你所要做的就是:

CString ss(pMsg->wParam);

构造函数将负责其余的工作,将指向的字符串复制wParamss类型中。

于 2012-02-16T06:55:23.300 回答