Редактировать: я обновил версию 2. Теперь он монохромный. Я попытался исправить это, убедившись, что вызывал CreateCOmpatibleBitmap
с DC окна, а не с memdc (как написано), но это все равно неправильно: (
Ниже приведены 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