簡體   English   中英

如何將wParam轉換為CString?

[英]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_CHARwParam發送字符代碼。 備注部分的第一段說該代碼確實是Unicode UTF-16代碼點。 無論您是針對8位還是16位TCHAR編譯代碼,這都是正確的。

CodyGray的評論在CString提供了各種構造函數的部分中是正確的。 您要尋找的是將wchar_t作為其第一個參數的參數(第二個參數即重復計數默認情況下設置為1)。 因此, WPARAM構造CString ,請將值wchar_twchar_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM