导读:
微软积木○九七:虚拟键码
说实话,可能大家觉得有点“跑题”,不是讲 MFC 吗?怎么忽然讲到了 API 上来了?
没办法,我们的教程不是向对读者的,我们的教程是面向“实践”的,如果你去买一本关于MFC的相关的书籍,那些书的定位肯定就认为读者已经充分掌握了 API 的基础内容了,而我们没办法作这样的定位,我们讲到有关 MFC 解决不了的事,那就必须得回到 API ,将好多的问题与知识点一一击破,否则,我们的教程根本没办法支持下去。
那么我们的还能叫做《微软积木》么?能,MFC的积木是为我们做好的积木,是成品,而我们这一讲以及接下来几讲,是要告诉大家,我们如果自己去做出一款我们自己的“积木”来,我们是要从木头本身开始,一步一步地教大家如何做“积木”,呵呵。
行了,闲言少叙,我们书归正传:
我们上一讲与大家讲过,我们的键盘其实送进来的键码为“扫描码”,那么什么是扫描码呢?就是我们键盘其实是好多好多的小开关,当我们按下键盘时,有些开关是开的,有些开关是关的,如果是开的,那么键盘就输入相应的键喽,如果是关,那么就不会输入这个字符了吧,说起来简单,那怎么实现呢?
一个办法就是直接使用开关,然后产生一个八位的二进制,去让电脑停止运行,从而去响应我们的键盘传入的信息,大家看图:
我们图中只给大家做了一个按键(黄色的啊,呵呵,像吗?),其实这里可以有256个按键,当然,真正是用不到这么多的按键的,那怎么办?用几三条线去表示功能键 Alt Ctrl Shift ,所以理论上我们只可以用这八个字节的键盘去设置64+3=67个按键。
其实上面的仅仅是理论,我们的键盘当然不能这么设置了,我们键盘可以用十六位线啊,当然也可以用32位线或64位,随便啊,
可惜的是问题来了,如果我们增加一倍的线,就会使得我们的键盘的接口增加一倍,现在都是USB 接口了,老式的接口其实就是有很多眼,好多针的,那种键盘,我们就称之为“传统键盘”吧。
当然,技术是在飞快地发展,我们的键盘也不例外,我们的键盘现在使用了一种技术,称之为“扫描技术”。
什么叫扫描技术呢?也就是说,某一个时刻,键盘中发送一个键码去测试某一个键,如果这个键按下了,那么这个键码就被置成1(这是牛刀的理论啊,事实上可能不一定是这样),如果这个码没有被按下,就被置成0,大家看下面的图:
请大家看,如果我们测试图中的黄色的那个按键,那么我们就需要将上面的第六个开关关上,右边的第六个开关关上,那么也就是说,我们假设上面四根是控制上面十六个按键的话,那么上面就放上 0110 右边的也放上 0110 然后测试的结果送到进我们准备好的寄存器就一切OK了。
当然,你可能说,那也只能测试一个按键的状态啊,是不?
不错
微软积木○九七:虚拟键码
说实话,可能大家觉得有点“跑题”,不是讲 MFC 吗?怎么忽然讲到了 API 上来了?
没办法,我们的教程不是向对读者的,我们的教程是面向“实践”的,如果你去买一本关于MFC的相关的书籍,那些书的定位肯定就认为读者已经充分掌握了 API 的基础内容了,而我们没办法作这样的定位,我们讲到有关 MFC 解决不了的事,那就必须得回到 API ,将好多的问题与知识点一一击破,否则,我们的教程根本没办法支持下去。
那么我们的还能叫做《微软积木》么?能,MFC的积木是为我们做好的积木,是成品,而我们这一讲以及接下来几讲,是要告诉大家,我们如果自己去做出一款我们自己的“积木”来,我们是要从木头本身开始,一步一步地教大家如何做“积木”,呵呵。
行了,闲言少叙,我们书归正传:
我们上一讲与大家讲过,我们的键盘其实送进来的键码为“扫描码”,那么什么是扫描码呢?就是我们键盘其实是好多好多的小开关,当我们按下键盘时,有些开关是开的,有些开关是关的,如果是开的,那么键盘就输入相应的键喽,如果是关,那么就不会输入这个字符了吧,说起来简单,那怎么实现呢?
一个办法就是直接使用开关,然后产生一个八位的二进制,去让电脑停止运行,从而去响应我们的键盘传入的信息,大家看图:
我们图中只给大家做了一个按键(黄色的啊,呵呵,像吗?),其实这里可以有256个按键,当然,真正是用不到这么多的按键的,那怎么办?用几三条线去表示功能键 Alt Ctrl Shift ,所以理论上我们只可以用这八个字节的键盘去设置64+3=67个按键。
其实上面的仅仅是理论,我们的键盘当然不能这么设置了,我们键盘可以用十六位线啊,当然也可以用32位线或64位,随便啊,
可惜的是问题来了,如果我们增加一倍的线,就会使得我们的键盘的接口增加一倍,现在都是USB 接口了,老式的接口其实就是有很多眼,好多针的,那种键盘,我们就称之为“传统键盘”吧。
当然,技术是在飞快地发展,我们的键盘也不例外,我们的键盘现在使用了一种技术,称之为“扫描技术”。
什么叫扫描技术呢?也就是说,某一个时刻,键盘中发送一个键码去测试某一个键,如果这个键按下了,那么这个键码就被置成1(这是牛刀的理论啊,事实上可能不一定是这样),如果这个码没有被按下,就被置成0,大家看下面的图:
请大家看,如果我们测试图中的黄色的那个按键,那么我们就需要将上面的第六个开关关上,右边的第六个开关关上,那么也就是说,我们假设上面四根是控制上面十六个按键的话,那么上面就放上 0110 右边的也放上 0110 然后测试的结果送到进我们准备好的寄存器就一切OK了。
当然,你可能说,那也只能测试一个按键的状态啊,是不?
不错