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

清泛原创

这里以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

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部