作者DGnzj (DG)
看板Visual_Basic
标题[VB6 ] 如何确定视窗的工具列高度(已解决)
时间Wed Feb 17 20:59:03 2010
我想请问一个问题
小弟最近用vb6写了一个锁定滑鼠於某特定视窗的小软体(套用後滑鼠不会跑出视窗外)
不过遇上了一个问题想来这边请教一下(orz_)
先说明一下,我的开发环境是VB6+XP
虽然自己封装成exe自用是没有问题,(也换过别台测过OK)
但有些板上的乡民(使用win7)提出了这样的问题
就是视窗的上缘高度不正确,导致玩游戏的时候没办法正常运作
用程式面的角度来讲:
我用
Findwindow 取得了某视窗的 hWnd
再用
GetWindowRect 取得他的大小放在Rect里(包含上、下、左、右的type)
因为这个Rect的宽度与高度会包含视窗的边框(frame)还有标题列(menu)等...。
所以我会在限制之前,先将Rect扣掉这些数值,微调後才变成真正去限制的范围大小
在此,针对视窗微调的部分说明如下
With
NewRect
.Left = .Left +
MySM.CXFRAME +
MySM.CYBORDER
.Top = .Top +
MySM.CYMENU +
(MySM.CYFRAME +MySM.CYBORDER) * 2
.Right = .Right -
MySM.CXFRAME
.Bottom = .Bottom -
MySM.CXFRAME
End With
================================================================
With NewRect
.Left = .Left + MySM.CXFRAME + MySM.CYBORDER
.Top = .Top + MySM.CYCAPTION + MySM.CYFRAME
.Right = .Right - MySM.CXFRAME
.Bottom = .Bottom - MySM.CXFRAME
End With
新的写法,原来是我取错参数了,标题列是caption,
MENU不知道是不是『开始』那边的高度
另外,偶然的机会找到了一个叫API-Guide的工具,上面的写法比我更精简(果然人外有人)
下面是他的写法,用了三种跟我不同的api,但我全部九行,他五行
'==得到目标视窗client的左上点位置
GetClientRect hWnd, NewRect
UpperLeft.X = NewRect.left
UpperLeft.Y = NewRect.top
'转换目标视窗的左上点位置成为全萤幕的点位置(微调)
ClientToScreen hWnd, UpperLeft
'将NewRect左上角定位到新的点
OffsetRect NewRect, UpperLeft.X, UpperLeft.Y
--
漫长的RD之路~
终点站等着我的是......
另一种新语言诞生~..........by DG~
※ 编辑: DGnzj 来自: 112.104.209.166 (02/23 20:45)