VC中CStatic等控件字体颜色的设置和OnCtlColor的使用

来源:清泛原创     2016-11-03 09:20:02    人气:     我有话说( 0 人参与)

这里以CStatic为例,其他的控件字体颜色的设置方法类似,如果需更多个性化设置,建议自绘控件,相关内容请在清泛网自行搜索。由于CStatic没...

这里以CStatic为例,其他的控件字体颜色的设置方法类似,如果需更多个性化设置,建议自绘控件,相关内容请在清泛网自行搜索。


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

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

1、所有的CStatic控件设置颜色:

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的控件进行设置,方法如下:

if(pWnd->GetDlgCtrlID() == IDC_STATIC1) 
...


3、点某个按钮后,动态改变背景色
设置一个颜色变量,按钮事件中改变其颜色值,然后在OnCtlColor中进行设置:
void CctlfinalDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    m_bkcolor=RGB(0,255,0);   //Green
    GetDlgItem(IDC_STATIC)-> InvalidateRect(NULL); 
}

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

    // TODO:  Change any attributes of the DC here
    if(pWnd->GetDlgCtrlID()==IDC_STATIC) 
    { 
        pDC->SetTextColor(m_bkcolor);
    } 

    // TODO:  Return a different brush if the default is not desired
    return hbr;
}

CStatic 控件 字体颜色 OnCtlColor

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: