|
▼すなさん さん:
おはようございます。
アップされたコードを、こちらの環境(2010 と 2003) で試しましたら
いずれも、縦横数値が逆転しているだけで、同じ値でした。
ところで、エクセルで指定する長さはポイント単位ですね。
実際には、これを、Windowsが画面に描画する際には、ピクセル(いわゆる画素)に変換して処理します。(たぶん?)
で、想像ですけど
1.そのときの表示倍率に基づいた1インチあたりのポイント数を取得。
2.1インチあたりの画素数を取得。(表示倍率にかかわらず一定)
3.指定されたポイント数に相当する画素数を取得。
4.その画素数分のドットを描画。
このようにしているんだろうと理解しています。
で、2.の数字は、標準設定であれば縦も横も同じで、96あたりに設定されていると
思われますが、ここは、任意に設定することもできます。
以下を実行してみて、同じ数になるかどうか、確認してみられてはいかがでしょう。
Option Explicit
Declare Function GetDC Lib "User32.dll" (ByVal hWnd As Long) As Long
Declare Function ReleaseDC Lib "User32.dll" (ByVal hWnd As Long, _
ByVal hdc As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Const LOGPIXELSX = 88
Const LOGPIXELSY = 90
Sub TestDPI()
MsgBox "横は" & GetDPI(LOGPIXELSX) & vbLf & "縦は" & GetDPI(LOGPIXELSY)
End Sub
Private Function GetDPI(ByVal nFlag As Long) As Long
Dim hdc As Long
hdc = GetDC(Application.hWnd)
GetDPI = GetDeviceCaps(hdc, nFlag)
Call ReleaseDC(&H0, hdc)
End Function
|
|