楽しみのために、Excel-vba から GDI (win32) 描画関数を呼び出したいと思いました。以下は私のdll関数宣言です。これらはすべて win32 からインポートされます。
Public Declare Function GetDC _
Lib "user32.dll" _
(ByVal handle As Long) As Long
Public Declare Function MoveToEx _
Lib "gdi32.dll" _
(ByVal handle As Long, ByVal x As Integer, ByVal y As Integer, ByVal lppoint As Long) As Integer
Public Declare Function LineTo _
Lib "gdi32.dll" _
(ByVal handle As Long, ByVal x As Integer, ByVal y As Integer) As Integer
Public Declare Function ReleaseDC _
Lib "user32.dll" _
(ByVal hwnd As Long, ByVal hdc As Long) As Integer
Public Declare Function GetSystemMetrics _
Lib "user32.dll" _
(ByVal i As Integer) As Integer
取得したい結果は、画面の左上隅から右下隅までの線です。次のコードは、必要な結果を提供します。
Private Sub CommandButton1_Click()
Dim dc As Long
dc = GetDC(0)
screenX = GetSystemMetrics(0)
screenY = GetSystemMetrics(1)
MoveToEx dc, 0, 0, 0
LineTo dc, screenX, screenY
ReleaseDC 0, dc
End Sub
しかし問題は、次のコードが何もしないことです。なんで?
Private Sub CommandButton1_Click()
Dim dc As Long
Dim screenX, screenY As Integer
dc = GetDC(0)
screenX = GetSystemMetrics(0)
screenY = GetSystemMetrics(1)
MoveToEx dc, 0, 0, 0
LineTo dc, screenX, screenY
ReleaseDC 0, dc
End Sub
唯一の違いは、2 番目のコードの 3 行目で変数が宣言されてscreenX
おりscreenY
、最初のコードでは変数が宣言されていないことです。誰が何が起こっているのか説明してもらえますか?