设置Ctatic控件的字体颜色

BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int  nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE  cStrikeOut, BYTE nCharSet,

                                BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );
  参数说明:
  nHeight         :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度.
  nWidth          :字体宽度.
  nEscapement     :文本行的倾斜度.
  nOrientation    :字符基线的倾斜度.
nWeight:

指定字体磅数(用每1000点中墨点像素数计)。尽管nWeight可为0到1000中的任意整数值,常用值和常数如下:

常数
FW_DONTCARE 0
FW_THIN 100
FW_EXTRALIGHT 200
FW_ULTRALIGHT 200
FW_LIGHT 300
FW_NORMAL 400
FW_REGULAR 400
FW_MEDIUM 500
FW_SEMIBOLD 600
FW_DEMIBOLD 600
FW_BOLD 700
FW_EXTRABOLD 800
FW_ULTRABOLD 800
FW_BLACK 900
FW_HEAVY 900
以上各值是大约数,实际外观依赖字体大小,有的字体仅有FW_NORMAL,FW_REGULAR,FW_BOLD磅数。如果FW_DONTCARE被指定,则使用缺省磅数。  bItalic         :字体是否为斜体 
bUnderline      :字体是否带下划线
  cStrikeOut      :字体是否带删除线

  nCharSet        :字体的字符集
    .ANSI_CHARSET
    .DEFAULT_CHARSET
    .SYMBOL_CHARSET.....
  nOutPrecision   :字符的输出精度
  nClipPrecision  :字符裁剪的精度
  nQuality        :字符的输出质量
  nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族)
  lpszFacename    :字体名称

http://www.kaifa6.com/v/mfcshouce/Class/CFont_CreateFont.htm

设置字体

  BOOL CTMyDlg::OnInitDialog()
  {
     CDialog::OnInitDialog();
     //CFont m_Font;
     m_Font.CreateFont(-12,0,0,0,700,
            0,1,0,0,0,0,0,0,
            _T( "宋体 "));
    CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
     m_Edit->SetFont(&m_Font,FALSE);
     return TRUE;  // return TRUE  unless you set the focus to a control
  }
  小小说明:在OnInitDialog()中的//CFont m_Font;前的"//"号去掉,将类声明中的CFont m_Font;去掉会是什么结果?请自己试试.

设置字体
          SetDlgItemText(IDC_STATIC1,"你好");     //设置文本

设置颜色
由于CStatic没有现成的接口,要么自己继承CStatic然后重写WM_CTLCOLOR的响应函数。要么在父窗口重写WM_CTLCOLOR的响应函数,然后调用相应的接口来改变文字颜色,原理如下:

“在绘制控件前,Windows向该控件的父窗口发送一条WM_CTLCOLOR消息,目的是获得该控件的颜色”,在该响应函数中修改颜色的参数。

HBRUSH CAboutDig::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_STATIC)
{
    pDC->SetTextColor(RGB(0,0,255));  //设置字体颜色
    pDC->SetBkMode(TRANSPARENT);        //设置背景透明
}
}

第三个参数OnCtlColor主要有以下的值:
CTLCOLOR_BTN 按钮控件
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滚动条
CTLCOLOR_STATIC 静态文本

2.你可能觉得对所有的控件使用统一的界面设置觉得不自由,其实VC同样可以对特定的ID的控件进行设置,方法如下:

switch(pWnd->GetDlgCtrlID())
{
//针对ID为IDC_CTL1、IDC_CTL2和IDC_CTL3的控件进行同样的设置
case IDC_CTL1:
case IDC_CTL2:
case IDC_CTL3:
{
     pDC->SetBkMode(TRANSPARENT);
     pDC->SetTextColor(RGB(255,255, 0));
     pWnd->SetFont(cFont);
     HBRUSH B = CreateSolidBrush(RGB(125,125,255));
     return (HBRUSH) B;
}
default:
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

HBRUSH CAFamlyLianxiDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
   
    if(nCtlColor == CTLCOLOR_STATIC)
    {
        switch(pWnd->GetDlgCtrlID())
        {
            case IDC_STATIC1:
            case IDC_STATIC2:
            case IDC_STATIC3:
            case IDC_STATIC4:
            case IDC_STATIC5:
            case IDC_STATIC6:
                {
                   pDC->SetBkMode(TRANSPARENT);
                   pDC->SetTextColor(RGB(0,0, 255));
                   break;
                }
            case IDC_STATIC7:
            case IDC_STATIC8:
                {
                    pDC->SetBkMode(TRANSPARENT);
                   pDC->SetTextColor(RGB(0,69, 214));
                   break;
                }
            default:
                break;
        }
    }
    return hbr;
}

你可能感兴趣的:(MFC)