1

编辑:我更新了第 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
4

1 回答 1

1

在第 2 版和第 3 版中,您对 CreateCompatibleDC() 的调用构建了一个 1 像素乘 1 像素的单色绘图表面。您需要在其中的某处调用 CreateCompatibleBitmap()。

这里

于 2009-01-29T21:58:55.567 回答