飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1625|回复: 0

[C/C++] 如何捕获客户区之外的鼠标消息

[复制链接]
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-10-16 21:59:38 | 显示全部楼层 |阅读模式
    老方上课的代码大家都看过了,可能你们也遇到这个问题,就是在客户区内点了鼠标左键,然后光标移出了客户区,松开了右键.......

    我们可以调用
    SetCapture()

    ReleaseCapture()
    来捕获客户区外的消息!
    SetCapture

    函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有
    鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。
    如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定
    的窗口。
    函数原型:HWND SetCapture(HWND hwnd);
    参数:
    hWnd:当前线程里要捕获鼠标的窗口句柄。
    返回值:返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄,返回值是NULL。
    备注:只有前台窗口才能捕获鼠标。如果一个后台窗口想捕获鼠标,则该窗口仅为其光标热
    点在该窗口可见部份的鼠标事件接收消息。另外,即使前台窗口已捕获了鼠标,用户也可点
    击该窗口,将其调入前台。当一个窗日不再需要所有的鼠标输入时,创建该窗口的线程应当
    调用函数ReleaseCapture来释放鼠标。此函数不能被用来捕获另一进程的鼠标输入。
        Windows 95:调用SetCaptune会引起失去鼠标捕获的窗口接收一个WM_CAPTURECHANGED
    消息。
    速查:头文件:Winuser.h:输入库:user32.lib。

    ReleaseCapture

    函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠
    标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在
    另一个线程的窗口中。
    函数原型:BOOL ReleaseCapture(VOlD)
    参数:无。
    返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
    的错误信息,请调用GetlastError函数。
    备注:应用程序在调用函数SetCaPture之后调用此函数。
        Windows 95:调用ReleaseCapture会引起失去鼠标捕获的窗日接收一个
    WM_CAPTURECHANGED消息。
    速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上
    版本;头文件:winuser.h;输入库:User32.lib。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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