怎样修改CListBox的背景色

 我来答
荒诞的热水02s
2016-09-18 · 知道合伙人软件行家
荒诞的热水02s
知道合伙人软件行家
采纳数:752 获赞数:1268
参与过多个软件的研发和测试过程 具有出色的研发技巧及分析能力,对技术、行业的发展有敏锐的判断力

向TA提问 私信TA
展开全部
需要改变控件的颜色,可以通过两种方法,其一,可以在父类中指定控件的颜色。其二,利用消息反射在控件类中指定颜色。

  当控件需要重新着色时,工作框调用父窗口(通常是对话框)的cwnd::onctlcolor,可以在父窗口类中重置该函数并指定新的绘画属性。

  如下所示,将对话框中的编辑控件的文本颜色改为蓝色。

  hbrush cmydialog::onctlcolor(cdc* pdc,cwnd* pwnd,uint nctlcolor)

  {

  hbrush hbr=cdialog::onctlcolor(pdc,pwnd,nctlcolor);

  //draw blue text for edit controls

  if(nctlcolor==cltcolor—edit)

  pdc->settextcolor(rgb(0,0,255));

  return hbr;

  }

  由于每个窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法,控件处理该消息并指定绘画属性更合理一些。

  消息反射允许用户这样做,通知消息发给父窗口,若父窗口没有处理则发给控件,创建一个定制彩色列表框控件,其步骤如下。

  首先用classwizard创建一个clistbox的派生类,并添加如下的成员变量。

  class cmylistbox::public clistbox

  {

  ...

  private :

  colorref m—clrfore; //foreground color

  colorref m—clrback; //background color

  cbrush m—brush ; //background brush

  ...

  };

  其二,在类的构造函数中初始化数据成员。

  cmylistbox::cmylistbox()

  {

  //initialize data members

  m—clrfore=rgb(255,0,0); //red text

  m—clrback=rgb(0,255,0);

  //green background

  m—brush.createsolidbrush(m—clrback);

  }

  第三,使用classwizard处理反射消息(=wm—ctlcolor)并指定新的绘画属性。

  hbrush cmylistbox::ctlcolor(cdc* pdc,uint nctlcolor)

  {

  pdc->settextcolor(m—clrfore);

  pdc->setbkcolor(m—clrback);

  return (hbrush)m—brush.getsafehandle();

  }

  现在控件可以重画自身,与父窗口无关。

  最后,在父窗口头文件中包含派生的cmylistbox类,然后用classwizard 定义列表框控件的成员变量即可。其成员变量的类性为cmylistbox。 这样我们就完成了控件的着色。
博思aippt
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生... 点击进入详情页
本回答由博思aippt提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式