判斷是鼠標是否在某個窗口範圍內

  這裏用到了幾個API函數

 

  1、CreateRectRgn:

函數CreateRectRgn聲明如下:
WINGDIAPI HRGN    WINAPI CreateRectRgn( __in int x1, __in int y1, __in int x2, __in int y2);
x1y1是區域左上角的X軸和Y軸座標。
x2y2是區域右下角的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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章