熊本周边:CStatic设置文字、字体、颜色和OnCtlColor的使用

来源:百度文库 编辑:中财网 时间:2024/10/06 01:45:11

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_DONTCARE0FW_THIN100FW_EXTRALIGHT200FW_ULTRALIGHT200FW_LIGHT300FW_NORMAL400FW_REGULAR400FW_MEDIUM500FW_SEMIBOLD600FW_DEMIBOLD600FW_BOLD700FW_EXTRABOLD800FW_ULTRABOLD800FW_BLACK900FW_HEAVY900以上各值是大约数,实际外观依赖字体大小,有的字体仅有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;
}