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