2009-01-29 12 views
1

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 

Répondre

1

dans la version 2 & 3 votre appel à CreateCompatibleDC() construit une surface de dessin monochrome qui est 1 pixel par 1 pixel. Vous devez appeler CreateCompatibleBitmap() quelque part là-dedans.

voir here

+0

C'est monocrhome, mais fonctionnant. Apparemment, ce problème est commun, mais le correctif que j'ai vu n'a pas aidé. – Brian