【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 5020|回复: 0

Win32 API 函数大全使用详解十 鼠标输入函数

[复制链接]
发表于 2007-3-22 11:00:18 | 显示全部楼层 |阅读模式
<font size="+0">鼠标</font>输入函数(Mouse Input) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>&nbsp;<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>DragDetect<br/>函数功能:该函数捕获并跟踪<font size="+0">鼠标</font>的移动直到用户松开左键、按下Esc。键或者将<font size="+0">鼠标</font>移动到围绕指定点的“拖动矩形”之外。拖动矩形的宽和高由函数GetSystemMetrics返回的SM_CXDRAG或SM_CYDRAG确定。<br/>&nbsp; &nbsp; 函数原型:BOOL DragDetect(HWND hwnd,POINT pt);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; hwnd:接受<font size="+0">鼠标</font>输入的窗口的句柄。<br/>&nbsp; &nbsp; pt:<font size="+0">鼠标</font>在屏幕坐标下的初始位置,此函数根据这个点来确定拖动矩形的坐标。<br/>&nbsp; &nbsp; 返回值:如果用户在按着<font size="+0">鼠标</font>左键时将<font size="+0">鼠标</font>移出了拖动矩形之外,则返回非零值;如果用户按着<font size="+0">鼠标</font>左键在拖动内移动<font size="+0">鼠标</font>,则返回值是零。<br/>&nbsp; &nbsp; 备注:拖动矩形的系统度量是可构造的,允许更大或更小的拖动矩形。<br/>&nbsp; &nbsp; 速查:Windows NT: 4.0及以上版本;Windows:95及以上版本;Windows <br/>CE:不支持;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>GetCapture<br/>&nbsp; &nbsp; 函数功能:该函数取得捕获了<font size="+0">鼠标</font>的窗口(如果存在)的句柄。在同一时刻,只有一个窗口能捕获<font size="+0">鼠标</font>;此时,该窗口接收<font size="+0">鼠标</font>的输入,无论光标是否在其范围内。<br/>&nbsp; &nbsp; 函数原型:HWND GetCapture(VOID)<br/>&nbsp; &nbsp; 参数:无。<br/>&nbsp; &nbsp; 返回值:返回值是与当前线程相关联的捕获窗口的句柄。如果当前线程里没有窗口捕获到<font size="+0">鼠标</font>,则返回NULL。<br/>&nbsp; &nbsp; 备注:返回NULL并不意味着系统里没有其他进程或线程捕获到<font size="+0">鼠标</font>,只表示当前线程没有捕获到<font size="+0">鼠标</font>。<br/>&nbsp; &nbsp; 速查:Windows NT:4.0及以上版本;Wiodows:95及以上版本;Windows <br/>CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>GetDoubleClickTime<br/>函数功能:该函数取得<font size="+0">鼠标</font>的当前双击时间。一次双击是指对<font size="+0">鼠标</font>键的两次连击,第一次击键后在指定时间内击第二次。双击时间是指在双击中,第一次击键和第二次击键之间的最大毫秒数。<br/>&nbsp; &nbsp; 函数原型:UINT GetDoubleClickTime(VOID)<br/>&nbsp; &nbsp; 参数:无。<br/>&nbsp; &nbsp; 返回值:返回是当前双击时间,按毫秒计算。<br/>&nbsp; &nbsp; 速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows <br/>CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>GetMouseMovePoints<br/>函数原型:int GetMouseMovePoints(UINT cbSize,LPMOUSEMOVEPOlNT lppt,LPMOUSEMOVEPOINT <br/>IpptBuf,int,nBufPoints,DWORD resolution);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; cbSize:结构MOOSEMOVEPOINT的大小。<br/>&nbsp; &nbsp; lppt:指向结构MOUSEMOVEPOINT的指针,该结构包含了有效的<font size="+0">鼠标</font>坐标(屏幕坐标)。也可以包含一个时间标记。<br/>&nbsp; &nbsp; <br/>函数GetMouseMovePoints在<font size="+0">鼠标</font>坐标历史记录中查找一点。如果此函数查到该点,则返回包含提供点在内的在此之前的最后一个nBufPoints。如果应用程序提供一个时间标记,则函数GetMouseMovePoints将用它来区分记录于不同时间的两个相等的点。<br/>&nbsp; &nbsp; 应用程序使用从消息WM_MOOSEMOVE中接收的<font size="+0">鼠标</font>坐标来调用此函数,并把它们转换为屏幕坐标。<br/>&nbsp; &nbsp; lpptBut:将接收点的缓冲区的指针。其大小至少应为cbsze· nBuffPoints。<br/>&nbsp; &nbsp; nBufPoints:指定将取得的点的个数。<br/>&nbsp; &nbsp; resolution:指定希望的分辨率。此参数可取下列值之一:<br/>&nbsp; &nbsp; GMMP_USE_DISPLAY_POINTS:用显示分辨率取得点。<br/>&nbsp; &nbsp; GMMP_USE_DRIVER_pOINTS:用驱动器分辨率取得点。在Windows <br/>CE平台下,画笔驱动器的分辨率高于显示分辨率。这样,函数GetMouseMovePoints可被那些需要准确分辨率的应用程序使用。(如手写体识别软件或计算机辅助设计软件)。<br/>&nbsp; &nbsp; <br/>返回值:如果函数调用成功,返回值是缓冲区里的点的数目。否则,函数返回C1。若想获得更多的错误信息,请调用GetlastError函数。函数GetLastError可能返回下面的错误代码。<br/>&nbsp; &nbsp; GMMF_ERR_POINT_NOT_FOUNQ由lPPt指定的点找不到或不再存在于系统缓冲区中。<br/>&nbsp; &nbsp; <br/>备注:系统至少保留着64个<font size="+0">鼠标</font>坐标及其时间标记。如果应用程序给GetMouseMovePoints提供了一个<font size="+0">鼠标</font>坐标,而该坐标存在于系统中的<font size="+0">鼠标</font>坐标历史记录中,则函数从历史坐标记录取得指定个数的坐标。也可以提供一个时间标记,用来区分历史记录中相同的点。<br/>&nbsp; &nbsp; 函数GetMouseMonePoints将返回实际发送给调用线程和其他线程的点。<br/>&nbsp; &nbsp; 速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows <br/>CE:2.0及以上版本;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>mouse_event<br/>函数功能:该函数综合<font size="+0">鼠标</font>击键和<font size="+0">鼠标</font>动作。<br/>&nbsp; &nbsp; 函数原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD dwFlags,OWORD dx,DWORD <br/>dy, DWORD dwData, DWORD dwExtralnfo);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; dwFlags:标志位集,指定点击按钮和<font size="+0">鼠标</font>动作的多种情况。此参数里的各位可以是下列值的任何合理组合:<br/>&nbsp; &nbsp; <br/>MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管<font size="+0">鼠标</font>的类型或与系统相连的类似于<font size="+0">鼠标</font>的设备的类型如何。要得到关于相对<font size="+0">鼠标</font>动作的信息,参见下面备注部分。<br/>&nbsp; &nbsp; MOOSEEVENTFMOVE:表明发生移动。<br/>&nbsp; &nbsp; M00SEEVENTF_LEFTDOWN:表明接按下<font size="+0">鼠标</font>左键。<br/>&nbsp; &nbsp; M00SEEVENTF_LEFTUP:表明松开<font size="+0">鼠标</font>左键。<br/>&nbsp; &nbsp; MOOSEEVENTF_RIGHTDOWN:表明按下<font size="+0">鼠标</font>右键。<br/>&nbsp; &nbsp; MOOSEEVENTF_RIGHTUP:表明松开<font size="+0">鼠标</font>右键。<br/>&nbsp; &nbsp; MOOSEEVENTF_MIDDLEDOWN:表明按下<font size="+0">鼠标</font>中键。<br/>&nbsp; &nbsp; MOOSEEVENTF_MIDDLEUP:表明松开<font size="+0">鼠标</font>中键。<br/>&nbsp; &nbsp; MOOSEEVENTF_WHEEL:在Windows NT中如果<font size="+0">鼠标</font>有一个轮,表明<font size="+0">鼠标</font>轮被移动。移动的数量由dwData给出。<br/>&nbsp; &nbsp; <br/>dx:指定<font size="+0">鼠标</font>沿x轴的绝对位置或者从上次<font size="+0">鼠标</font>事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为<font size="+0">鼠标</font>的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示<font size="+0">鼠标</font>移动的数量,表明<font size="+0">鼠标</font>已经移动。<br/>&nbsp; &nbsp; <br/>dy:指定<font size="+0">鼠标</font>沿y轴的绝对位置或者从上次<font size="+0">鼠标</font>事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为<font size="+0">鼠标</font>的实际y坐标,给出的相对数据作为移动的mickeys数。<br/>&nbsp; &nbsp; <br/>dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定<font size="+0">鼠标</font>轮移动的数量。正值表明<font size="+0">鼠标</font>轮向前转动,即远离用户的方向;负值表明<font size="+0">鼠标</font>轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。<br/>&nbsp; &nbsp; 如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。<br/>&nbsp; &nbsp; dwExtralnfo:指定与<font size="+0">鼠标</font>事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。<br/>&nbsp; &nbsp; 返回值:无。<br/>&nbsp; &nbsp; 备注:如果<font size="+0">鼠标</font>被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。<br/>&nbsp; &nbsp; <br/>如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角。<br/>&nbsp; &nbsp;<br/>如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相对于上次<font size="+0">鼠标</font>事件产生的位置(即上次报告的位置)的移动。正值表示<font size="+0">鼠标</font>向右(或下)移动;负值表示<font size="+0">鼠标</font>向左(或上)移动。<br/>&nbsp; &nbsp; <br/><font size="+0">鼠标</font>的相对移动服从<font size="+0">鼠标</font>速度和加速度等级的设置,一个最终用户用<font size="+0">鼠标</font>控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。<br/>&nbsp; &nbsp; <br/>在应用加速时系统对指定相对<font size="+0">鼠标</font>移动提供了两个测试。如果指定的沿X轴y轴的距离比第一个<font size="+0">鼠标</font>阈值大,并且<font size="+0">鼠标</font>的加速等级非零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离比第二个<font size="+0">鼠标</font>阈值大,并且<font size="+0">鼠标</font>的加速等级为2,则操作系统将从第一个阈测试得来的距离加倍。这样就允许操作系统将指定<font size="+0">鼠标</font>沿X轴或y轴的相对位移加到4倍。<br/>&nbsp; &nbsp; <br/>一旦应用了加速,系统用期望的<font size="+0">鼠标</font>速度换算合成的值。<font size="+0">鼠标</font>速度的范围是从1(最慢)到20(最快),并代表基于<font size="+0">鼠标</font>移动的距离指示符移动的数量。缺省值是10,表示对<font size="+0">鼠标</font>的移动设有附加的修改。<br/>&nbsp; &nbsp; <br/>函数mouse_event需要用的应用程序用来合成<font size="+0">鼠标</font>事件。也被应用程序用来取得<font size="+0">鼠标</font>位置和<font size="+0">鼠标</font>按键状态之外的<font size="+0">鼠标</font>信息。例如,如果输入板制造商想将基于画笔的信息传给自己的应用程序,可以写一个直接与输入板硬件通信的动态键接库(DLL),获得附加的信息,并保存到一个队列中。DLL然后调用mouse_event,用标准按键和x/y位置数据,并在参数dwExtralnfo设置排列的附加信息的指针或索引。当应用程序需要附加信息时,调用DLL(连同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。<br/>&nbsp; &nbsp; Windows CE:Windows CE不支持参数 dwFlags取MOOSE EVENTF WHEEL常数。<br/>&nbsp; &nbsp; 速查: Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows <br/>CE:不支持;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = <br/>ReleaseCapture<br/>函数功能:该函数从当前线程中的窗口释放<font size="+0">鼠标</font>捕获,并恢复通常的<font size="+0">鼠标</font>输入处理。捕获<font size="+0">鼠标</font>的窗口接收所有的<font size="+0">鼠标</font>输入(无论光标的位置在哪里),除非点击<font size="+0">鼠标</font>键时,光标热点在另一个线程的窗口中。<br/>&nbsp; &nbsp; 函数原型:BOOL ReleaseCapture(VOlD)<br/>&nbsp; &nbsp; 参数:无。<br/>&nbsp; &nbsp; 返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetlastError函数。<br/>&nbsp; &nbsp; 备注:应用程序在调用函数SetCaPture之后调用此函数。<br/>&nbsp; &nbsp; Windows 95:调用ReleaseCapture会引起失去<font size="+0">鼠标</font>捕获的窗日接收一个WM_CAPTURECHANGED消息。<br/>&nbsp; &nbsp; 速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows <br/>CE:1.0及以上版本;头文件:winuser.h;输入库:User32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = <br/>SetCapture<br/>函数功能:该函数在属于当前线程的指定窗口里设置<font size="+0">鼠标</font>捕获。一旦窗口捕获了<font size="+0">鼠标</font>,所有<font size="+0">鼠标</font>输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获<font size="+0">鼠标</font>。如果<font size="+0">鼠标</font>光标在另一个线程创建的窗口上,只有当<font size="+0">鼠标</font>键按下时系统才将<font size="+0">鼠标</font>输入指向指定的窗口。<br/>&nbsp; &nbsp; 函数原型:HWND SetCapture(HWND hwnd);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; hWnd:当前线程里要捕获<font size="+0">鼠标</font>的窗口句柄。<br/>&nbsp; &nbsp; 返回值:返回值是上次捕获<font size="+0">鼠标</font>的窗口句柄。如果不存在那样的句柄,返回值是NULL。<br/>&nbsp; &nbsp; <br/>备注:只有前台窗口才能捕获<font size="+0">鼠标</font>。如果一个后台窗口想捕获<font size="+0">鼠标</font>,则该窗口仅为其光标热点在该窗口可见部份的<font size="+0">鼠标</font>事件接收消息。另外,即使前台窗口已捕获了<font size="+0">鼠标</font>,用户也可点击该窗口,将其调入前台。当一个窗日不再需要所有的<font size="+0">鼠标</font>输入时,创建该窗口的线程应当调用函数ReleaseCapture来释放<font size="+0">鼠标</font>。此函数不能被用来捕获另一进程的<font size="+0">鼠标</font>输入。<br/>&nbsp; &nbsp; Windows 95:调用SetCaptune会引起失去<font size="+0">鼠标</font>捕获的窗口接收一个WM_CAPTURECHANGED消息。<br/>&nbsp; &nbsp; 速查:头文件:Winuser.h:输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = <br/>SetDoubleCIckTime<br/>函数功能:该函数为<font size="+0">鼠标</font>设置双击时间。<br/>&nbsp; &nbsp; 函数原型:BOOL SetDoubleCIckTime(UINT ulnterval);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; ulnterval:指定在双击中第一次和第二次点击之间的毫秒数。如果此参数设置为零则系统使用缺省的双击时间,即500毫秒。<br/>&nbsp; &nbsp; 返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。<br/>&nbsp; &nbsp; 备注:函数SetDoubleClickTime为系统中所有的窗口修改双击时间。<br/>&nbsp; &nbsp; 速查:Windows NT 3.1及以上版本;Windows:95及以上版本;Windows <br/>CE:不支持;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = = <br/>SwapMouseButton<br/>函数功能:该函数反转或恢复<font size="+0">鼠标</font>左右键的含义<br/>&nbsp; &nbsp; 函数原型:BOOL SwapMouseButton(BOOL fSwap);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; <br/>fSwap:指定<font size="+0">鼠标</font>键的含义是否被反转或恢复。如果此参数为TRUE,则左键产生右键消息而右键产生左键消息,如果此参数为FALSE,则恢复<font size="+0">鼠标</font>键的最初含义。<br/>&nbsp; &nbsp; 返回值:如果在函数调用之前<font size="+0">鼠标</font>键的含义已被反转,则返回非零值。如果<font size="+0">鼠标</font>键的含义没反转,返回值是零。<br/>&nbsp; &nbsp; <br/>备注:<font size="+0">鼠标</font>键交换是为给那些用左手操作<font size="+0">鼠标</font>的人提供方便。此函数通常只能由控制板调用。尽管一个应用程序能够自由地调用此函数,但<font size="+0">鼠标</font>是一种共享资源,其键的含义反转会影响所有应用程序。<br/>&nbsp; &nbsp; 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows <br/>CE:不支持;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>= = = = = = = = = = = = = = = = = = = <br/>TrackMouseEvent<br/>函数功能:当在指定时间内<font size="+0">鼠标</font>指针离开或盘旋在一个窗口上时,此函数寄送消息。<br/>&nbsp; &nbsp; 函数原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);<br/>&nbsp; &nbsp; 参数:<br/>&nbsp; &nbsp; lpEventTrack;指向结构TRACKMOUSEEVENT的指针。<br/>&nbsp; &nbsp; 返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。<br/>&nbsp; &nbsp; 此函数能寄送如下消息:<br/>&nbsp; &nbsp; <br/>WM_MOUSEHOVER:在上次调用TrackMouseEvent指定的时间里,<font size="+0">鼠标</font>盘旋在窗口的客户区。当此消息产生时,盘旋跟踪停止。如果需要进一步的<font size="+0">鼠标</font>盘旋跟踪,应用程序应当再次调用TrackMouseEvent。<br/>&nbsp; &nbsp; <br/>WM_MOUSELEAVE:<font size="+0">鼠标</font>离开上次调用TrackMouseEvent时指定的窗口客户区。当此消息产生时,所有由TrackMouseEvent要求的跟踪都被取消。当<font size="+0">鼠标</font>再次进入窗口,并且要求进一步的<font size="+0">鼠标</font>盘旋跟踪时,应用程序必须调用TrackMouseEvent。<br/>&nbsp; &nbsp; 备注:当<font size="+0">鼠标</font>指针在指定时间内停留在指定矩形内,就被认为是处于盘旋状态。调用函数<br/>&nbsp; &nbsp; SystemParameterslnfo并使用SPI_GETMOUSEAOVERWIDTH,SPI_GETMOUSEHOVERAEIGHT和<br/>&nbsp; &nbsp; SFI_GETMOOSEAOVERTIME值来取得矩形的大小和时间。<br/>&nbsp; &nbsp; 速查:Windows NT 4.0及以上版本;Windows 98及以上版本;Windows <br/>CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。<br/>= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <br/>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-6-23 12:29

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表