Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)
Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)
2 多鼠标输入的底层实现
2.1 通过开发过滤式鼠标驱动的实现
Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)
2 多鼠标输入的底层实现
2.1 通过开发过滤式鼠标驱动的实现
Windows中多指针输入技术的实现与应用
计算机科学的是目前发展最快的几个领域之一,人机交互的方式也经历着重大的变革。众所周知,输入设备是人机交互最主要的设备。最开始的计算机使用的输入设备是非常不方便的读卡器和磁带驱动器, 那时用户不直接与计算机系统交互,而是准备好一个作业(由程序、数据和一些控制信息(控制卡片)组成)并提交给计算机操作员。作业一般以穿孔卡片的形式提交。[1,3-4]目前键盘和指针设备是微机上最常用的输入设备,扫描仪和光电笔等输入设备的应用也越来越广泛。键盘主要用来输入文字,而我们可以方便快捷地用指针设备指定光标在屏幕上的位置。尤其是在Windows环境里,操作几乎离不开指针设备。指针设备主要包括最常用的鼠标, 以及触控板,触摸屏 ,轨迹球, 指点杆和光线枪。通常我们家用机使用的是鼠标,笔记本使用的是触控板,[2]而触摸屏在商业领域得到了很广泛的应用。一般来说使用单指针设备加键盘就能满足需求,其接口模型如图1.1。
多指针设备输入在很多情况下有很大的优势。但是微软的Windows本身并不支持此技术,让程序在Windows下支持多个指针设备,并且控制各自独立的光标就成了软件设计者问题。本文介绍了目前可行的,底层和利用框架软件实现的两大类方法。在底层实现中,详细讲述了利用RawInput技术实现多鼠标输入的原理。在框架软件实现中,详细讲述了一种多鼠标输入框架软件Single Display Groupware Toolkit的实现原理。并对各种方法进行了简单描述和总的对比,其中开发过滤式鼠标驱动的方法主要用来开发框架级程序;RawInput技术因为优点明显,被各层次的软件所利用;CPNmouse库是对通用多指针输入软件开发很好的尝试,但是并不是太成功;MultiPoint SDK虽然由微软推出,可是目前并不成熟;Single Display Groupware Toolkit综合了以上各技术的很多优点,缺点比较少,软件相对成熟,使用比较简单。本文推荐实现Windows中多指针输入技术的方法为使用Single Display Groupware Toolkit。最后简单介绍了Single Display Groupware的具体使用方法。因为Single Display Groupware Toolkit在MFC中使用不是那么方便,所以最后讨论一下在MFC中怎么自己实现和利用此技术,然后给出两个实例研究。
在微软Windows中支持多指针设备
原文作者:Michael Westergaard
在此声明:此文为本人毕业论文翻译的文章,请勿转载,不然出现什么问题,本人可是要找麻烦的。特别是出现学校方面因为在网上发现此文怀疑本人抄袭的时候。另外,因为本文已经收录在学校了,所以我有足够的证据能证明我上交此文的时间先于网络上有此文的时间。原文请到google上搜索,我不转载,不过也可以到我创建的讨论多鼠标的google群里面去下载,http://groups.google.com/group/Single-Display-Groupware
摘要: 本文描述了在微软Windows中的一个包含多指针设备支持API的实现。微软Windows本来不支持多指针设备控制独立的指针,但是我们或其他人已经完成了很多解决此问题的实现。在这里我们描述了一个通常的解决方法,和一个应用程序怎么样可以通过一个框架使用它。这个设备驱动程序和支持其的API将免费提供。感兴趣的人可以联系作者以获得更多信息。
介绍一个C++算法性能比较函数,可自动测量多个算法在不同数据规模下的运行时间,并将结果输出到文件,方便直观对比优劣。
几个关于随机数组产生的函数 包括各类可重复或不重复
使用方法都比较简单,也不多说了,无非就是用一个数组和一个表示数组大小的整数来调用,这里要说明的是,你必须保证数组的大小要足够,其他的函数的作用可以参考具体文件的注释,我个人觉得够详细了
Effective C++ 第3版 Item 26详尽研究 个人认为最后一些内容有待商酌
Postpone variable definitions as long as possible? 真的应该这样?
当然,个人承认前面的一部分都没有错,而且是一贯的很对,很有道理,最后作者提到在循环的问题上应该怎么处理,他提出了两个Aproach.
Approach A: define outside loop – 1 constructor + 1 destructor + n assignments
Approach B: define inside loop – n constructors + n destructors
他的结论是假如你不确定实现A比实现B好,那么就都用B,从这个意义上讲,作者的意思是大部分情况下B都要更好,但是其实呢?经过我的测试,几乎绝大部分情况下,A要更好,而且要好的多,我的结论是,除了单纯的简单内建类型,比如int,bool,double等,其他任何情况,包括这些类型的数组,你都应该使用实现A,下面是详细测试代码。
数据结构与算法分析 C++描述(第3版) 习题2.8 详尽分析
Data Structures and Algorithm Analysis In C++ Third Edition By Mark Allen Weiss
a:因为1,2很明显,所以不证明了。
至于算法3,可以用数学归纳法证明,x详细证明如下:
公开的I/O接口,70h,71h,甚至72h,73h我也试过,结果内容和70h,71h一样,在我改动BIOS设置后,发现两次的文件没有什么变化(时间变化除外),按国外的CMOS Memory Map,应该每个时间位后面跟一个Alarm时间位,事实上我打开前后,此位一直为零,是不是一旦开机,BIOS自动为此位清零?目前具体的东西不太清除,还不该尝试在这些Alarm位上写东西,因为我测试过两台电脑,都是AMI的BIOS,在BIOS中打开Alarm后没有发现如期的改动。请高人指点。
大的IT公司都有他们专门维护的大型支持,如微软,IBM,SUN等,这些大家都知道吧,其实我发现Intel作为硬件厂商,它的技术文献也多的可以了,用罗云彬的话就是说不是没有你要的资料,而是不知道怎么找到。这点,Intel比起上面3家公司稍微欠缺一点,因为他们都是社区型的大型技术支持,Intel的文献资料虽然多,不过稍微显得乱了点,也许因为我对这方面了解少,所以搜索起来不是那么顺利吧。但是碰到再差一点的公司,你就要郁闷了,我在AMI(我的主板的BIOS)生产厂商,的主页上,只找到了主板查错码和叫声的含义,其他没有找到任何编程相关的帮助资料,更不用说像Intel那样的架构分析,中断列表什么的了。这点实在是够郁闷,最后只能在非官方找资料,最后果然感觉资料可能太老,然后有点不对。何其郁闷啊。这是昨晚搞了半天,想说又没有说的,我在这里一般都只发技术性的东西,但是这次突然想说一说。