为什么Rectangle换成FillRect就不能闪烁了

时间:2022-06-10 23:41:22
for(j=0;j<10;j++){
if(j%2==0)
dc.FillRect(&CRect(0,0,100100);
else
dc.FillRect(&CRect(0,0,100100);
Sleep(100);
}

9 个解决方案

#1


代码有点错
反正就这个意思

#2


for(j=0;j<10;j++){
if(j%2==0)
dc.FillSolidRect(&CRect(0,0,100100),RGB(0,0,0));
else
dc.FillSolidRect(&CRect(0,0,100100),RGB(255,255,255));
Sleep(100);
}

#3


楼主什么意思?

用fillrect函数的时候,dc中必须要有位图被selectobject/

#4


fillrect是用画刷画矩形,rectangle是画矩形框然后用刷子填充,效率低一点。

#5


闪烁效果
用Rectangle代替FillRect,然后选进不同的刷子就可以
如上用FillRect却不行,但是在Sleep(100)前加MessageBox("")又会看到颜色交替,不知道为什么,FillRect什么时候刷屏啊

#6


CRect rect;
rect.left = 0;
rect.top = 0;
rect.bottom = 100;
rect.right = 100;
CBrush br;
for(int i = 0;i<10; ++i)
{
br.CreateSolidBrush(RGB(i*20,i*20,i*20));
pDC->FillRect(&rect,&br);
Sleep(1000);
// AfxMessageBox("aa");
br.DeleteObject();
}
怎么不能呢??
用Sleep和AfxMessageBox都可以。
这段代码在ondraw中。

#7


可能是你的sleep时间太短了。

#8


我已经糊涂了
换成你的代码后结果很奇怪
第一次运行到时效果很好,看样子颜色有10层
从第二次开始,明显只有2层了,我把Sleep时间改到10,也是这样,估计不是时间太短的问题
怎么也说不通啊

#9


把MessageBox加上又可以,唉

#1


代码有点错
反正就这个意思

#2


for(j=0;j<10;j++){
if(j%2==0)
dc.FillSolidRect(&CRect(0,0,100100),RGB(0,0,0));
else
dc.FillSolidRect(&CRect(0,0,100100),RGB(255,255,255));
Sleep(100);
}

#3


楼主什么意思?

用fillrect函数的时候,dc中必须要有位图被selectobject/

#4


fillrect是用画刷画矩形,rectangle是画矩形框然后用刷子填充,效率低一点。

#5


闪烁效果
用Rectangle代替FillRect,然后选进不同的刷子就可以
如上用FillRect却不行,但是在Sleep(100)前加MessageBox("")又会看到颜色交替,不知道为什么,FillRect什么时候刷屏啊

#6


CRect rect;
rect.left = 0;
rect.top = 0;
rect.bottom = 100;
rect.right = 100;
CBrush br;
for(int i = 0;i<10; ++i)
{
br.CreateSolidBrush(RGB(i*20,i*20,i*20));
pDC->FillRect(&rect,&br);
Sleep(1000);
// AfxMessageBox("aa");
br.DeleteObject();
}
怎么不能呢??
用Sleep和AfxMessageBox都可以。
这段代码在ondraw中。

#7


可能是你的sleep时间太短了。

#8


我已经糊涂了
换成你的代码后结果很奇怪
第一次运行到时效果很好,看样子颜色有10层
从第二次开始,明显只有2层了,我把Sleep时间改到10,也是这样,估计不是时间太短的问题
怎么也说不通啊

#9


把MessageBox加上又可以,唉