posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

OnCtlColor函数来改变控件颜色

Posted on 2013-02-28 10:44 盛胜 阅读(1418) 评论(0)  编辑 收藏 引用

在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:

  afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
           参数nCtlColor用于指定控件的类型,可以是:
           .CTLCOLOR_BTN                按钮控件
           .CTLCOLOR_DLG                对话框
           .CTLCOLOR_EDIT               编辑框
           .CTLCOLOR_LISTBOX            列表控件
           .CTLCOLOR_MSGBOX             消息控件
           .CTLCOLOR_SCROLLBAR 滚动条控件
           .CTLCOLOR_STATIC             静态控件
[程序实现]
           假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.
  HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
           {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  
        // TODO: Change any attributes of the DC here
           if (nCtlColor==CTLCOLOR_STATIC)

              {
                    pDC->SetTextColor(RGB(255,0,0));
  //字体颜色
                    pDC->SetBkColor(RGB(0, 0, 255));   //字体背景色  

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


如果要指定某个特定控件可以这样写:ID为IDC_STATIC1

if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
       pDC->SetTextColor
(
RGB(255,0,0));  //设置字体颜色
       pDC->SetBkMode(TRANSPARENT); //设置字体背景为透明
// TODO: Return a different brush if the default is not desired
  return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 设置背景色
}
else
return hbr;

【注】

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明

 

http://hi.baidu.com/sicceer/blog/item/1f3ac41f27f5007ef724e4f2.html


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理