使用CFont类来改变CStatic的字体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CFont类来改变CStatic的字体相关的知识,希望对你有一定的参考价值。

如何修改  静态文本控件的字体和颜色

参考技术A private:
CFont m_headfont;
......

//添加一个按钮消息响应函数,用于设置静态文本的字体
void CTestDlg::OnButton()

m_headfont.CreateFont(-24, 0, 0, 0, 400, FALSE, FALSE,
0,GB2312_CHARSET , OUT_DEFAULT_PRECIS,//ANSI_CHARSET
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
VARIABLE_PITCH | FF_SCRIPT, "楷体_GB2312");//DEFAULT_PITCH FF_MODERN
m_staticMe.SetFont(&m_headfont, true);//调用静态文本的成员函数SetFont设置字体


//添加一个OnCtlColor的消息响应函数,用于设置静态文本的颜色
HBRUSH CTesDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_STATIC)

pDC->SetTextColor(RGB(200, 0, 0);


// TODO: Return a different brush if the default is not desired
return hbr;
本回答被提问者采纳
参考技术B 1)dc.GetTextMetrics(&tm);
2)CFont* pOldFont = dc.SelectObject(&m_font);
先获得旧字体高度,再调整字体?

那m_font是与tm.tmHeight无关的吗?
另外,团IDC网上有许多产品团购,便宜有口碑
参考技术C 先创建一个CFont,然后在合适的地方使用CStatic调用
void SetFont(
CFont* pFont,
BOOL bRedraw = TRUE
);
参考技术D 我自己从CStatic派生一个类,希望可以设置字体字号在OnPaint中,输出文字的1)dc.GetTextMetrics(

MFC中GDI之CFont(字体)

字体主要是用于修饰文字输出的形状、高度、宽度、粗度、倾斜、删除线等。

BOOL CreateFontIndirect(const LOGFONT* lpLogFont); 根据LOGFONT结构体创建一个字体
BOOL CreateFont(
     int nHeight,
     int nWidth,
     int nEscapenment,
     intnOrientation,
     int nWeight,
     BYTE bItalic,
     BYTE bUnderline,
     BYTE cStrikeOut,
     BYTE nCharset,
     BYTE nOutPrecision,
     BYTE nClipPrecision,
     BYTE nQuality,
     BYTE nPitchAndFamily,
     LPCTSTR lpszFacename
    );
根据指定数值创建字体,其参数与LOGFONT成员一致,故等价于 CreateFontIndirect
BOOL CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL); 根据字体的名字和高度创建字体
BOOL CreatePointFontIndirect(const LOGFONT* lpLogFont, CDC* pDC = NULL); 根据LOGFONT结构体创建点字体
static CFont* FromHandle(HFONT hFont) 将HFONT句柄转换为CFont对象
operator HFONT() const 从CFont对象中获取HFONT句柄
int GetLogFont(LOGFONT* pLogFont); 获取字体的名称和高、宽等属性信息

wingdi.h中定义:
#define ANSI_CHARSET  0    #define GB2312_CHARSET   134

/* Logical Font */
#define LF_FACESIZE         32

typedef struct tagLOGFONTA
{
    LONG      lfHeight;                //字体的高度
    LONG      lfWidth;                 //字体的宽度,取 0 :自适应
    LONG      lfEscapement;            //设定字符串底线与水平线的夹角,以0.1° 为单位
    LONG      lfOrientation;           //设定每一个字符底线与水平线的夹角,以0.1° 为单位
    LONG      lfWeight;                //设置字体的粗细,范围 0-1000,400为正常粗细,700为粗,若取 0 ,则选择默认粗细
    BYTE      lfItalic;                //斜体
    BYTE      lfUnderline;             //下划线
    BYTE      lfStrikeOut;             //删除线
    BYTE      lfCharSet;               //指定字符集
    BYTE      lfOutPrecision;          //指定输出时字体的精度  OUT_DEFAULT_PRECIS
    BYTE      lfClipPrecision;         //指定输出时字体被裁减的精度 CLIP_DEFAULT_PRECIS
    BYTE      lfQuality;               //指定输出的质量 DEFAULT_QUALITY
    BYTE      lfPitchAndFamily;        //指定字体的斜度和字体的类型 DEFAULT_PITCH | FF_SWISS FF_ROMAN
    CHAR      lfFaceName[LF_FACESIZE]; //字体的名称
} LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
typedef struct tagLOGFONTW
{
    LONG      lfHeight;
    LONG      lfWidth;
    LONG      lfEscapement;
    LONG      lfOrientation;
    LONG      lfWeight;
    BYTE      lfItalic;
    BYTE      lfUnderline;
    BYTE      lfStrikeOut;
    BYTE      lfCharSet;
    BYTE      lfOutPrecision;
    BYTE      lfClipPrecision;
    BYTE      lfQuality;
    BYTE      lfPitchAndFamily;
    WCHAR     lfFaceName[LF_FACESIZE];
} LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;

#ifdef UNICODE
typedef LOGFONTW LOGFONT;
typedef PLOGFONTW PLOGFONT;
typedef NPLOGFONTW NPLOGFONT;
typedef LPLOGFONTW LPLOGFONT;
#else
typedef LOGFONTA LOGFONT;
typedef PLOGFONTA PLOGFONT;
typedef NPLOGFONTA NPLOGFONT;
typedef LPLOGFONTA LPLOGFONT;
#endif // UNICODE

 

 微软提供的例子:

技术图片
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
 
// Initializes a CFont object with the specified characteristics. 
CFont font;
VERIFY(font.CreateFont(
   12,                        // nHeight
   0,                         // nWidth
   0,                         // nEscapement
   0,                         // nOrientation
   FW_NORMAL,                 // nWeight
   FALSE,                     // bItalic
   FALSE,                     // bUnderline
   0,                         // cStrikeOut
   ANSI_CHARSET,              // nCharSet
   OUT_DEFAULT_PRECIS,        // nOutPrecision
   CLIP_DEFAULT_PRECIS,       // nClipPrecision
   DEFAULT_QUALITY,           // nQuality
   DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
   _T("Arial")));                 // lpszFacename
 
// Do something with the font just created...
CClientDC dc(this);  
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
 
// Done with the font.  Delete the font object.
font.DeleteObject(); 
View Code

 

以上是关于使用CFont类来改变CStatic的字体的主要内容,如果未能解决你的问题,请参考以下文章

MFC中GDI之CFont(字体)

MFC 画字体DrawText()或TextOut(),CFont字体样式类

字体设置

MFC中能改变TextOut输出的字体的大小吗

VC++6.0,界面字号问题

MFC 静态文本如何调整字体大小