1

編集: バージョン 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
4

1 に答える 1

1

バージョン 2 & 3 では、CreateCompatibleDC() を呼び出すと、1 ピクセル x 1 ピクセルのモノクロ描画面が構築されます。そこのどこかで CreateCompatibleBitmap() を呼び出す必要があります。

ここを参照

于 2009-01-29T21:58:55.567 に答える