CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请看这一段代码!

楼主djhdu(小火花)2001-10-09 19:30:23 在 VC/MFC / 基础类 提问

我想利用CBrush和CDC的Rectangle画一个颜色逐步渐进的矩形条,请看我写的代码!  
  int   i;  
  CPaintDC   dc(this);  
   
  CBrush   m_DrawBrush;  
  CBrush*   m_OldBrush;  
  CRect   lRect,lDrawRect;  
  GetClientRect(lRect);  
  int   DrawCount=50;  
  int   liHorz=lRect.Width()/DrawCount;  
                    lDrawRect.left=lRect.left;  
  lDrawRect.top=lRect.top;  
  lDrawRect.bottom=lRect.bottom;  
  lDrawRect.right=lRect.left+liHorz;  
  for(i=0;i<DrawCount;i++)  
  {  
  m_DrawBrush.CreateSolidBrush(RGB(255,255,i*2));  
  m_OldBrush=dc.SelectObject(&m_DrawBrush);  
  dc.Rectangle(lDrawRect);  
  dc.SelectObject(m_OldBrush);  
  lDrawRect.right=lDrawRect.right+liHorz;  
  lDrawRect.left=lDrawRect.left+liHorz;  
  }  
  只能循环一次,也就是说m_DrawBrush.CreateSolidBrush(RGB(255,255,i*2));这一句第二次就会出现问题,好像这个画刷对象只能初始化一次,是不是用什么语句把这个画刷对象释放一次或者有什么代替的方法完成这个功能呢?帮帮我吧! 问题点数:50、回复次数:13Top

1 楼djhdu(小火花)回复于 2001-10-09 19:40:09 得分 0

大虾们帮帮忙了!Top

2 楼Julienjut(秋水)回复于 2001-10-09 20:08:48 得分 10

m_DrawBrush.DeleteObject();Top

3 楼prog_st(st)回复于 2001-10-09 20:15:22 得分 5

m_DrawBrush本身含有有效值时,不可以再CreateSolidBrush,在Debug下会激活一个异常,在release版本中,则可能满足你的要求!Top

4 楼djhdu(小火花)回复于 2001-10-09 20:18:24 得分 0

那我是不是一定要删除,才能在改变颜色呢?Top

5 楼djhdu(小火花)回复于 2001-10-09 20:44:01 得分 0

兄弟们,我用了deleteObject()以后,可以运行,但是颜色一直都不变,这是为什么呢?Top

6 楼kingzai(stevenzhu)回复于 2001-10-09 20:47:17 得分 15

当然,画刷对象一般CreateSolidBrush一次就要DeleteObject一次,这样才能重新被创建,要不然你创建多个对象吧,也能解决这个问题的Top

7 楼djhdu(小火花)回复于 2001-10-09 21:23:44 得分 0

说的对,我觉得也是这样,但是你看这是我修改以后的程序,为什么,每次颜色好像都没有改变呢,只是第一次的颜色,但是我在调试的时候我发现颜色的RGB值改变了,这是为什么,真把我弄迷了,哪位同志帮忙测一下这段代码!  
    CRect   tempRect;          
          CBrush   tempBrush;  
  COLORREF   useColor;  
                  CBrush*   oldBrush;  
  int   i;  
                   
  tempRect.top=rcTemp.top;  
  tempRect.bottom=rcTemp.bottom;                
  tempRect.left=rcTemp.left;  
  for(i=0;i<(rcTemp.Width()/1);i++)  
  {  
  tempRect.right=tempRect.right+1;  
  useColor=RGB(255-i,i*2,20+i);  
  tempBrush.CreateSolidBrush(useColor);  
  oldBrush=dc.SelectObject(&tempBrush);  
          dc.Rectangle(tempRect);  
  dc.SelectObject(oldBrush);  
  tempBrush.DeleteObject();  
  tempRect.left=tempRect.left+1;  
  }Top

8 楼zsuxgh(Crane)回复于 2001-10-09 21:35:53 得分 20

你把m_DrawBrush   的定义改一下  
  改为   CBrush*   m_DrawBrush;  
  然后在creatsolidbrush前面加一条语句  
  m_DrawBrush=new   CBrush;    
  在循环结束时再加一条语句  
  delete   m_DrawBrush;  
  如果还是看不见变化,那是因为效果不明显;你再仔细看看就知道了。  
  Top

9 楼kingzai(stevenzhu)回复于 2001-10-09 21:40:19 得分 0

这样改可能有用,但是记得还要m_DrawBrush-》DeleteObject();  
  Top

10 楼zsuxgh(Crane)回复于 2001-10-09 21:40:41 得分 0

    我修改时是看的你的第一个版本,我帮你调试过了、如果不对  
  我敢肯定那是因为效果不明显的问题  
  你把变化在大一些,肯定就能看到了。你再试试!Top

11 楼djhdu(小火花)回复于 2001-10-09 21:52:18 得分 0

好的,我试一下!Top

12 楼kingzai(stevenzhu)回复于 2001-10-09 22:07:34 得分 0

成功了记得给我一点分呀Top

13 楼djhdu(小火花)回复于 2001-10-09 22:19:46 得分 0

to   :zsuxgh(华仔):把你修改过的贴出来让我看一下,我发现我的颜色还是没有改!Top

相关问题

  • 请看一段代码
  • 请看这段代码?
  • 请看这段代码!!!!
  • 请看这段代码!
  • 请帮看一段代码!
  • 请看代码!
  • 请看代码!
  • 请大家看看这段代码啊
  • 请大家看看这段代码
  • 请看看这段代码吧!

关键词

  • 代码
  • top
  • ldrawrect
  • lrect
  • drawcount
  • lihorz
  • cbrush
  • 请看
  • bottom
  • left

得分解答快速导航

  • 帖主:djhdu
  • Julienjut
  • prog_st
  • kingzai
  • zsuxgh

相关链接

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

广告也精彩

反馈

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