CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

改变背景和字体颜色

楼主chabuduo123()2005-01-25 12:50:46 在 VC/MFC / 界面 提问

我在一个dialogbar上放了两个listbox,dialogbar停靠在顶部,现在我想改变这两个listbox的背景色和里面的字体色,该怎么做?  
  我试着获得了两个listbox得指针,然后调用setbkcolor改变背景色,但不行!  
  请高手指教! 问题点数:20、回复次数:24Top

1 楼tonyswe(tong)回复于 2005-01-25 13:08:07 得分 0

写个继承类  
  ,使用ClassWizard   处理反射的WM_CTLCOLOR(=WM_CTLCOLOR)消息并指定新的绘画  
  属性。  
  HBRUSH   CMyListBox   :   :   CtlColor   (CDC*   pDC,   UINT   nCtlColor   )  
  {  
  pDC—>SetTextColor   (m_clrFore);  
  pDC—>SetBkColor   (m_clrBack);  
  return   (HBRUSH)   m_brush.GetSafeHandle   ()  
  }Top

2 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2005-01-25 13:42:35 得分 0

获得了两个listbox得指针后,CDC   dc(pList);  
  dc.SetBkColor(..).不行?我不信。Top

3 楼chabuduo123()回复于 2005-01-25 14:48:25 得分 0

我是这样做的,不行!  
  希望高手不吝赐教!Top

4 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 15:24:04 得分 0

完全可以的吗?我试过了.  
  HBRUSH   CListDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
   
  if(::GetDlgItem(this->m_hWnd,IDC_LIST1)==pWnd->m_hWnd)  
  {  
  pDC->SetTextColor(RGB(0,145,0));  
  pDC->SetBkColor(RGB(121,0,0));  
  }  
   
  return   hbr;  
  }  
  Top

5 楼chabuduo123()回复于 2005-01-25 16:45:17 得分 0

可是我用的不是dlg,我用的是SDI,请问如何对SDI得dialogbar重载OnCtlColorTop

6 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 17:31:11 得分 0

tonyswe(tong)   (   )应该也可以的Top

7 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 17:45:22 得分 0

OnCtlColor   will   not   be   called   for   the   list   box   of   a   drop-down   combo   box   because   the   drop-down   list   box   is   actually   a   child   of   the   combo   box   and   not   a   child   of   the   window.   To   change   the   color   of   the   drop-down   list   box,   create   a   CComboBox   with   an   override   of   OnCtlColor   that   checks   for   CTLCOLOR_LISTBOX   in   the   nCtlColor   parameter.   In   this   handler,   the   SetBkColor   member   function   must   be   used   to   set   the   background   color   for   the   text.  
   
  我try   itTop

8 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:00:06 得分 0

HBRUSH   Mylist::CtlColor(CDC*   pDC,   UINT   nCtlColor)    
  {  
  pDC->SetTextColor   (RGB(130,0,0));  
                    pDC->SetBkColor   (RGB(0,130,0));  
   
  return   CreateSolidBrush(RGB(0,0,130));  
  }  
  可以的.  
  (上面一段英文贴错了,不好意思)Top

9 楼chabuduo123()回复于 2005-01-25 18:10:42 得分 0

能说的详细一点吗?Top

10 楼lengfeng281(冷风)回复于 2005-01-25 18:48:12 得分 0

可是我用的不是dlg,我用的是SDI,请问如何对SDI得dialogbar重载OnCtlColor  
  关注Top

11 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:50:39 得分 0

子类化listbox,使用ClassWizard   处理反射的WM_CTLCOLOR(=WM_CTLCOLOR)消息  
  此消息对应函数如上我写的.Top

12 楼chabuduo123()回复于 2005-01-25 18:52:46 得分 0

不好意思,怎样子类化?Top

13 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:56:13 得分 0

就是继承啊!使用ClassWizard,new   class---输入你的类名,下面选择基类(就是CListBox)  
  Top

14 楼chabuduo123()回复于 2005-01-25 19:05:47 得分 0

我这样做了,是这样:  
  HBRUSH   CMylist::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
                    pDC->SetTextColor   (RGB(130,0,0));  
                    pDC->SetBkColor   (RGB(0,130,0));  
   
  return   CreateSolidBrush(RGB(0,0,130));  
   
  }  
  我这个函数,怎么多一个CWnd*   pWnd参数,而且实现不了预计的功能Top

15 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 19:40:18 得分 0

有两个WM_CTLCOLOR,使用那个有等号的(=WM_CTLCOLOR)Top

16 楼chabuduo123()回复于 2005-01-25 20:14:01 得分 0

我重载了=WM_CTLCOLOR,按照你说的方法还是不行呀?!Top

17 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 21:00:39 得分 0

fanqingyufan@163.com  
  我看看,能解决我会回复你明天,不能的话,只能说对不起了.Top

18 楼chabuduo123()回复于 2005-01-25 21:19:44 得分 0

我重载了=WM_CTLCOLOR  
  HBRUSH   Mylist::CtlColor(CDC*   pDC,   UINT   nCtlColor)    
  {  
  pDC->SetTextColor   (RGB(130,0,0));  
  *                   pDC->SetBkColor   (RGB(0,130,0));  
   
  return   CreateSolidBrush(RGB(0,0,130));  
  }  
  在*号处设置间断,调试,发现窗口生成时,根本就没有经过这里!Top

19 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-26 08:02:57 得分 0

没受到收到邮件!  
  可能你根本没使用你的类.  
  你的控件变量要用Mylist类.而不是CListBox类Top

20 楼poplau(和你聊聊软件开发)回复于 2005-01-26 08:57:08 得分 0

关于控件的风格,最好用自绘的方式重载DrawItem函数Top

21 楼chabuduo123()回复于 2005-01-26 11:33:41 得分 0

我是在cdialogbar上用了两个clistbox,好像无法给他们映射变量?Top

22 楼chabuduo123()回复于 2005-01-26 12:33:58 得分 0

顶,请高手提供方法!Top

23 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-26 17:56:11 得分 20

发了Top

24 楼chabuduo123()回复于 2005-01-26 18:05:13 得分 0

谢谢!Top

相关问题

  • 请问如何改变EDIT背景字体颜色
  • 怎样改变RadioBox和CheckBox的背景和字体颜色
  • 如何改变button中的背景色和字体颜色?
  • 如何改变RICH EDIT控件的背景颜色和字体颜色?
  • 改变字体颜色
  • 改变字体颜色
  • 如何改变list control行的背景色和行字体的颜色
  • 如何简单的改变静态控件的背景色和字体颜色。
  • 如何动态改变ListView中的item颜色(字体颜色和背景颜色)?
  • 在VC中如何改变对话框上ListBox控件的背景色、字体和字体颜色?

关键词

  • pdc
  • ctlcolor
  • setbkcolor
  • onctlcolor
  • settextcolor
  • dialogbar
  • hbrush
  • rgb
  • cdc
  • 背景

得分解答快速导航

  • 帖主:chabuduo123
  • fanqing

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo