Как обнаружить символы UNICODE при перехвате сообщений WM_CHAR? - PullRequest
0 голосов
/ 23 февраля 2019

Итак, моя оконная процедура в настоящее время перехватывает все сообщения 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) ;
}

1 Ответ

0 голосов
/ 26 февраля 2019

Символы, отличные от 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...