请看这一段代码!
我想利用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




