知道buffer,和width height,如何在上面写透明的字?

解决方案 »

  1.   

    CDC::SetBkMode(TRANSPARENT);
    CDC::TextOut(...);
      

  2.   

    void AddNameTime(HBITMAP hBm,int iWidth, int iHeight, BOOL bAddName,BOOL bAddTime,CString sName,CTime t,DWORD dwColor,DWORD dwNameAlign,DWORD dwTimeAlign){
    if (bAddTime || bAddName)
    {
    CString sTime;
    sTime.Format("%04d-%02d-%02d %02d:%02d:%02d",t.GetYear(), t.GetMonth(), t.GetDay(),t.GetHour(), t.GetMinute(), t.GetSecond());

    CDC dc;
    dc.CreateCompatibleDC(NULL);
    CBitmap * pSaveBmp = dc.SelectObject(CBitmap::FromHandle(hBm));
    CFont font;
    font.CreateFont(14,0,0,0,FW_THIN,0,0,0,DEFAULT_CHARSET,0,0,0,0,"Thamo");
    CFont * pSaveFont = dc.SelectObject(&font);
    dc.SetBkMode(TRANSPARENT);
    dc.SetTextColor(dwColor);
    INT iLeft =0;
    INT iTop =0;
    INT iRight = iWidth;
    INT iBottom = abs(iHeight);
    INT left=0,top=0;
    switch(dwNameAlign)
    {
    case 0:
    dc.SetTextAlign(TA_LEFT|TA_TOP);
    left = iLeft+2;
    top = iTop+2;
    break;
    case 1:
    dc.SetTextAlign(TA_LEFT|TA_BOTTOM);
    left = iLeft+2;
    top = iBottom-2;
    break;
    case 2:
    dc.SetTextAlign(TA_RIGHT|TA_TOP);
    left = iRight-2;
    top = iTop+2;
    break;
    case 3:
    dc.SetTextAlign(TA_RIGHT|TA_BOTTOM);
    left = iRight-2;
    top = iBottom-2;
    break;
    case 4:
    dc.SetTextAlign(TA_CENTER|TA_TOP);
    left = (iLeft+iRight)/2;
    top = iTop+2;
    break;
    case 5:
    dc.SetTextAlign(TA_CENTER|TA_BOTTOM);
    left = (iLeft+iRight)/2;
    top = iBottom-2;
    break;
    }
    dc.TextOut(left,top,sName);
    switch(dwTimeAlign)
    {
    case 0:
    dc.SetTextAlign(TA_LEFT|TA_TOP);
    left = iLeft+2;
    top = iTop+2;
    break;
    case 1:
    dc.SetTextAlign(TA_LEFT|TA_BOTTOM);
    left = iLeft+2;
    top = iBottom-2;
    break;
    case 2:
    dc.SetTextAlign(TA_RIGHT|TA_TOP);
    left = iRight-2;
    top = iTop+2;
    break;
    case 3:
    dc.SetTextAlign(TA_RIGHT|TA_BOTTOM);
    left = iRight-2;
    top = iBottom-2;
    break;
    case 4:
    dc.SetTextAlign(TA_CENTER|TA_TOP);
    left = (iLeft+iRight)/2;
    top = iTop+2;
    break;
    case 5:
    dc.SetTextAlign(TA_CENTER|TA_BOTTOM);
    left = (iLeft+iRight)/2;
    top = iBottom-2;
    break;
    }
    dc.TextOut(left,top,sTime);
    dc.SelectObject(pSaveFont);
    dc.SelectObject(pSaveBmp);
    }
    }