问题如标题所述:
CDC *pDC=GetDC();
pDC->TestOut(...)怎么控制输出字符的背景色、前景色、字体大小、字体类型先谢谢了!

解决方案 »

  1.   

    CFont font;
    font.CreateFont(200 , 0 , 0 , 0 , FW_BLACK , 
    FALSE , FALSE , FALSE ,
    GB2312_CHARSET , 
    OUT_DEFAULT_PRECIS ,
    CLIP_DEFAULT_PRECIS , 
    DEFAULT_QUALITY ,
    FIXED_PITCH | FF_MODERN,
    "宋体");
    CDC *pDC=GetDC();
    CFont* pOldFont=(CFont*)pDC->SelectObject(&font);
    pDC->SetBkMode(TRANSPARENT);
    pDC->TestOut(...)
      

  2.   

    void CFontOneView::OnDraw(CDC* pDC)
    {
    CFontOneDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CFont font1,font2,font3,font4,font5;
    font1.CreateFont(-36, //字符高度(设备单位)
    0, //根据当前方向比率选择最佳宽度
    0, //字体角度
    0, //字符角度
    FW_NORMAL, //字体镑数为正常值
    FALSE, //不是斜体
    FALSE, //没有下划线
    FALSE, //没有删除线
    ANSI_CHARSET, //取ANSI_CHARSET字符集
    OUT_DEFAULT_PRECIS, //默认输出精度
    CLIP_DEFAULT_PRECIS, //默认裁减精度
    DEFAULT_QUALITY, //精度差
    DEFAULT_PITCH | FF_SWISS,//字体间距与字体族
    "Arial"); //选取Arial字体
    CFont* pOldFont=pDC->SelectObject(&font1);//保存字体
    pDC->TextOut(0,0,"This is Arial");
    font2.CreateFont(-36,
    0,
    0,
    0,
    FW_BOLD, //字体镑数较大
    FALSE,
    1,  //加下划线
    FALSE,
    ANSI_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,
    DEFAULT_PITCH | FF_MODERN,
    "Courier"); //选取Courier字体
    pDC->SelectObject(&font2);
    pDC->TextOut(0,40,"This is Courier");
    font3.CreateFont(-36,
    0,
    0,
    0,
    FW_THIN, //字体镑数较小
    1,
    FALSE,
    FALSE,
    GB2312_CHARSET, //中文字符集
    OUT_STROKE_PRECIS,
    CLIP_STROKE_PRECIS,
    DRAFT_QUALITY,
    VARIABLE_PITCH|FF_MODERN,
    "楷体_GB2312"); //选取楷体
    pDC->SelectObject(&font3);
    pDC->TextOut(150,80,"行云流水");
    font4.CreateFont(-36,
    0,
    0,
    0,
    FW_NORMAL,
    FALSE,
    FALSE,
    FALSE,
    GB2312_CHARSET,
    OUT_STROKE_PRECIS,
    CLIP_STROKE_PRECIS,
    DRAFT_QUALITY,
    VARIABLE_PITCH|FF_MODERN,
    "隶书"); //选取隶书
    pDC->SelectObject(&font4);
    pDC->TextOut(0,120,"从前有座山...");
    font5.CreateFont(-36,
    0,
    0,
    0,
    FW_NORMAL,
    FALSE,
    FALSE,
    FALSE,
    GB2312_CHARSET,
    OUT_STROKE_PRECIS,
    CLIP_STROKE_PRECIS,
    DRAFT_QUALITY,
    VARIABLE_PITCH|FF_MODERN,
    "华文彩云"); //选取华文彩云字体
    pDC->SelectObject(&font5);
    pDC->TextOut(0,160,"华文彩云");
    pDC->SelectObject(pOldFont); //恢复原先字体
    }
    -----------------------------------------void CFontTwoView::OnDraw(CDC* pDC)
    {
    CFontTwoDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CFont font1,font2,font3;
    LOGFONT logFont;
    //绘制第一行
    logFont.lfHeight=-40; //字符高度
    //根据当前方向比率选择最佳宽度
    logFont.lfWidth=0;
    logFont.lfEscapement=0; //字体角度
    logFont.lfOrientation=0; //字符角度
    logFont.lfWeight=FW_NORMAL; //字体镑数为正常值
    logFont.lfUnderline=FALSE; //没有下划线
    logFont.lfStrikeOut=FALSE; //没有删除线
    logFont.lfCharSet = ANSI_CHARSET;
        logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
        logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
        logFont.lfQuality = PROOF_QUALITY;
        logFont.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
        strcpy(logFont.lfFaceName, "Times New Roman");
    font1.CreateFontIndirect(&logFont);
    //选入新建字体,并保存原有字体
    CFont* pOldFont=pDC->SelectObject(&font1);
    pDC->TextOut(0,0,"This is Times New Roman");
    //绘制第二行
    logFont.lfHeight=40; //字体大小
    font2.CreateFontIndirect(&logFont); //创建新字体
    pDC->SelectObject(&font2); //选入新建字体
    pDC->TextOut(0,80,"This is Times New Roman");
    //绘制第三行
    logFont.lfHeight=45;
    logFont.lfEscapement=450; //逆时针旋转45度
    logFont.lfOrientation=450;
    logFont.lfUnderline=1;
    logFont.lfCharSet=GB2312_CHARSET; //选入中文字库
    logFont.lfOutPrecision=OUT_STROKE_PRECIS;
    logFont.lfClipPrecision=CLIP_STROKE_PRECIS;
    logFont.lfQuality=DRAFT_QUALITY;
    logFont.lfPitchAndFamily=VARIABLE_PITCH|FF_MODERN;
    strcpy(logFont.lfFaceName,"华文行楷");
    font3.CreateFontIndirect(&logFont); //创建新字体
    pDC->SelectObject(&font3); //选入新字体
    pDC->SetTextColor(RGB(255,255,255)); //将文本颜色设为白色
    pDC->SetBkColor(RGB(0,0,0)); //将文本背景颜色设为黑色
         pDC->TextOut(200,200,"谁说我不在乎!");
    pDC->SelectObject(pOldFont); //恢复原有字体
    }
    -----------------------------------------
      

  3.   

    楼上的楼上好酷
    不就是个CreateFont吗?那么铺张干什么?
      

  4.   

    还有一个问题:怎样让字体的背景色是一个渐变的颜色,而不是单一颜色。用pDC->SetBKColor(COLORERF)只能是单一的颜色,怎么才能让字体的背景色是一个渐变的颜色呀!从左上角到右下角实现两种颜色的渐变!如果各位嫌分不够,我还可以再开一个贴!!