c - 捕获WM_CHAR消息时如何检测UNICODE字符?

标签 c winapi

所以,我的窗口过程当前正在捕获所有 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) ;
}

最佳答案

switch-case 中非 Unicode 字符需要替换为 Unicode 字符:

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 - 捕获WM_CHAR消息时如何检测UNICODE字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845796/

相关文章:

WINAPI:捕获列表框中的鼠标单击以添加新项目

c++ - 如何改变窗口的音量?

c - 驱动程序函数不会在 c 中执行,但其他函数会执行

c - 如何在 (int argc, char **argv) 中 printf argv

c++ - 为什么对无符号字符的算术运算将它们提升为有符号整数?

winapi - 以编程方式选择 MFC 单选按钮

在 vb.net 中调用 winAPI 函数

c - 当第三方 C 函数返回一个指针时,你应该自己释放它吗?

c - printf ("%d"的输出)没有附加参数

c - 确定进程是否从快捷方式开始