函数功能: 创建一DC相容内存位图,输出文字到里面后再将文字拷贝到指定窗口.    创建的内存位图DC具有pHWnd窗口的字体和背景颜色,但字体是默认字体和pHWnd不同.CreateCompatibleDC不是创建一个与指定DC相容的DC吗?为什么只有字体不同?谢谢!Private Sub CreateMemText(ByVal pHWnd As Long, pText As String)
Dim mDC, mDCMem As Long
Dim mStrLen As Long
Dim mRect As RECT
Dim mSize As SIZE
Dim hBmpChar As Long
    '计算ANSI字符数量
    mStrLen = LenB(StrConv(pText, vbFromUnicode))
    mDC = GetDC(pHWnd)
    mDCMem = CreateCompatibleDC(mDC)
    Call GetTextExtentPoint32(mDCMem, pText, mStrLen, mSize)
    hBmpChar = CreateCompatibleBitmap(mDCMem, mSize.cx, mSize.cy)
    Call SelectObject(mDCMem, hBmpChar)
    Call TextOut(mDCMem, 0, 0, pText, mStrLen)
    Call BitBlt(mDC, 0, 0, mSize.cx, mSize.cy, mDCMem, 0, 0, SRCCOPY)
    Call DeleteDC(mDCMem)
    Call DeleteObject(hBmpChar)
    Call ReleaseDC(pHWnd, mDC)
End Sub

解决方案 »

  1.   

    使用SelectObject, 选入font
    Private Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long
      

  2.   

    记的使用完要DeleteObject, 选入的font
    Private Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
      

  3.   

    谢谢,我正在看SelectObject函数,但我怎么能获得pHWnd的字体和大小等信息呢?我要使内存DC的字体信息与pHWnd相同...
      

  4.   

    试一试Private Const OBJ_FONT = 6
    Private Declare Function GetCurrentObject Lib "gdi32" Alias "GetCurrentObject" (ByVal hdc As Long, ByVal uObjectType As Long) As Long