zoukankan      html  css  js  c++  java
  • MFC中修改静态文本框中文字的字体、颜色

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

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

    方法一:

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

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

    至于代码中的参数问题,自己百度或者参考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消息的,当控件需要重绘时会发出这个消息(姑且这么简单理解吧).

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

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

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

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

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

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

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

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

  • 相关阅读:
    有向无环图单源最短路径问题
    linux下程序编译出错解决方法
    Ceres入门笔记
    Java 中的数据结构类 Vector 和 ArrayList
    102. Binary Tree Level Order Traversal
    104. Maximum Depth of Binary Tree
    101. Symmetric Tree
    100. Same Tree
    490. The Maze
    骑士游历问题
  • 原文地址:https://www.cnblogs.com/qingergege/p/5147988.html
Copyright © 2011-2022 走看看