Modifier: J'ai mis à jour la version 2. Maintenant, il est monochrome. J'ai essayé de le réparer en m'assurant d'appeler CreateCOmpatibleBitmap
avec le DC de la fenêtre plutôt que le memdc (comme écrit), mais il est encore faux :(Double-Buffering VB6 avec BitBlt aide
Ci-dessous sont 3 différentes versions simplifiées des fonctions que j'ai écrites. parfaitement (mais a scintillement, évidemment), la version 2 ne fait rien, et la version 3 remplit la forme entière de noir Quel est le problème avec la version 2 scaleMode est définie sur vbPixels
Version 1:.?.
Private Sub Form_Paint()
Me.Cls
DrawStuff Me.hDc
End Sub
Version 2 (nouvelle):
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
Version 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
Note: Je coincé le code ci-dessous dans ma fonction de modification de taille immédiatement avant l'appel à la peinture. Il n'a pas aidé, mais je suis assez sûr que je devrais le laisser là:
If m_HDC <> 0 Then DeleteDC m_HDC
m_HDC = 0
C'est monocrhome, mais fonctionnant. Apparemment, ce problème est commun, mais le correctif que j'ai vu n'a pas aidé. – Brian