1.windows会把这些键盘快捷键转换为菜单命令消息,你不必自己去做转换。
2.当对话框活跃时,程序不必监控键盘,windows会监控键盘,接着会将击键效果传送给程序,windows处理所有的编辑控件逻辑。
3.具有输入焦点的窗口要么是活动窗口要么是活动窗口的子窗口。窗口过程可以通过WM_SETFOCUS和WM_KILLFOCUS来确定自己的窗口是否有输入焦点。WM_SETFOCUS表明窗口具有输入焦点,WM_KILLFOCUS表明窗口正在失去焦点
4.当用户按下或者释放键盘上一个键时,windows和键盘设备驱动程序将硬件扫描码转换成格式化以后的消息,然后将这些消息放入系统消息队列,然后再将这些消息放入对应窗口的消息队列中,这样做的原因是:有时用户输入的速度可能快于应用成处理的速度,特殊的击键可能将输入焦点从一个窗口转换到另一个窗口,如果已经将消息放入了程序的消息队列中,则他们不能输入到另一个窗口了。
5.对于产生可显示字符的击键组合,windows在发送击键消息的同时还发送字符消息,但有些键不产生字符,如shift键等,则windows值产生击键消息。
6.系统击键可非系统击键,WM_SYSKEYDOWN和WM_SYSKEYDOWN表示这类击键消息对于windows比应用程序更加的重要,windows将会把这类消息转换成菜单消息,发送给窗口过程,一下代码:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSKEYCHAR:
return 0;
这样的活就会阻止所有的关于alt键的操作,这样就显示了窗口过程的强大。对于不予alt组合的击键,产生地WM_KEYDOWN和WM_KEYUP应用程序可以使用或者丢弃这些消息,对于这四种击键消息,wParam是虚拟键代码,用来表示哪个键按下或者释放,而lParam包含击键的一些其他数据。
7.虚拟键代码,真实的键码有键盘产生,windows文件称它们为扫描码,如果试图使用u设备无关的方式来处理键盘,就需要使用虚拟键代码,虚拟键代码以VK_开头,每个代码对应这IBM中键
8.lparam参数,有以下几个部分组成,重复计数,OEM扫描码,扩展键标记,内容代码,键的先前状态,转换状态
9.转义状态:当处理击键消息时,可能需要知道是否有转义键,或者切换键,你要通过调用GetKetState函数获得此消息,并非实时的检查键盘的状态,包含了正在处理的当前消息。如:当你在处理Tab消息时,可以调用含VK_SHIFT参数的GetKeyState函数,可以判段是否按下了shift按键。
10.使用击键消息,windows程序通常为不产生击键使用WM_KEYDOWN消息,尽管可以有可能通过击键消息和转义状态信息,把击键消息转换为字符,但不要这么做,因为会存在二义性。在不同国家的键盘上会有不同的显示字符,对光标移动键,功能键,Insert键和Detete键,WM_KEYDOWN是最有用的,但Insert键,Delete和功能键经常使用为菜单快捷键,windows将会将其转换为菜单命令消息,应用程序不必自己处理这些消息。
11.如何在程序中加上键盘接口
简单的把一个WM_KEYDOWN消息转换为等同的WM_VSCROLL和WM_HSCROLL消息,然后我们可以通过给窗口过程发送假冒的消息,使用SendMessage函数即可。