Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:13:43 delphi限制鼠标移动的范围
限制鼠标移动的范围有时为了操作方便,需要将鼠标的移动范围限制在一定区域内。本实例的窗体中有两个按钮,当单击第1 个按钮后,鼠标被限制在第2 个按钮上移动;当单击第2 个按钮后,鼠标可以在屏幕上自由移动。函数ClipCursor 可以限定鼠标活动区域。该函数原型如下:BOOL ClipCursor( CONST RECT *lpRect ) ;其中参数RECT 为指向一个矩形区域的指针,坐标为屏幕坐标。如果设置为0,则鼠标可以在整个屏幕中自由移动。因为ClipCursor 需要屏幕坐标作为参数,所以通过调用函数MapWindowPoints 将点相对坐标转换为屏幕坐标。该函数原型如下:int MapWindowPoints(HWND hWndFrom, // handle of window to be mapped fromHWND hWndTo, // handle of window to be mapped toLPPOINT lpPoints, // address of structure array with points to mapUINT cPoints // number of structures in array);其中的4 个参数含义如下。• hWndFrom:转换前作为坐标原点的窗体,如果为NULL 或HWND_DESKTOP 则表示屏幕。• hWndTo:转换后作为坐标原点的窗体,如果为NULL 或HWND_DESKTOP 则表示屏幕。• lpPoints:存储需要转换的点的数组地址。• cPoints:需要转换的点的个数。下面使用一个示例来说明如何限制鼠标移动位置。(1)创建一个新的Delphi 项目,给窗体Form1 添加两个Button 组件,Caption 属性分别设定为“将鼠标限定在下面的按钮中移动”和“取消鼠标移动范围的限定”,按钮的名称保留默认值。(2)响应“将鼠标限定在下面的按钮中移动”按钮的单击事件,代码如下://单击“将鼠标限定在下面的按钮中移动”限制鼠标移动范围procedure TForm1.Button1Click(Sender: TObject);varrtButton2: TRect;begin//获取Button2 的坐标rtButton2 := Button2.BoundsRect;//将坐标转换为屏幕坐标MapWindowPoints(handle, 0, rtButton2, 2);//将鼠标移动的范围限制在Button2 按钮上ClipCursor( @rtButton2 );end ;(3)响应“取消鼠标移动范围的限定”按钮的单击事件,代码如下://单击“取消鼠标移动范围的限定”按钮取消限制procedure TForm1.Button2Click(Sender: TObject);begin//取消鼠标移动范围的限制ClipCursor( 0 );end;
赞