CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问应该如何改变动态建立的静态控件和编辑控件的背景颜色和字体颜色

楼主lele1013()2006-03-01 11:53:01 在 VC/MFC / 基础类 提问

请问应该如何改变动态建立的静态控件和编辑控件的背景颜色和字体颜色,谢谢 问题点数:20、回复次数:19Top

1 楼ydfivy(我就是一送外卖的)回复于 2006-03-01 11:57:08 得分 0

在OnCtrlColor消息处理函数中加处理就可以了.Top

2 楼lele1013()回复于 2006-03-01 13:35:32 得分 0

怎么处理?Top

3 楼nuaawenlin(飘人)回复于 2006-03-01 14:07:54 得分 0

if(nCtlXXX   ==   CTLCOLOR_EDIT)   ////记不清楚了,查msdn  
      PDC->SetBkColor()Top

4 楼lele1013()回复于 2006-03-01 15:23:00 得分 0

这种方法不行的,我试过了Top

5 楼lele1013()回复于 2006-03-02 10:56:54 得分 0

大家进来帮帮忙啊Top

6 楼Snow_Ice11111(雪上加冰)回复于 2006-03-02 12:54:08 得分 15

改变CStatic控件的前景、背景色:http://community.csdn.net/Expert/topic/4507/4507710.xml?temp=.1524164  
  处理WM_CTLCOLOR消息:  
  ---------------------------------------------------------------------  
  HBRUSH   CQQDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr;  
   
  //   TODO:   Change   any   attributes   of   the   DC   here  
  if(CTLCOLOR_STATIC   ==   nCtlColor)  
  //if(CTLCOLOR_STATIC   ==   nCtlColor   &&   pWnd->GetDlgCtrlID()==IDC_TOOL)     //改成这样就只对IDC_TOOL这一个静态文本控件起作用了  
  {  
  pDC->SetBkColor(RGB(255,255,255));                   //背景色为白  
  pDC->SetTextColor(RGB(0,0,0));                           //前景色为黑  
  hbr   =   CreateSolidBrush(RGB(255,255,255));     //其它区域也为白  
  }  
  else  
  hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  //   TODO:   Return   a   different   brush   if   the   default   is   not   desired  
  return   hbr;  
  }  
  ----------------------------------------------------------------------  
  再加一个判断if   (pWnd->GetDlgCtrlID()==IDC_....)就可以指定是改变哪个的颜色了,其它控件的颜色的改变方法和这个大同小异。Top

7 楼orbit(走了走了)回复于 2006-03-02 13:27:35 得分 0

http://blog.csdn.net/orbit  
  有个改变对话框和控件颜色的文章Top

8 楼lele1013()回复于 2006-03-03 10:03:35 得分 0

如果我动态建立了19个静态控件,我想使其中的18个改变颜色,还有一个不改变颜色,应该如何做呢Top

9 楼Atomictry(天影)回复于 2006-03-03 10:25:19 得分 5

if(CTLCOLOR_STATIC   ==   nCtlColor)  
  {  
            if   (pWnd->GetDlgCtrlID()   !=   ID_不想改变颜色的)  
            {  
                        pDC->SetBkColor(RGB(255,255,255));                   //背景色为白  
  pDC->SetTextColor(RGB(0,0,0));                           //前景色为黑  
  hbr   =   CreateSolidBrush(RGB(255,255,255));     //其它区域也为  
            }  
  }  
   
  //   建议,最好还是从一个CStatic类重载.Top

10 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 10:50:34 得分 0

那就在Resouse.h中自己调整这个19个动态创建控件的资源号,让它们连续,并且你不想改的控件资源号放最后,如:1401-1419,然后把上面代码:  
  if(CTLCOLOR_STATIC   ==   nCtlColor   &&   pWnd->GetDlgCtrlID()==IDC_TOOL)  
  改成:  
  if(CTLCOLOR_STATIC   ==   nCtlColor   &&   (pWnd->GetDlgCtrlID()>=1401   &&   pWnd->GetDlgCtrlID()<=1418))                
   
  Top

11 楼lele1013()回复于 2006-03-03 11:39:08 得分 0

如果想同时改变动态建立的静态控件和编辑控件的背景颜色和字体颜色,应该如何做呢Top

12 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 13:57:21 得分 0

看来楼主没有弄清楚Create方法参数的意义,它的最后一个参数表示控件的资源或ID,如:  
  CStatic::Create(.....,1401);                                       //这种是直接在创建时指定资源号  
  CStatic::Create(.....,IDC_STATIC1);     //这种是通过Resourse.h中自己指定资源号  
  前面一种方法容易和现有的控件资源号起冲突,故不常用。后面一种方法的话就和界面中事先放置一个控件的情况没什么两样了,不过要先#include   "resourse.h"而已。所以,我上面给出的代码对动态创建或事先放置控件都适用。Top

13 楼lele1013()回复于 2006-03-03 15:18:51 得分 0

谢谢,但是我想同时改变两种控件的颜色Top

14 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 20:03:47 得分 0

那就删去控件类型的判断(即CTLCOLOR_STATIC   ==   nCtlColor   ),改成这样:  
  if(pWnd->GetDlgCtrlID()>=1401   &&   pWnd->GetDlgCtrlID()<=1418)  
  {  
  ......  
  }  
  这样系统改的时候只按资源号处理,不管它什么控件类型了,只要你的控件的资源号在这个范围内即行。Top

15 楼lele1013()回复于 2006-03-06 08:57:50 得分 0

谢谢,但是我想两种控件改变的背景和字体颜色不同,应该怎样改变呢Top

16 楼Snow_Ice11111(雪上加冰)回复于 2006-03-06 12:56:27 得分 0

HBRUSH   CQQDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr;  
   
  //   TODO:   Change   any   attributes   of   the   DC   here  
  if(CTLCOLOR_STATIC   ==   nCtlColor   &&   (pWnd->GetDlgCtrlID()>=1401   &&   pWnd->GetDlgCtrlID()<=1418))  
  {  
  pDC->SetBkColor(RGB(255,255,255));                   //背景色为白  
  pDC->SetTextColor(RGB(0,0,0));                           //前景色为黑  
  hbr   =   CreateSolidBrush(RGB(255,255,255));     //其它区域也为白  
  }  
  if(CTLCOLOR_EDIT   ==   nCtlColor   &&   (pWnd->GetDlgCtrlID()>=1420   &&   pWnd->GetDlgCtrlID()<=1425))  
  {  
  pDC->SetBkColor(RGB(255,0,0));                   //背景色为红  
  pDC->SetTextColor(RGB(0,255,0));                           //前景色为绿  
  hbr   =   CreateSolidBrush(RGB(255,0,0));     //其它区域也为红  
  }  
  hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  //   TODO:   Return   a   different   brush   if   the   default   is   not   desired  
  return   hbr;  
  }  
  Top

17 楼Snow_Ice11111(雪上加冰)回复于 2006-03-06 13:02:51 得分 0

少了两行,补:  
  HBRUSH   CQQDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr;  
   
  //   TODO:   Change   any   attributes   of   the   DC   here  
  if(CTLCOLOR_STATIC   ==   nCtlColor   &&   (pWnd->GetDlgCtrlID()>=1401   &&   pWnd->GetDlgCtrlID()<=1418))   //静态文本控件且资源号在1401到1418之间的话  
  {  
  pDC->SetBkColor(RGB(255,255,255));                   //背景色为白  
  pDC->SetTextColor(RGB(0,0,0));                           //前景色为黑  
  hbr   =   CreateSolidBrush(RGB(255,255,255));     //其它区域也为白  
  return   hbr;  
  }  
  if(CTLCOLOR_EDIT   ==   nCtlColor   &&   (pWnd->GetDlgCtrlID()>=1420   &&   pWnd->GetDlgCtrlID()<=1425))     //编辑框控件且资源号在1420到1425之间的话  
  {  
  pDC->SetBkColor(RGB(255,0,0));                   //背景色为红  
  pDC->SetTextColor(RGB(0,255,0));                           //前景色为绿  
  hbr   =   CreateSolidBrush(RGB(255,0,0));     //其它区域也为红  
  return   hbr;  
  }  
  hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  //   TODO:   Return   a   different   brush   if   the   default   is   not   desired  
  return   hbr;  
  }Top

18 楼wjj888888(不赖)回复于 2006-03-06 14:29:50 得分 0

................................Top

19 楼lele1013()回复于 2006-03-06 16:30:59 得分 0

谢谢大家的帮忙Top

相关问题

  • 如何简单的改变静态控件的背景色和字体颜色。
  • BCB控件栏上的字体颜色????
  • Listview控件字体改变颜色
  • 怎么样可以改变静态控件显示的字体
  • 如何改变TEdit,TComboBox控件Enabled:=False时字体颜色(不用控件)
  • 改变静态控件字体大小,但不要说我老话重提!
  • 如何改变静态文本框和按钮控件的字体?
  • 请问用win32如何改变控件(如静态文本)的字体大小
  • 如何更新对话框内控件的字体颜色?
  • 请教控件字体颜色的设置问题

关键词

  • .net
  • 控件
  • 区域
  • idc
  • hbr
  • getdlgctrlid
  • nctlcolor
  • pwnd
  • ctlcolor
  • rgb

得分解答快速导航

  • 帖主:lele1013
  • Snow_Ice11111
  • Atomictry

相关链接

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

广告也精彩

反馈

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