使static text的中间几个字变斜体

解决方案 »

  1.   

    呵呵,自画,从CStatic类派生自己的类!然后使用DrawText输出文字
      

  2.   

    CClientDC dc(this);
    LOGFONT lf;  
    ::ZeroMemory(&lf,sizeof(lf));
    //12点的Times黑体
    lf.lfHeight = - MulDiv(12,dc.GetDeviceCaps(LOGPIXFLSX),72);
    lf.lfWidth= 0;
    lf.lfEscapement = 0;
    lf.lfOrientation = 0;
    lf.lfWeight = FW_BOLD;
    lf.lfItalic = FALSE;
    lf.lfUnderline = FALSE;
    lf.lfStrikeOut= FALSE;
    lf.lfCharSet = DEFAULT_CHARSET;
    lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
    lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
    lf.lfQuality = DEFAULT_QUALITY;
    lf.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;m_font1.CreateFontIndirect(&lf);
    GetDlgItem(IDC_STATIC_X)->SetFont(&m_font1);
    GetDlgItem(IDC_STATIC_Y)->SetFont(&m_font1); //12点的Arial 加粗斜体
    lf.lfItatic = TRUE;
    lf.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
    m_font2.CreateFontIndirect(&lf);//设置控件字体
    GetDlgItem(IDC_X)->SetFont(&m_font21);
      

  3.   

    哈哈,作出来了:m_font.CreateFont(
       16,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       TRUE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial");             m_pStatic = new CStatic[3];
    m_pStatic[0].Create("Yes",WS_CHILD | WS_VISIBLE,CRect(0,  150,30,200),this,1);
    m_pStatic[1].Create("Yes",WS_CHILD | WS_VISIBLE,CRect(30,150,60,200),this,1);
    m_pStatic[2].Create("Yes",WS_CHILD | WS_VISIBLE,CRect(60,150,90,200),this,1);m_pStatic[1].SetFont(&m_font);
      

  4.   

    void DrawText(
      CDC *pDC,
      int x, 
      int y, 
      int nAlign,
      CString sFontName, 
      int nFONTSIZE0, 
      COLORREF crTextColor, 
      CString sText
      )
    { LOGFONT lf;//字体
    lf.lfStrikeOut=0;//字体带有删除线
       lf.lfCharSet = DEFAULT_CHARSET ;//字符集
    lf.lfEscapement =0;//角度
    lf.lfItalic = false ;//字体倾斜
    lf.lfUnderline = false ;//是否带有下划线
    lf.lfHeight = nFONTSIZE0 ;//字号
    strcpy(lf.lfFaceName,sFontName.GetBuffer(sFontName.GetLength()));
    CFont font ;
    font.CreateFontIndirect(&lf);
    CFont *pOldFont = (CFont *)
    pDC->SelectObject(&font);
    UINT oldAlign,uAlign ;
    switch(nAlign)
    {
    case 0: 
    uAlign = TA_LEFT | TA_TOP ;
    break;
    case 1:
    uAlign = TA_CENTER | TA_TOP;
    break;
    case 2:
    uAlign = TA_RIGHT  | TA_TOP ;
    break; 
    default: 
    uAlign = TA_LEFT | TA_TOP ;
    break;
    }
    oldAlign = pDC->SetTextAlign(uAlign);//文字的对齐方式
    int  oldMode =  pDC->SetBkMode(TRANSPARENT);//字体背景是否透明
    int  oldColor = pDC->SetTextColor(crTextColor) ;//加入字体的颜色
    pDC->TextOut(x,y,sText); pDC->SetTextColor(oldColor) ;
    pDC->SetTextAlign(oldAlign);
    pDC->SetBkMode(oldMode);
    pDC->SelectObject(pOldFont);
    font.DeleteObject();//清除对象}-----------------------------------------------------
    谢谢 vcleaner的提示!
      

  5.   

    CRect的长度需要根据Create的一个变量也就是字符串的长度变化。你可以把上面的方法封装成一个类 
    CYourStatic:public CStatic
    {
       //重载Create,在这里面实现。
       BOOL Create(....); 
    }