文章类型: VC&C++
关键词: VC,MFC,修改,静态,文本框,文字,字体,颜色
内容摘要: MFC中修改静态文本框中文字的字体、颜色

在VC的MFC中修改静态文本框中文字的字体、颜色

2017/11/29 16:43:15    来源:apple    阅读:

假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj。


设置字体时自然要用到CFont类,下面介绍两种方法,两种方法都要先在头文件中添加一个变量CFont newFont,切记要声明称类的成员变量,不能是局部变量


方法一:


在OnInitDialog()函数中添加代码:

newFont.CreatePointFont(160,L"楷体");
m_static_xsdj.SetFont(&newFont);

或者使用

m_font.CreateFont(16, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, 0,
		ANSI_CHARSET, OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
		DEFAULT_PITCH&FF_SWISS, "宋体");
m_edit_oppointmentPage.SetFont(&m_font);

至于代码中的参数问题,自己百度或者参考MSDN吧。


这种方法要自己指定字体,但更多的情况是我们希望在原有字体上进行修改,这就是方法二:


思路是:首先获取原有字体,然后获取其对应的LOGFONT结构体,接着修改该LOGFONT结构体,最后利用修改后的结构体,创建一个新的字体。


方法二:


给出代码,依然是写到OnInitDialog 中

CFont* font;
font=m_static_xsdj.GetFont();//获取CFont对象
LOGFONT lf;
font->GetLogFont(&lf);//获取LOGFONT结构体
lf.lfHeight=-26;    //修改字体大小
lf.lfItalic=TRUE;        //倾斜
lf.lfWeight=400;   //修改字体的粗细
newFont.CreateFontIndirectW(&lf);//创建一个新的字体
m_static_xsdj.SetFont(&newFont);


下面是修改静态文本框控件中文本颜色、文本背景颜色、和控件背景颜色。


首先应当明确的是,在那个函数中下手(写代码),答案是OnCtlColor()函数中,这个函数是用于响应WM_CTLCOLOR消息的,当控件需要重绘时会发出这个消息(姑且这么简单理解吧).


说以下这个函数的函数原型:

HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    return hbr;
}

三个参数:pDC表示与当前控件相关联的设备上下文,pWnd是当前控件的指针,nCtlColor 表示控件的类型,返回值是一个HBRUSH句柄,该句柄用户重绘控件的背景色。


然后说一下SetTextColor()、SetBkColor()、和SetBkMode()三个函数


SetTextColor()函数很明显是设置文本颜色的,而SetBkColor()函数不是用来设置控件背景颜色的,而是用来设置文本背景颜色的(就是包含文本的矩形)、SetBkMode()是用来设定文字背景模式的,参数只有两个选择OPAQUE、TRANSPARENT表示是否透明。


那么控件的背景颜色怎么设置呢?答案是通过返回的HBRUSH句柄。


下面给出一个代码,和运行效果

HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    if( IDC_STATIC_XSDJ  ==  pWnd->GetDlgCtrlID())//判断发出消息的空间是否是该静态文本框
    {
        pDC->SetTextColor(RGB(255,0,0));//设置文本颜色为红色
        pDC->SetBkMode(OPAQUE);//设置文本背景模式为透明
        pDC->SetBkColor(RGB(0,0,255));//设置文本背景为蓝色
        hbr=CreateSolidBrush(RGB(0,255,0));//控件的背景色为绿色
    }
    return hbr;//返回用于重绘控件背景的画刷
}

11111111111.png

↑ 上一篇文章:VC中退出应用程序-几种很有用的方法 关键词:VC,退出,应用程序,方法,PostMessage,Se.. 发布日期:2017/11/29 14:15:25
↓ 下一篇文章:VC++下的GetWindowRect和GetClientRect 关键词:VC,GetWindowRect,GetClientRe.. 发布日期:2017/11/30 17:10:04
相关文章:
VC中设置CListCtrl单元格的字体及背景颜色 关键词:VC,设置,CListCtrl,单元格,字体,背景,颜色, 发布日期:2017-11-17 08:35
VC的mfc中设置static text的颜色 关键词:VC,mfc,设置,static,text,颜色 发布日期:2017-11-20 15:17
VC6.0修改字体(非系统自带的5种字体) 关键词:VC6.0修改字体(非系统自带的5种字体) 发布日期:2017-07-26 15:41
相关目录:.NETVC&C++
我要评论
正在加载评论信息......