键盘(二十一)

2010-12-30 21:11:33 · 作者: · 浏览: 32862
_LEFT | TA_TOP) ;
}

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

字元讯息
 

前面讨论了利用位移状态资讯把按键讯息翻译为字元讯息的方法,并且提到,仅利用转换状态资讯还不够,因为还需要知道与国家/地区有关的键盘配置。由於这个原因,您不应该试图把按键讯息翻译为字元代码。Windows会为您完成这一工作,在前面我们曾看到过以下的程式码:

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}

这是WinMain中典型的讯息回圈。GetMessage函式用伫列中的下一个讯息填入msg结构的栏位。DispatchMessage以此讯息为参数呼叫适当的视窗讯息处理程式。

在这两个函式之间是TranslateMessage函式,它将按键讯息转换为字元讯息。如果讯息为WM_KEYDOWN或者WM_SYSKEYDOWN,并且按键与位移状态相组合产生一个字元,则TranslateMessage把字元讯息放入讯息伫列中。此字元讯息将是GetMessage从讯息伫列中得到的按键讯息之後的下一个讯息。

四类字元讯息
 

字元讯息可以分为四类,如表6-9所示。

表6-9
字元死字元
 
非系统字元 WM_CHAR WM_DEADCHAR 系统字元 WM_SYSCHAR WM_SYSDEADCHAR

WM_CHAR和WM_DEADCHAR讯息是从WM_KEYDOWN得到的;而WM_SYSCHAR和WM_SYSDEADCHAR讯息是从WM_SYSKEYDOWN讯息得到的(我将简要地讨论一下什么是死字元)。

有一个好讯息:在大多数情况下,Windows程式会忽略除WM_CHAR之外的任何讯息。伴随四个字元讯息的lParam参数与产生字元代码讯息的按键讯息之lParam参数相同。不过,参数wParam不是虚拟键码。实际上,它是ANSI或Unico