第三代电影互动播放系统.pdf

上传人:奻奴 文档编号:1566402 上传时间:2018-06-25 格式:PDF 页数:13 大小:1.33MB
返回 下载 相关 举报
摘要
申请专利号:

CN201110364365.9

申请日:

2011.11.17

公开号:

CN103116486A

公开日:

2013.05.22

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):G06F 9/44申请公布日:20130522|||实质审查的生效IPC(主分类):G06F 9/44申请日:20111117|||公开

IPC分类号:

G06F9/44; G06F3/033(2013.01)I

主分类号:

G06F9/44

申请人:

孙立军

发明人:

孙立军

地址:

100088 北京市海淀区西土城路4号

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

本发明涉及一种第三代电影互动播放系统,以电影播放为主体,在剧情需要的时候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气氛,增加娱乐性。实现了全新的电影播放模式,增加了电影播放与观众的互动。

权利要求书

权利要求书一种第三代电影互动播放系统,包括第三代电影互动播放器、多个鼠标或操控手柄,其特征在于:第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信号,鼠标或操控手柄的功能是用来进行互动游戏,通过互动游戏来体验剧情发展。
根据权利要求1的第三代电影互动播放系统,其特征在于:第三代电影互动播放器的视频播放软件采用微软的DirectShow。
根据权利要求1的第三代电影互动播放系统,其特征在于:多鼠标或操控手柄的输入的识别并将识别信息传送给flash控件通过RawInput实现。

说明书

说明书第三代电影互动播放系统
技术领域
本发明属于电影、游戏、电子科技领域,具体涉及一种电影播放系统,更具体来说,本发明涉及一种通过观众游戏来体验不同剧情发展的电影互动播放系统。
背景技术
主流电影是以主动展示为播放形式,不能与观众产生互动,从而失去了很大娱乐性,而主流游戏又因为以操控为主要形式,而没有太多故事性和电影感。
纵观当前国际国内本领域研究现状,有关数字互动电影技术的研究内容非常薄弱,专门的深入交互数字电影技术研究,尤其是进行产业化运作的还是一个空白。
发明内容
本发明的目的在于提供一种全新的电影播放系统,增加电影播放中与观众的互动。本发明的实现原理是以电影播放为主体,在剧情需要的时候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气氛,增加娱乐性。
本发明提供了一种第三代电影互动播放系统,其包括第三代电影互动播放器、多个鼠标或操控手柄,其中第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信号,鼠标或操控手柄的功能是用来进行互动游戏,通过互动游戏来体验剧情发展。
其中视频播放的软件采用微软的DirectShow。DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。DirectShow是一个开放的框架,因此只要有合适的filter来分析和解码,它可以支持任何格式。
多鼠标或操控手柄的输入的识别并将识别信息传送给flash控件通过RawInput实现。微软在Windows XP中在RawInput API中加入了鼠标的ID信息数据,因此,使得在Windows XP中通过直接分辨RawInput API中的鼠标ID信息非常方便地来识别不同的鼠标输入。本程序便采用的这中方法实现多鼠标。
虽然能够识别不同数据,但是对于不同鼠标指针的绘制完全要由编程人员控制。此技术有着对鼠标输入比较完全的控制,识别不同鼠标输入的数据较为容易,且仅仅通过微软的底层程序,因此效率很高。而且对于新加入的指针设备能有较快的反应,可以不考虑驱动程序就对新的指针设备提供直接支持。
本发明以电影播放为主体,在剧情需要的时候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气氛,增加娱乐性。实现了全新的电影播放模式,增加了电影播放与观众的互动。
附图说明
图1是本发明第三代电影播放器的启动界面;
图2是本发明第三代电影播放器核心设置菜单;
图3是本发明第三代电影播放器设置播放参数的界面;
图4是本发明各鼠标输入数据识别流程图。
具体实施方式
本发明的第三代电影互动播放系统,包括第三代电影互动播放器、多个鼠标或操控手柄,其中第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信号,鼠标或操控手柄的功能是用来进行互动游戏,通过互动游戏来体验剧情发展。
图1是本发明第三代电影播放器的启动界面,该界面非常简洁,主要通过菜单来设置。其中核心设置中设有“设置播放文件”的选项(见图2)。
点击进入即可设置播放参数,其界面如图3所示,本程序可以设置三个视频和六个flash动画。视频播放的时间和flash出现的时间同过后面的时间设置来控制。所有的flash时间的设置都相对上一个视频文件。当视频文件播放至设定的时间,通过对多鼠标或操控手柄的输入识别,传送给flash控件,启动不同剧情的flash文件,观众进入互动游戏来体验不同的剧情发展,或者进入小游戏调节气氛后,继续进行视频文件的播放。
多鼠标或操控手柄的输入的识别并将识别信息传送给flash控件通过RawInput实现。具体的流程图如图4所示。
第一步,用GetRawInputDeviceList函数获取RawInput设备数量。GetRawInputDeviceList的函数原型如下:


当第一参数为NULL的时候,第二参数为输出,输出的是RawInput设备数量。第三参数一般为RAWINPUTDEVICELIST的大小。所以可以以下方式调用以获得RawInput设备数量。
UINT nDevices;
GetRawInputDeviceList(NULL,&nDevices,sizeof(RAWINPUTDEV ICELIST))
调用以后,nDevices就是RawInput设备的数量。但是假如需要确定的鼠标RawInput设备数量,就还需要再一次以第一参数为输出调用GetRawInputDeviceList函数,这里首先需要了解RAWINPUTDEVICELIST结构。RAWINPUTDEVICELIST结构定义如下:

当在第二参数中给定RawInput设备的数量为输入时,第一参数就可以输出RAWINPUTDEVICELIST结构类型的输出。调用方式如下:
PRAWINPUTDEVICELIST pRawInputDeviceList;
pRawInputDeviceList=(RAWINPUTDEVICELIST*)
calloc(nDevices,sizeof(RAWINPUTDEVICELIST));
GetRawInputDeviceList(pRawInputDeviceList,&nDevices,
sizeof(RAWINPUTDEVICELIST));
这里的nDevices必须已经经过上一步的GetRawInputDeviceList调用,值已经是RawInput设备的数量。这时可以通过判断pRawInputDeviceList各成员的dwType值是否等于RIM_TYPEMOUSE来判断此RawInput设备是否为鼠标的输入。
第二步:用RegisterRawInputDevices函数注册RawInput设备。这一步最需要注意,在Windows中一般情况下并不会让用户获取原始输入数据RawInput,所以使用GetRawInputData函数前必须先注册RawInput设备。注册RawInput的步骤就是通过调用RegisterRawInputDevices函数完成的。RegisterRawInputDevices函数原型如下:

第一参数为一个RAWINPUTDEVICE结构的指针,第二参数给定需要注册RawInput设备的数量,第三参数为第一参数的大小。在这里要知道怎么注册又需要先了解RAWINPUTDEVICE结构,其结构定义如下:


当dwFlags设为NULL时,Windows追随输入焦点接受RawInput数据。而第四参数就是指定的输入焦点,假如第四参数为NULL,那么Windows接受RawInput数据的窗口就是目前的键盘焦点窗口。这两个参数设定就是一般时所需要的,比如以下的方式就注册了一个RawInput设备,并且当注册失败时弹出对话框提示:
RAWINPUTDEVICE Raw[1];
Rid[0].usUsagePage=0x01;
Rid[0].usUsage=0x02;
Rid[0].dwFlags=0;
Rid[0].hwndTarget=NULL;
if(RegisterRawInputDevices(Rid,1,sizeof(Rid[0]))=FALSE){MessageBox(hWnd,″RawInput Register Error.″,″RawInput init failed!″,MB_OK);}
这里需要注意的是并不是有多少个鼠标输入就需要注册多少个RawInput设备,一般来说,注册一个RawInput设备处理目前焦点的原始输入数据就足够了,同样可以获得所有的鼠标原始输入数据。除非想对不同焦点的原始输入数据进行处理,才需要注册多个usUsagePage与usUsage不同的RawInput设备。
第三步:调用GetRawInputData函数获得pData大小。这里要说明的是GetRawInputData一般要在响应WM_INPUT消息时调用,不能随时调用。GetRawInputData函数原型如下:

GetRawInputData第一参数为一个RAWINPUT结构的句柄,来自WM_INPUT消息的lParam参数。要说明的是GetRawInputData并不是一个随时调用以检测有无RawInput设备输入的函数,实际上是一个对WM_INPUT消息的lParam参数的解析函数,主要用途是从WM_INPUT消息的lParam参数中提取出有用的信息,并加以组织成一个RAWINPUT结构输出,当然,由于WM_INPUT消息的lParam参数传进来的是个句柄,实际上解析的是其代表的RAWINPUT结构数据。这也是GetRawInputData一般在响应WM_INPUT消息时调用的原因。第二参数为RID_INPUT时,GetRawInputData才输出RawInput信息。第三参数用以输出最后的RAWINPUT结构数据,当为NULL时在第四参数输出本参数大小。第四参数用以制定第三参数大小,第五个参数在只需要调用RAWINPUT结构输出的时候一般可以设为sizeof(RAWINPUTHEADER)。因为我们一开始不知道GetRawInputData第三参数的大小,必须以NULL为第三参数先调用一次GetRawInputData以从第四参数获得第三参数pData大小。调用方式如下:

这样调用GetRawInputData函数后,dwSize就指示了其第三参数pData的大小。为下一次调用以输出RAWINPUT数据做准备。
第四步:调用GetRawInputData函数获得RAWINPUT数据。在获得GetRawInputData第三参数pData大小后就可以直接调用GetRawInputData获得RAWINPUT数据了。这里要说明的是第三参数为一个空指针,调用前先用刚才得到的dwSize参数分配足够的空间,并且调用完后必须强制转换才能得到想要的结果。实际调用源代码如下:


第五步:这里我们已经可以通过调用以上四步得到的RAWINPUT数据来获得想要的数据了,这里以指针raw表示,首先看RAWINPUT结构的定义:

首先我们可以通过检测header是否等于RIM_TYPEMOUSE,了解是否这次RAWINPUT输入得到的是否是鼠标输入数据,只有等于时想要读取的是RAWINPUT结构才是鼠标的输入数据。这时我们才可以通过读取RAWMOUSE结构数据获得鼠标的具体输入信息,RAWMOUSE结构又很复杂,其本身又是RAWINPUT结构中定义的一个名为data的联合。首先看RAWMOUSE结构的定义:

其中主要用到的是以下几个数据,usFlags是用来指定鼠标状态的,usButtonFlags指示了按键状况,只需要通过与以下值的对比就可以知道有哪些按键按下与松开:
RI_MOUSE_LEFT_BUTTON_DOWN左键按下
RI_MOUSE_LEFT_BUTTON_UP左键松开
RI_MOUSE_MIDDLE_BUTTON_DOWN中键按下
RI_MOUSE_MIDDLE_BUTTON_UP中键松开
RI_MOUSE_RIGHT_BUTTON_DOWN右键按下
RI_MOUSE_RIGHT_BUTTON_UP右键松开
lLastX,lLastY指示了鼠标的移动,其值的含义由usFlags决定,当usFlags等于MOUSE_MOVE_RELATIVE时,lLastX,lLastY值表示鼠标相对于上一点的移动,当usFlags等于MOUSE_MOVE_ABSOLUTE时,lLastX,lLast的值表示鼠标的绝对移动,大概含义等于相对于某固定点的移动。要注意的是,无论是那种方式,lLastX,lLast都指示的是一个相对移动的数据,以屏幕坐标轴来看,当向上移动lLastX为负,向下移动lLastX为正,向左移动lLastY为负,向右移动lLastY为正,其值大小表示的是偏差。实际要获得鼠标的绝对坐标还需要经过一定处理,代码如下:

通过这样的调用,X,Y才是想要的鼠标坐标。另外,得到坐标后应该做边界检查,以鼠标指针在屏幕边界后X,Y超出有意义的坐标值或为负值。在处理完坐标后应该以此坐标重定位鼠标指针,以防消息丢失导致的实际坐标与指针的不一致。

第三代电影互动播放系统.pdf_第1页
第1页 / 共13页
第三代电影互动播放系统.pdf_第2页
第2页 / 共13页
第三代电影互动播放系统.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《第三代电影互动播放系统.pdf》由会员分享,可在线阅读,更多相关《第三代电影互动播放系统.pdf(13页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103116486 A(43)申请公布日 2013.05.22CN103116486A*CN103116486A*(21)申请号 201110364365.9(22)申请日 2011.11.17G06F 9/44(2006.01)G06F 3/033(2013.01)(71)申请人孙立军地址 100088 北京市海淀区西土城路4号(72)发明人孙立军(54) 发明名称第三代电影互动播放系统(57) 摘要本发明涉及一种第三代电影互动播放系统,以电影播放为主体,在剧情需要的时候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气。

2、氛,增加娱乐性。实现了全新的电影播放模式,增加了电影播放与观众的互动。(51)Int.Cl.权利要求书1页 说明书8页 附图3页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书8页 附图3页(10)申请公布号 CN 103116486 ACN 103116486 A1/1页21.一种第三代电影互动播放系统,包括第三代电影互动播放器、多个鼠标或操控手柄,其特征在于:第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信号,鼠标或操控手柄的功能是用来进行互动游戏,通过互动游戏来体验剧情发展。2.根据权利要求1的第三代电影互动播放系统,其特征在于:第三代电影互。

3、动播放器的视频播放软件采用微软的DirectShow。3.根据权利要求1的第三代电影互动播放系统,其特征在于:多鼠标或操控手柄的输入的识别并将识别信息传送给flash控件通过RawInput实现。权 利 要 求 书CN 103116486 A1/8页3第三代电影互动播放系统技术领域0001 本发明属于电影、游戏、电子科技领域,具体涉及一种电影播放系统,更具体来说,本发明涉及一种通过观众游戏来体验不同剧情发展的电影互动播放系统。背景技术0002 主流电影是以主动展示为播放形式,不能与观众产生互动,从而失去了很大娱乐性,而主流游戏又因为以操控为主要形式,而没有太多故事性和电影感。0003 纵观当前。

4、国际国内本领域研究现状,有关数字互动电影技术的研究内容非常薄弱,专门的深入交互数字电影技术研究,尤其是进行产业化运作的还是一个空白。发明内容0004 本发明的目的在于提供一种全新的电影播放系统,增加电影播放中与观众的互动。本发明的实现原理是以电影播放为主体,在剧情需要的时候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气氛,增加娱乐性。0005 本发明提供了一种第三代电影互动播放系统,其包括第三代电影互动播放器、多个鼠标或操控手柄,其中第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信号,鼠标或操控手柄的功能是用来进行互动游戏,通过。

5、互动游戏来体验剧情发展。0006 其中视频播放的软件采用微软的DirectShow。DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。DirectShow是一个开放的框架,因此只要有合适的filter来分析和解码,它可以支持任何格式。0007 多鼠标或操控手柄的输入的识别并将识别信息传送。

6、给flash控件通过RawInput实现。微软在Windows XP中在RawInput API中加入了鼠标的ID信息数据,因此,使得在Windows XP中通过直接分辨RawInput API中的鼠标ID信息非常方便地来识别不同的鼠标输入。本程序便采用的这中方法实现多鼠标。0008 虽然能够识别不同数据,但是对于不同鼠标指针的绘制完全要由编程人员控制。此技术有着对鼠标输入比较完全的控制,识别不同鼠标输入的数据较为容易,且仅仅通过微软的底层程序,因此效率很高。而且对于新加入的指针设备能有较快的反应,可以不考虑驱动程序就对新的指针设备提供直接支持。0009 本发明以电影播放为主体,在剧情需要的时。

7、候拍摄制作不同的剧情发展,以游戏互动的形式让观众选择剧情发展,同时穿插一些随机的小游戏,烘托电影气氛,增加娱乐性。实现了全新的电影播放模式,增加了电影播放与观众的互动。说 明 书CN 103116486 A2/8页4附图说明0010 图1是本发明第三代电影播放器的启动界面;0011 图2是本发明第三代电影播放器核心设置菜单;0012 图3是本发明第三代电影播放器设置播放参数的界面;0013 图4是本发明各鼠标输入数据识别流程图。具体实施方式0014 本发明的第三代电影互动播放系统,包括第三代电影互动播放器、多个鼠标或操控手柄,其中第三代电影互动播放器的主要功能是播放影片和接受鼠标或操控手柄的信。

8、号,鼠标或操控手柄的功能是用来进行互动游戏,通过互动游戏来体验剧情发展。0015 图1是本发明第三代电影播放器的启动界面,该界面非常简洁,主要通过菜单来设置。其中核心设置中设有“设置播放文件”的选项(见图2)。0016 点击进入即可设置播放参数,其界面如图3所示,本程序可以设置三个视频和六个flash动画。视频播放的时间和flash出现的时间同过后面的时间设置来控制。所有的flash时间的设置都相对上一个视频文件。当视频文件播放至设定的时间,通过对多鼠标或操控手柄的输入识别,传送给flash控件,启动不同剧情的flash文件,观众进入互动游戏来体验不同的剧情发展,或者进入小游戏调节气氛后,继续。

9、进行视频文件的播放。0017 多鼠标或操控手柄的输入的识别并将识别信息传送给flash控件通过RawInput实现。具体的流程图如图4所示。0018 第一步,用GetRawInputDeviceList函数获取RawInput设备数量。GetRawInputDeviceList的函数原型如下:0019 0020 0021 当第一参数为NULL的时候,第二参数为输出,输出的是RawInput设备数量。第三参数一般为RAWINPUTDEVICELIST的大小。所以可以以下方式调用以获得RawInput设备数量。0022 UINT nDevices;0023 GetRawInputDeviceLis。

10、t(NULL,&nDevices,sizeof(RAWINPUTDEV ICELIST)0024 调用以后,nDevices就是RawInput设备的数量。但是假如需要确定的鼠标RawInput设备数量,就还需要再一次以第一参数为输出调用GetRawInputDeviceList函数,这里首先需要了解RAWINPUTDEVICELIST结构。RAWINPUTDEVICELIST结构定义如下:0025 说 明 书CN 103116486 A3/8页50026 当在第二参数中给定RawInput设备的数量为输入时,第一参数就可以输出RAWINPUTDEVICELIST结构类型的输出。调用方式如下:。

11、0027 PRAWINPUTDEVICELIST pRawInputDeviceList;0028 pRawInputDeviceList(RAWINPUTDEVICELIST*)0029 calloc(nDevices,sizeof(RAWINPUTDEVICELIST);0030 GetRawInputDeviceList(pRawInputDeviceList,&nDevices,0031 sizeof(RAWINPUTDEVICELIST);0032 这里的nDevices必须已经经过上一步的GetRawInputDeviceList调用,值已经是RawInput设备的数量。这时可以通。

12、过判断pRawInputDeviceList各成员的dwType值是否等于RIM_TYPEMOUSE来判断此RawInput设备是否为鼠标的输入。0033 第二步:用RegisterRawInputDevices函数注册RawInput设备。这一步最需要注意,在Windows中一般情况下并不会让用户获取原始输入数据RawInput,所以使用GetRawInputData函数前必须先注册RawInput设备。注册RawInput的步骤就是通过调用RegisterRawInputDevices函数完成的。RegisterRawInputDevices函数原型如下:0034 0035 第一参数为一个。

13、RAWINPUTDEVICE结构的指针,第二参数给定需要注册RawInput设备的数量,第三参数为第一参数的大小。在这里要知道怎么注册又需要先了解RAWINPUTDEVICE结构,其结构定义如下:0036 0037 说 明 书CN 103116486 A4/8页60038 当dwFlags设为NULL时,Windows追随输入焦点接受RawInput数据。而第四参数就是指定的输入焦点,假如第四参数为NULL,那么Windows接受RawInput数据的窗口就是目前的键盘焦点窗口。这两个参数设定就是一般时所需要的,比如以下的方式就注册了一个RawInput设备,并且当注册失败时弹出对话框提示:0。

14、039 RAWINPUTDEVICE Raw1;0040 Rid0.usUsagePage0x01;0041 Rid0.usUsage0x02;0042 Rid0.dwFlags0;0043 Rid0.hwndTargetNULL;0044 if(RegisterRawInputDevices(Rid,1,sizeof(Rid0)FALSE)MessageBox(hWnd,RawInput Register Error.,RawInput init failed!,MB_OK);0045 这里需要注意的是并不是有多少个鼠标输入就需要注册多少个RawInput设备,一般来说,注册一个RawInp。

15、ut设备处理目前焦点的原始输入数据就足够了,同样可以获得所有的鼠标原始输入数据。除非想对不同焦点的原始输入数据进行处理,才需要注册多个usUsagePage与usUsage不同的RawInput设备。0046 第三步:调用GetRawInputData函数获得pData大小。这里要说明的是GetRawInputData一般要在响应WM_INPUT消息时调用,不能随时调用。GetRawInputData函数原型如下:0047 说 明 书CN 103116486 A5/8页70048 GetRawInputData第一参数为一个RAWINPUT结构的句柄,来自WM_INPUT消息的lParam参数。

16、。要说明的是GetRawInputData并不是一个随时调用以检测有无RawInput设备输入的函数,实际上是一个对WM_INPUT消息的lParam参数的解析函数,主要用途是从WM_INPUT消息的lParam参数中提取出有用的信息,并加以组织成一个RAWINPUT结构输出,当然,由于WM_INPUT消息的lParam参数传进来的是个句柄,实际上解析的是其代表的RAWINPUT结构数据。这也是GetRawInputData一般在响应WM_INPUT消息时调用的原因。第二参数为RID_INPUT时,GetRawInputData才输出RawInput信息。第三参数用以输出最后的RAWINPUT。

17、结构数据,当为NULL时在第四参数输出本参数大小。第四参数用以制定第三参数大小,第五个参数在只需要调用RAWINPUT结构输出的时候一般可以设为sizeof(RAWINPUTHEADER)。因为我们一开始不知道GetRawInputData第三参数的大小,必须以NULL为第三参数先调用一次GetRawInputData以从第四参数获得第三参数pData大小。调用方式如下:0049 0050 这样调用GetRawInputData函数后,dwSize就指示了其第三参数pData的大小。为下一次调用以输出RAWINPUT数据做准备。0051 第四步:调用GetRawInputData函数获得RAW。

18、INPUT数据。在获得GetRawInputData第三参数pData大小后就可以直接调用GetRawInputData获得RAWINPUT数据了。这里要说明的是第三参数为一个空指针,调用前先用刚才得到的dwSize参数分配足够的空间,并且调用完后必须强制转换才能得到想要的结果。实际调用源代码如下:0052 0053 说 明 书CN 103116486 A6/8页80054 第五步:这里我们已经可以通过调用以上四步得到的RAWINPUT数据来获得想要的数据了,这里以指针raw表示,首先看RAWINPUT结构的定义:0055 0056 首先我们可以通过检测header是否等于RIM_TYPEMO。

19、USE,了解是否这次RAWINPUT输入得到的是否是鼠标输入数据,只有等于时想要读取的是RAWINPUT结构才是鼠标的输入数据。这时我们才可以通过读取RAWMOUSE结构数据获得鼠标的具体输入信息,RAWMOUSE结构又很复杂,其本身又是RAWINPUT结构中定义的一个名为data的联合。首先看RAWMOUSE结构的定义:说 明 书CN 103116486 A7/8页90057 0058 其中主要用到的是以下几个数据,usFlags是用来指定鼠标状态的,usButtonFlags指示了按键状况,只需要通过与以下值的对比就可以知道有哪些按键按下与松开:0059 RI_MOUSE_LEFT_BUT。

20、TON_DOWN左键按下0060 RI_MOUSE_LEFT_BUTTON_UP左键松开0061 RI_MOUSE_MIDDLE_BUTTON_DOWN中键按下0062 RI_MOUSE_MIDDLE_BUTTON_UP中键松开0063 RI_MOUSE_RIGHT_BUTTON_DOWN右键按下0064 RI_MOUSE_RIGHT_BUTTON_UP右键松开0065 lLastX,lLastY指示了鼠标的移动,其值的含义由usFlags决定,当usFlags等于MOUSE_MOVE_RELATIVE时,lLastX,lLastY值表示鼠标相对于上一点的移动,当usFlags等于MOUSE_。

21、MOVE_ABSOLUTE时,lLastX,lLast的值表示鼠标的绝对移动,大概含义等于相对于某固定点的移动。要注意的是,无论是那种方式,lLastX,lLast都指示的是一个相对移动的数据,以屏幕坐标轴来看,当向上移动lLastX为负,向下移动lLastX为正,向左移动说 明 书CN 103116486 A8/8页10lLastY为负,向右移动lLastY为正,其值大小表示的是偏差。实际要获得鼠标的绝对坐标还需要经过一定处理,代码如下:0066 0067 通过这样的调用,X,Y才是想要的鼠标坐标。另外,得到坐标后应该做边界检查,以鼠标指针在屏幕边界后X,Y超出有意义的坐标值或为负值。在处理完坐标后应该以此坐标重定位鼠标指针,以防消息丢失导致的实际坐标与指针的不一致。说 明 书CN 103116486 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1