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

苦思几日不知所措,渴求大侠明以教我!!!

楼主sunjie(Monkey)2000-07-28 12:23:00 在 VC/MFC / 基础类 提问

    如果从CDialog派生的对话框上有一个Static控件,我通过响应WM_CTLCOLOR可改变Static的颜色(前景,背景)。  
      当我用ATL   Com   AppWizard生成一个Composite   Control型的ActiveX控件时,系统会产生一个对话框资源,我在该对话框上放了一个Static,但不知如何改变Static的颜色。我曾给该对话框生成了一个类(从CDialog),但其WM_CTLCOLOR等的处理函数并不被执行。  
         
  问题点数:50、回复次数:1Top

1 楼guanxuegong()回复于 2000-07-28 14:06:00 得分 50

有两种方法。其一,可以在父类中指定控件的颜色,或者利用mfc4.0新的消息反射在控件类中指定颜色。   当控件需要重新着色时,工作框调用父窗口(通常是对话框)的cwnd:   :   oncrtlcolor,可以在父窗口类中重置该函数并指定控件的新的绘画属性。例如,下述代码将对话中的所有编辑控件文本颜色改为红色:  
  hbrush   caboutdig   :   :   onctlcolor   (cdc   *   pdcm   ,   cwnd   *   pwnd   ,   uint   nctlcolor)  
   
  {  
    hbrush   hbr   =   cdialog   :   :   onctlcolor   (pdc,   pwnd   ,   nctlcolor   )  
   
    //draw   red   text   for   all   edit   controls   .  
    if   (nctlcolor=   =   ctlcolor_edit   )  
    pdc   —>   settextcolor   (rgb   (255,   0   ,   0   ,   )   )  
   
    return   hbr  
  }  
   
  然而,由于每个父窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法。控件处理该消息并指定绘画属性更合情合理。消息反射允许用户这样做。通知消息首先发送给父窗口,如果父窗口没有处理则发送给控件。创建一个定制彩色列表框控件必须遵循下述步骤。  
   
  首先,使用classwizard   创建一个clistbox   的派生类并为该类添加下述数据成员。  
  class   cmylistbox   publilc   clistbox  
  {  
  …  
  private  
    colorref   m_clrfor   //   foreground   color  
    colorref   m_clrback   //background   color  
    cbrush   m_brush   //background   brush  
  …  
  }  
  其次,在类的构造函数中,初始化数据中。  
  cmylistbox   :   :   cmylistbox   ()  
  {  
    //initialize   data   members   .  
    m_clrfore   =rgb   (255   ,   255   ,   0)   //yellow   text  
    m_clrback=rgb   (0   ,   0   ,   255)   //   blue   background  
    m_brush   .   createsolidbrush   (m   _clrback   )  
  }  
   
  最后,使用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

相关问题

  • 不知所措了,求救
  • 渴求JBuilder环境配置步骤,请高手指教~~
  • DATAGrid的问题,让我不知所措。
  • 一个简单且不知所措的问题
  • 初学Java,不知所措,请高手指点!送分100!
  • 查询报错,急,不知所措!谢谢您啦!
  • 想学.net,不知所措,给点意见!
  • 各位师哥师姐,小弟感到很疑惑,对于c++不知所措
  • 对asp.net非常茫然,不知所措?高手指点,来着有分!
  • 我迷失了方向,我失去了自己,我不知所措。

关键词

  • 控件
  • 函数
  • 属性
  • 消息
  • cmylistbox
  • ctlcolor
  • 对话框
  • clrback
  • nctlcolor
  • 父窗口

得分解答快速导航

  • 帖主:sunjie
  • guanxuegong

相关链接

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

广告也精彩

反馈

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