ピクチャボックスコントロールのMOVEメソッドで正確に移動するには?

解決


たうえ  2004-03-04 04:18:05  No: 82392  IP: [192.*.*.*]

クリップボードを使わずにアクティブウィンドウをキャプチャしたいのですが、
下記の様にすればウマクいきます。
しかし、Screen.TwipsPerPixelX * 4とScreen.TwipsPerPixelY * 4を
増分してピクチャボックスを移動しないと、少し小さめの画像しかキャプチャ
出来ないのです。原因がわかりません。又、この方法で正しいのでしょうか?

Call GetWindowRect(g_lng_WH, g_udt_RECT)

If SetForegroundWindow(g_lngWH) = 1 Then '最前面表示成功なら

    If IsIconic(g_lng_WH) = 0 Then '非アイコン表示なら
    
    Picture1.Move _
    g_udt_RECT.Left * Screen.TwipsPerPixelX, _
    g_udt_RECT.Top * Screen.TwipsPerPixelY, _
    (g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + Screen.TwipsPerPixelX * 4, _
    (g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + Screen.TwipsPerPixelY * 4
    
    BitBlt Picture1.hDC, _
    0, _
    0, _
    (g_udt_RECT.Right - g_udt_RECT.Left), _
    (g_udt_RECT.Bottom - g_udt_RECT.Top), _
    GetWindowDC(g_lngWH), _
    0, _
    0, vbSrcCopy
    
    Picture1.Refresh '強制更新
    
    End If
  
End If

編集    削除
punto  2004-03-04 06:47:40  No: 82393  IP: [192.*.*.*]

ん?単に border の問題か?きになるんだったら、
 (g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (, _

編集    削除
punto  2004-03-04 06:49:01  No: 82394  IP: [192.*.*.*]

あ、ごめん、
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth)
とかすれば?

編集    削除
たうえ  2004-03-04 22:50:44  No: 82395  IP: [192.*.*.*]

うお!できました!

(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth), _
(g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + (Picture1.Height - Picture1.ScaleHeight)

Picture1.BorderStyle = 0 でもOKですね。
後、Picture1.Refresh だと、前にキャプチャした画像が残ってしいます。
Picture1.Cls でクリアしたほうが良いようです。ありがとうございました。

編集    削除
たうえ  2004-03-05 19:02:48  No: 82396  IP: [192.*.*.*]

忘れてた。

編集    削除