程序是先画一底坐标,之后根据数据用不同的颜色作曲线图  画线出来的颜色是正确的,  但用SetTextColor 设置字体颜色时,在画底框时没有问题,但同时作曲线[写字,就只能是DC的底色了  一旦用了白色为图片的底色,则显示不出字体  程序的大概如下:请各位大大指点Private Sub Command4_Click() '打印
…………………
    If UBound(Arr_Data_Draw, 2) > 0 Then ’取出并查到有画图的数据
        DeleteDC hDCmem_XY ’删除原来的图片
        A = 画底框(vbWhite)  '画一个底色为白色的图片底框
        Call 重绘(Arr_Data_Draw) ’根据数据重新作图
………………..
    End If
End Sub
Function 画底框(MyBackColor) 'X刻度的大小
…………….
    '创建一个RGB颜色与窗体背景色一致的刷子
    hBrush = CreateSolidBrush(MyBackColor)
    FillRect hDCmem_XY, oRect, hBrush                  '以控件背景色填充位图
   ……………………………. 
    '在内存中画四条线的做法!
………………………………………………….
    SetTextColor hDCmem_XY, vbBlack                     '设置DC上写入字体的颜色 
    TextOut hDCmem_XY, TimetoX(0) - 60, ValToY(MAXT / 2, MAXT) - 25, "温", 2
    TextOut hDCmem_XY, TimetoX(0) - 60, ValToY(MAXT / 2, MAXT) - 10, "度", 2
TextOut hDCmem_XY, TimetoX(0) - 60, ValToY(MAXT / 2, MAXT) + 15, "℃", 2‘这里的SetTextColor到最后还是能显示出指定的颜色
并产生了一个hDCmem_XY  底框的DC公共变量
……………………..
End FunctionSub 重绘(Arr)
…………………………………..
    hdc = GetDC(0)
    hDCmem = CreateCompatibleDC(hdc)
    hBmp = CreateCompatibleBitmap(hdc, lWidth, lHeight)
    hBmpPrev = SelectObject(hDCmem, hBmp)
………………………        For i = 1 To UBound(Arr, 2) Step 3 '重画所有的点
        
……….
                
                hPen = CreatePen(PS_SOLID, 2, ARR_COLOR(M_name - 1))
                
                DeleteObject SelectObject(hDCmem, hPen)                             'MoveToEx hDCmem, TimetoX(Tim_Old), ValToY(Data_Value(M_name, 1), MAXT), pt
                'LineTo hDCmem, TimetoX(Tim_now), ValToY(Data_Value(M_name, 2), MAXT)
                
                MoveToEx hDCmem, TimetoX(Time_Value(M_name, 1)), ValToY(Data_Value(M_name, 1), MAXT), pt
                  LineTo hDCmem, TimetoX(Time_Value(M_name, 2)), ValToY(Data_Value(M_name, 2), MAXT)
                
                DeleteObject hPen
                
                ‘只是不同的线用不同的颜色来,画曲线
       ……………………………………………..
                                                '为什么改变不了字体颜色?
                        SetTextColor hDCmem_XY, vbRed                 
                        TextOut hDCmem, TimetoX(0) + 30, ValToY(MAXT, MAXT), "HEATING", 7
                        
                        SetTextColor hDCmem_XY, vbMagenta 
                        TextOut hDCmem, TimetoX(Tim_Old) + 30, ValToY(MAXT, MAXT), "HOLDING", 7
                        
‘这里的本意就是在DC里不同的地方写些不同阶段颜色的字体.
‘但最后显示出来的字是白底,字色是DC的底框色
‘一旦底框用了白色,这些字就不能显示出来了!
   ……………………
        DeleteDC hDCmem
End Sub

解决方案 »

  1.   

    还忘记了一个,要将底框与画线的图合并的程序
    Public Function PictureFromDC(hDCsrc As Long, OldhDC As Long, F As Boolean) As StdPicture
        '两张图片相加,并将第二张透明处理
        '如是false则只是原图复制    Dim hdc As Long
        Dim hDCmem As Long
        Dim hBmp As Long, hBmpPrev As Long    hdc = GetDC(0)
        hDCmem = CreateCompatibleDC(hdc)
        hBmp = CreateCompatibleBitmap(hdc, lWidth, lHeight)
        hBmpPrev = SelectObject(hDCmem, hBmp)
        ReleaseDC 0, hdc
        
        
        '先将旧图拷贝出来
        BitBlt hDCmem, 0, 0, lWidth, lHeight, OldhDC, 0, 0, vbSrcCopy
        
        If F Then
            '另一张图的黑色底(默认的背景色)变为透明(去除),只余下其它色,与原图粘结
            TransparentBlt hDCmem, 0, 0, lWidth, lHeight, _
                           hDCsrc, 0, 0, lWidth, lHeight, vbBlack
        End If
                       
                                          
        hBmp = SelectObject(hDCmem, hBmpPrev)
        
        DeleteDC hDCmem
        DeleteObject hBmpPrev                                           '删除位图不能删除
        
            Dim pic As PicBmp
        Dim IPic As StdPicture
        Dim IID_IDispatch As GUID
        
        With IID_IDispatch
              .Data1 = &H20400
              .Data4(0) = &HC0
              .Data4(7) = &H46
        End With
        With pic
              .Size = Len(pic)
              .Type = 1
              .hBmp = hBmp
              .hPal = 0
        End With    OleCreatePictureIndirect pic, IID_IDispatch, True, IPic         '这个ture 会自动销毁吗?
        
        Set PictureFromDC = IPic
        
        
        '现在的问题是这个是否也要
      
        Set IPic = Nothing
            
    End Function
      

  2.   

    换个思路吧 TextBOX 里面就是一个色 除非你用RichTextBox 你想怎么变 到处变都行 我用的是 PictureBox 你看看下图曲线图整体是被Picture1整个包起来的 曲线部份是 Picture2 座标数值是用Picture1.Print画曲线图(折线)是用 Picture2.Line
      

  3.   

    API声明:
    Private Const TRANSPARENT = 1
    Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
    语句:
    SetBkMode(hDCmem_XY,TRANSPARENT)
      

  4.   

    SetTextColor hDCmem_XY, vbMagenta  
      TextOut hDCmem, TimetoX(Tim_Old) + 30, ValToY(MAXT, MAXT), "HOLDING", 7将hDCmem_XY换成 hDCmem就好了