我想用DrawText函数在窗体上动态绘制从9到0反复循环的倒计时效果,于是我在SetTimer的回调函数中写了如下所示的代码:Private Sub TimerWndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal nidEvent As Long, ByVal dwTime As Long)
    Dim udtClientArea                                                       As RECT
    Dim lnghDC, hTmpDC, hTmpBitmap, hBrushBmp As Long
    
    If (uMsg = WM_TIMER) And (nidEvent = m_lngTimerID) Then
        Call GetClientRect(hWnd, udtClientArea)
        With udtClientArea
            .Left = 32&
            .Top = 40&
            .Right = 84&
            .Bottom = 84&
        End With
        lnghDC = GetDC(hWnd)
        hTmpDC = CreateCompatibleDC(lnghDC)
        hTmpBitmap = CreateCompatibleBitmap(lnghDC, udtClientArea.Right, udtClientArea.Bottom)
        hBrushBmp = SelectObject(hTmpDC, hTmpBitmap)
        With udtClientArea
            Call BitBlt(hTmpDC, .Left, .Top, .Right, .Bottom, lnghDC, .Left, .Top, SRCCOPY)
        End With
        Call SetTextColor(hTmpDC, &H0&)
        Call DrawText(hTmpDC, CStr(m_lngSecondsNumber), -1&, udtClientArea, DT_CENTER Or DT_VCENTER Or DT_SINGLELINE Or DT_END_ELLIPSIS)
        With udtClientArea
            Call BitBlt(lnghDC, .Left, .Top, .Right, .Bottom, hTmpDC, .Left, .Top, SRCCOPY)
        End With
        Call SelectObject(hTmpDC, hBrushBmp)
        DeleteObject hTmpBitmap
        DeleteDC hTmpDC
        Call ReleaseDC(hWnd, lnghDC)
        
        m_lngSecondsNumber = m_lngSecondsNumber - 1&
        If m_lngSecondsNumber < 0& Then m_lngSecondsNumber = 9&
    End If
End Sub 
现在可以实现倒计时了,可还存在两个问题我无法解决。
1、为什么用DrawText直接在窗体的hDC上绘制的文本周围就是透明的不会出现白底色,而在CreateCompatibleDC创建的兼容设备中绘制文本再用BitBlt拷贝到窗体上文本周围就会出现白底色。请问这个问题怎么解决呢?
2、请问用DrawText绘制文本时有办法设置字号吗,如果想绘制大点儿的字符该怎么办呢?