改变ListBox控件的颜色

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

  // TODO: Change any attributes of the DC here
  if(pDC->GetWindow() == GetDlgItem(IDC_LIST_CONTENT))
  {
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkColor(RGB(0, 255, 0));
//MessageBox("Color");
  }

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

}


思路:在控件显示之前,每一个控件会向父对话框发送一个WM_CTLCOLOR消息,这个消息缺省处理函数CWnd::OnCtlColor返回一个HBRUSH类型的句柄,这样,就可以设置前景和背景文本颜色,并为控件或者对话框的非文本区域选定一个刷子。 

    实现: 

    ① 先创建一个基于对话框的工程,命名为test,然后在对话框上加入一个ListBox控件。 

    ② 在testDlg.h中加入一个成员变量:HBRUSH m_hbrush; 

    ③ 在OnInitDialog()中,加入m_hbrush=CreateSolidBrush(RGB(0,0,0);此处设置的RGB值可以改变ListBox的背景色。为了观看ListBox中字的颜色变化,我们给ListBox加入几个字:利用Class Wizard给ListBox加入一个Control类型的成员变量m_ctrlListBox,然后在OnInitDialog()加入如下所示的代码: 

        m_ctrlListBox.AddString("第一行");
        m_ctrlListBox.AddString("第二行");

    ④ 点击Class Wizard,给testDlg加入WM_CTLCOLOR事件,单击Edit Code按钮,然后把改函数的内容替换为如下代码: 

if(nCtlColor== CTLCOLOR_LISTBOX)
{
   pDC->SetBkMode(TRANSPARENT);
                //此处设置字体的颜色
   pDC->SetTextColor(RGB(255,255,255));

   return m_hbrush;
}
else
   return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值