【发布时间】:2012-03-07 14:02:20
【问题描述】:
我有来自 WM_KEYDOWN 消息的pMsg->wParam,我想将其转换为CString。我该怎么做?
我已经尝试了以下代码:
TCHAR ch[2];
ch[0] = pMsg->wParam;
ch[1] = _T('\0');
CString ss(ch);
但它不适用于高位 ASCII 字符。
【问题讨论】:
-
wParam 和 lParam 的使用方式不同,具体取决于传递的消息。你在这里收到什么信息?如果它是常规 Windows 消息(例如 WM_GETTEXT)或自定义消息(任何大于 WM_USER)。您能否提供更多代码来显示正在发送和接收的消息? (请注意,如果字符串在堆栈中,PostMessage 和字符串通常不能很好地一起播放,因为在接收窗口获取它时,调用者的堆栈可能已经展开并重用,导致指针无效。)
-
@BrendanMcK 我基本上在按键 WM_CHAR 上使用它,它在 englisg 语言上工作正常,但对于涉及高 ascii 字符的语言失败,可能是我终止 TCHAR 数组的方式对于其他人是错误的语言
-
您是否为您的项目定义了 UNICODE 和 _UNICODE?如果你不这样做,那么当 TCHAR 只是一个普通的单个 ANSI 字符时,可能会发生奇怪的事情(尽管我认为它仍然应该适用于高 ASCII,除非你使用不同的代码页或其他东西......)。定义 UNICODE 和 _UNICODE 后,它应该(AFAIK)适用于任何东西(呃,UTF16 支持的任何东西)。此外,当您尝试使用高位 ASCII 键时,您是否在调试器中看到 wParam 的预期值?
-
我的项目中定义了unicode
-
您是否使用调试器检查了您在消息中收到的 wParam 值?如果它首先不正确,则无法将其转换为正确的字符串:) 另外,您在此处提到“postmessage”-这是由于按键而发送到您的窗口的普通 WM_CHAR ,还是来自其他代码?
标签: c++ winapi mfc cstring postmessage