判断是鼠标是否在某个窗口范围内

  这里用到了几个API函数

 

  1、CreateRectRgn:

函数 CreateRectRgn 声明如下:
WINGDIAPI HRGN    WINAPI CreateRectRgn( __in int x1, __in int y1, __in int x2, __in int y2);
x1 y1 是区域左上角的 X 轴和 Y 轴坐标。
x2 y2 是区域右下角的 X 轴和 Y 轴坐标。
返回值是创建的区域。

2、GetWindowRgn:

           函数GetWindowRgn声明如下:

           int GetWindowRgn(HWND hWnd, HRGN hRgn);

           hwnd 表示需要获取的窗口的Handle;

           hRgn 就是上一个API的返回值。代表区域。

3、GetCursorPos:

          函数 GetCursorPos 声明如下:

          BOOL GetCursorPos(LPPOlNT IpPoint);

          IpPoint :POINT结构指针,该结构接收光标的屏幕坐标。

4、PtInRegion:

          函数 PtInRegion 声明如下:

          BOOL PtInRegion(HRGN RGN , INT X, INt Y);

          RGN :表示要探查的区域

          X,Y分别表示当前鼠标的坐标

          该函数判断光标是否在指定的区域内。

 

不多说了上代码:

 

procedure TForm1.Timer1Timer(Sender: TObject);
var
  r:integer;
  hr:HRGN;
  p:TPoint;
begin
  hr   :=   CreateRectRgn(0,0,0,0);
  r := GetWindowRgn(Handle ,hr);
  GetCursorPos(p);
  if PtInRegion(hr,p.x,p.y) then
    Label1.Caption :='鼠标进入'
  else
    Label1.Caption :='鼠标离开';
  DeleteObject(hr);
end;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值