[英]How do I convert a wParam to a CString?
我有一個來自WM_KEYDOWN消息的pMsg->wParam
,我想將其轉換為CString
。 我怎樣才能做到這一點?
我嘗試了以下代碼:
TCHAR ch[2];
ch[0] = pMsg->wParam;
ch[1] = _T('\0');
CString ss(ch);
但不適用於高ASCII字符。
問題是wParam
包含一個指向字符數組的指針 。 它不是單個字符,因此您無法在此處嘗試通過將字符串分配給ch[0]
來自己創建字符串。
該解決方案比您預期的要容易得多。 CString
類具有一個構造函數,該構造函數需要一個指向字符數組的指針,而這正是wParam
。
(實際上,它有很多構造函數 ,其中一個幾乎可以滿足您的所有需求...)
因此,您要做的就是:
CString ss(pMsg->wParam);
構造函數將處理其余的工作,將wParam
指向的字符串復制到ss
類型。
根據文檔 , WM_CHAR
在wParam
發送字符代碼。 備注部分的第一段說該代碼確實是Unicode UTF-16代碼點。 無論您是針對8位還是16位TCHAR
編譯代碼,這都是正確的。
CodyGray的評論在CString
提供了各種構造函數的部分中是正確的。 您要尋找的是將wchar_t
作為其第一個參數的參數(第二個參數即重復計數默認情況下設置為1)。 因此, WPARAM
構造CString
,請將值wchar_t
為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位之間移植。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.