我想請問一個問題
小弟最近用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)