void MyFrame::OnPaint()
{
CPaintDC dc(this);
RECT rect;
GetClientRect(&rect);
 
for(i=0;i<count;i++)
{
SelectObject (dc,CreateSolidBrush(RGB(a[i][0],a[i][1],a[i][2])));
dc.Ellipse(&rect1[i]);
}
}当OnPaint()到几百次后画出的圆,没有了颜色。是什么原因,怎么解决。等答案。谢谢了。

解决方案 »

  1.   


    是RGB三原色的数值。。是随即产生的1-255数字。
      

  2.   

    会不会是gdi泄露的问题?将对象声明出来,用完delete再试
      

  3.   

    For i = 0 To Count - 1
        Brush = CreateSolidBrush(RGB(a(i)(0), a(i)(1), a(i)(2))) ‘创建刷子
        OldBrush = SelectObject(dc, Brush)    ’将该刷子选入DC中,并保留之前的刷子
        dc.Ellipse Rect1(i)                   '绘制图形
        SelectObject dc, OldBrush             '恢复之前的刷子
        DeleteObject Brush                    ‘删除我们创建的刷子,释放资源
    Next
        不熟悉VC的语法,用VB和VC的结合体写的
      

  4.   

    是GDI资源泄露了!
    for(i=0;i<count;i++)
    {
    SelectObject (dc,CreateSolidBrush(RGB(a[i][0],a[i][1],a[i][2])));
    dc.Ellipse(&rect1[i]); 
    }CreateSolidBrush创建后,没有删除for(i=0;i<count;i++)
    {
    HBRUSH brush = CreateSolidBrush(RGB(a[i][0],a[i][1],a[i][2]));
    HBRUSH oldbush = SelectObject (dc,brush);
    dc.Ellipse(&rect1[i]);
    SelectObject (dc,oldbush );
    DeleteObject(brush);
    }