編集: バージョン 2 を更新しました。現在はモノクロです。CreateCOmpatibleBitmap
(書かれているように)memdcではなくウィンドウのDCで呼び出すようにして修正しようとしましたが、それでも間違っています:(
以下は、私が書いた関数の 3 つの異なる簡略化されたバージョンです。バージョン 1 は完全に動作し (ただし、明らかにちらつきがあります)、バージョン 2 は何も実行せず、バージョン 3 はフォーム全体を黒で塗りつぶします。バージョン 2 の何が問題になっていますか? Scalemode は vbPixels に設定されます。
バージョン 1:
Private Sub Form_Paint()
Me.Cls
DrawStuff Me.hDc
End Sub
バージョン 2 (新規):
Private Sub Form_Paint()
Me.Cls
If m_HDCmem = 0 then
m_HDC = GetDC(hwnd)
m_HDCmem = CreateCompatibleDC(m_HDC)
m_HBitmap = CreateCompatibleBitmap(m_HDC, Me.ScaleWidth, Me.ScaleHeight)
ReleaseDC Null, m_HDC
SelectObject m_HDCmem, m_HBitmap
End If
DrawStuff m_HDCmem
Debug.Print BitBlt(Me.hDc, 0, 0, Me.ScaleWidth, Me.ScaleHeight, m_HDCmem, 0, 0, SRCCOPY) 'During testing, this printed "1"
Me.Refresh
End Sub
バージョン 3:
Private Sub Form_Paint()
Me.Cls
If m_HDC = 0 Then m_HDC = CreateCompatibleDC(Me.hDc)
DrawStuff m_HDC
BitBlt(Me.hDc, 0, 0, Me.ScaleWidth, Me.ScaleHeight, m_HDC, 0, 0, BLACKNESS) 'During testing, this printed "1"
Me.Refresh
End Sub
注: ペイントを呼び出す直前に、サイズ変更関数に以下のコードを貼り付けました。それは役に立ちませんでしたが、私はそれをそこに残しておくべきだと確信しています:
If m_HDC <> 0 Then DeleteDC m_HDC
m_HDC = 0