Согласно документации , WM_CHAR
отправляет код символа в wParam
. Первый абзац в разделе «Примечания» говорит, что код действительно является кодовой точкой Unicode UTF-16. Это верно, независимо от того, компилируете ли вы свой код для 8 или 16 бит TCHAR
.
Комментарий CodyGray является верным в той части, которую CString
предоставляет множество конструкторов. То, что вы ищете, это то, что принимает wchar_t
в качестве первого аргумента (второй аргумент, количество повторений, по умолчанию установлен в 1). Поэтому, чтобы создать 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 битности.