c - 捕获 WM_CHAR 消息时如何检测 UNICODE 字符?
问题描述
因此,我的窗口过程当前正在捕获所有 WM_CHAR 消息,它适用于 ASCII 字符,但是当我尝试类似以下操作时:
case 'ф':
MessageBox(NULL, TEXT("Ф detected"), TEXT("key"), MB_OK);
由于某种原因它失败了。
我的方法有什么问题,我该如何解决?
编辑:源代码:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CHAR:
switch(wParam)
{
case '3':
MessageBox(NULL, TEXT("'3' was pressed"), TEXT("key detected"), MB_OK);
return 0;
case 'ф':
MessageBox(NULL, TEXT( "ф was pressed"), TEXT("key detected"), MB_OK);
return 0;
default:
return 0;
}
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
解决方案
非 Unicode 字符需要替换为 Unicode 字符switch-case
:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CHAR:
switch(wParam)
{
case L'3':
MessageBox(NULL, TEXT("'3' was pressed"), TEXT("key detected"), MB_OK);
return 0;
case L'ф':
MessageBox(NULL, TEXT( "ф was pressed"), TEXT("key detected"), MB_OK);
return 0;
default:
return 0;
}
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
'ф'
和的值L'ф'
不同。的值'ф'
和不在 ASCII 表中的其他字符通常被解析为'?'
(63)
推荐阅读
- c# - 使用 C# 或 Linq 对 MongoDB 和 SQL 使用相同的语法
- mongodb - 在 MongoDb 中按 15 分钟的时间间隔对重叠系列进行分组
- android - 如何使用本地通知获取有关 Firebase 聊天应用程序的通知?
- xamarin.forms - Packacge Sqlite.net.platform.xamarinAndroidN 3.1.1 不兼容 monoandroid9(MonoAndroid, version=v9.0)
- interceptor - NestJS:如何将 ClassSerializerInterceptor 设置为全局拦截器
- python - SMTP | Python - 错误:身份验证失败
- python - 如何使用 Python 或正则表达式在引号中获取对话行?
- angular - 在 3 个选择选项下拉列表之间使用 ngModel 绑定数据时出现问题。(角度)
- python - 岛屿数量的递归解决方案
- mysql - 在从同一组中的前一行减去该行之前将空值替换为零