|
|
已测试,你的说明是正确的。
我们可以自己编写转换程序,已知ActiveWindow.PointsToScreenPixelsX(0)和ActiveWindow.PointsToScreenPixelsY(0)返回的值是最左上角单元格的left和top的像素值,
那么只要把某个单元格的相对位置也转换成像素值,然后加上前面的基础值,就可以得到某个单元格的正确像素位置,以下代码已通过ActiveWindow.RangeFromPoint测试无误。
注:GetPPI()函数用于获取显示硬件的PPI值,它是固定不变的,如果已知道(或者取过一次),就可以直接用数值代码,不再需要这个函数及API,前提是显示硬件环境不变。
测试程序:
- Sub test()
- Dim Px, Py, Px1, Py1
- With ActiveCell
- Px = .Left / 72 * GetPPI
- Py = .Top / 72 * GetPPI
- Px1 = ActiveWindow.PointsToScreenPixelsX(0)
- Py1 = ActiveWindow.PointsToScreenPixelsY(0)
- ActiveWindow.RangeFromPoint(Px + Px1, Py + Py1).Select
- End With
- End Sub
复制代码
GetPPI()函数,连同API语句放在标准模块:
- Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
- Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
- Declare Function GetDeviceCaps Lib "Gdi32" (ByVal hDC As Long, ByVal index As Long) As Long
- Const LOGPIXELSX = 88
- Const LOGPIXELSY = 90
- Function GetPPI()
- Dim hDC As Long
- hDC = GetDC(0)
- Dim X, Y
- X = GetDeviceCaps(hDC, LOGPIXELSX)
- Y = GetDeviceCaps(hDC, LOGPIXELSY)
- GetPPI = X
- End Function
复制代码 |
|