词条 | 四类字元讯息 |
释义 | § 简介 字元讯息可以分为四类,如表所示。 表 字元 死字元 非系统字元 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或Unicode字元代码。 这些字元讯息是我们将文字传递给视窗讯息处理程式时遇到的第一个讯息。它们不是唯一的讯息,其他讯息伴随以0结尾的整个字串。视窗讯息处理程式是如何知道该字元是8位元的ANSI字元还是16位元的Unicode宽字元呢?很简单:任何与您用RegisterClassA(RegisterClass的ANSI版)注册的视窗类别相联系的视窗讯息处理程式,都会获得含有ANSI字元代码的讯息。如果视窗讯息处理程式用RegisterClassW(RegisterClass的宽字元版)注册,那么传递给视窗讯息处理程式的讯息就带有Unicode字元代码。如果程式用RegisterClass注册视窗类别,那么在UNICODE识别字被定义时就呼叫RegisterClassW,否则呼叫RegisterClassA。 除非在程式写作的时候混合了ANSI和Unicode的函式与视窗讯息处理程式,用WM_CHAR讯息(及其他三种字元讯息)说明的字元代码将是: (TCHAR) wParam 同一个视窗讯息处理程式可能会用到两个视窗类别,一个用RegisterClassA注册,而另一个用RegisterClassW注册。也就是说,视窗讯息处理程式可能会获得一些ANSI字元代码讯息和一些Unicode字元代码讯息。如果您的视窗讯息处理程式需要晓得目前视窗是否处理Unicode讯息,则它可以呼叫: fUnicode = IsWindowUnicode (hwnd) ; 如果hwnd的视窗讯息处理程式获得Unicode讯息,那么变数fUnicode将为TRUE,这表示视窗是用RegisterClassW注册的视窗类别。 |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。