永发信息网

vb中控制鼠标在程序的范围内

答案:3  悬赏:0  手机版
解决时间 2021-03-18 16:56
vb中控制鼠标在程序的范围内
最佳答案
=================
Option Explicit
Private Const lBorder As Long = 4 '边框大小,经测试,至少为4才能不出现用户点击窗体边缘导致失效。
Dim R As RECT
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
'lpRect-鼠标光标限制到的矩形
Private Declare Function ClipCursorByNum Lib "user32" Alias "ClipCursor" (lpRect As Long) As Long
'lpRect-传0,取消鼠标光标限制
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Sub Form_Load() '窗体载入后,鼠标只能在窗体范围内移动
SetRect R, Left / Screen.TwipsPerPixelX + lBorder, Top / Screen.TwipsPerPixelY + lBorder, (Left + Width) / Screen.TwipsPerPixelX - lBorder, (Top + Height) / Screen.TwipsPerPixelY - lBorder
ClipCursor R
End Sub

Private Sub Form_Unload(Cancel As Integer) '窗体退出时,取消鼠标光标限制范围
ClipCursorByNum 0
End Sub
全部回答
一楼的方法执行后,鼠标移动到窗体边上,变成箭头形(即改变大小),一点,那个限制范围就失效了,算是个bug吧。下面这个代码是经过修正的,防止这一点出现。关闭程序后鼠标恢复正常。 ================= option explicit private const lborder as long = 4 '边框大小,经测试,至少为4才能不出现用户点击窗体边缘导致失效。 dim r as rect private type rect left as long top as long right as long bottom as long end type private declare function clipcursor lib "user32" (lprect as rect) as long 'lprect-鼠标光标限制到的矩形 private declare function clipcursorbynum lib "user32" alias "clipcursor" (lprect as long) as long 'lprect-传0,取消鼠标光标限制 private declare function setrect lib "user32" (lprect as rect, byval x1 as long, byval y1 as long, byval x2 as long, byval y2 as long) as long private sub form_load() '窗体载入后,鼠标只能在窗体范围内移动 setrect r, left / screen.twipsperpixelx + lborder, top / screen.twipsperpixely + lborder, (left + width) / screen.twipsperpixelx - lborder, (top + height) / screen.twipsperpixely - lborder clipcursor r end sub private sub form_unload(cancel as integer) '窗体退出时,取消鼠标光标限制范围 clipcursorbynum 0 end sub
Public Declare Function ClipCursor Lib "user32 " (ByRef lpRect As rect) As Integer Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean If keyData = (Keys.Alt Or Keys.F4) Then Return True Else Return MyBase.ProcessCmdKey(msg, keyData) End If End Function Public Structure rect Dim left As Integer Dim top As Integer Dim right As Integer Dim bottom As Integer End Structure mouse.left = 0 mouse.top = 0 mouse.right = Screen.PrimaryScreen.Bounds.Right mouse.bottom = Screen.PrimaryScreen.Bounds.Bottom ClipCursor(mouse) 想要完整版的再联系我,我以前做过这方面的程序,很简单,就是要熟悉API。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
教师取称的题目有哪些
营达高速要经过涌兴那些村
四季阳光装饰地址在哪,我要去那里办事
驾驶员如何调整左右反光镜
寻找一本小说!娱乐圈文,女主在酒店拍广告,
电动蝶阀规格型号有几种
王氏按摩地址在什么地方,想过去办事
佳麦饼店地址在哪,我要去那里办事
护理专业专升本的报名方法和考试科目
我结婚快八年了,如果现在买一房子,房证写我
溧阳假日酒店停车场这个地址在什么地方,我要
三个月的流浪小猫拉稀,不爱吃猫粮,爱吃零食
参保单位工会所属系统如何查询?
怎么魅族note手机登不了12306
有没有男主是世界强者之一因为女主而隐藏实力
推荐资讯
新娘嫁人了新郎不是我 完整版的高清视频哪里
取消超级会员服务会不会退款
C语言中的这个各类数值混合运算的题怎么解?
60000克+100克=()克
广州C6132A主轴承型号
华硕 玩地下城卡
八下英语单词表浙教版
为什么我手机QQ看别人发给我的视频总是出现文
WIN7旗舰版的32位操作系统能玩正当防卫3吗?
请问王者荣耀抽荣耀水晶的话差不多需要多少钱
八哥什么时间睡觉
桥江边地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?