我开始输入数据,然后点击开始,便在绘图区域绘图。我这有两组数据,想同时在绘图区域画两种不同颜色的圆。创建一个画刷没问题,可是当我创建两个画刷时编译没错,但运行时出错了。请问各位应该怎么解决?代码如下:
UpdateData(true); CDC *p=this->GetDC();
p->SetMapMode(MM_LOENGLISH);
p->SetViewportOrg(50,300); CBrush BrushAqua1(RGB(200,100,200));
p->SelectObject(BrushAqua1);
CString str1;
    str1.Format("%d,%d",m_Edit1,m_Edit2);
p->Ellipse(m_Edit1-10,m_Edit2+10,m_Edit1+10,m_Edit2-10);
p->TextOut(m_Edit1+15,m_Edit2+8,str1);
p->DeleteDC();
BrushAqua1.DeleteObject(); CBrush BrushAqua2(RGB(250,50,100));
p->SelectObject(BrushAqua2);
CString str2;
    str2.Format("%d,%d",m_Edit3,m_Edit4);
p->Ellipse(m_Edit3-10,m_Edit4+10,m_Edit3+10,m_Edit4-10);
p->TextOut(m_Edit3+15,m_Edit4+8,str2);
p->DeleteDC();
BrushAqua2.DeleteObject();请大家尽量帮帮忙吧。我初学,有很多地方需要指点,不胜感激啊!还有程序中需要改进的地方也希望多加指点

解决方案 »

  1.   

    1.每次SelectObject时, CBrush* pOldBrush = p->SelectObject(&br1);
      用完之后,p->SelectObject(pOldBrush);p>DeleteDC();最后调用一次就可以了。
      

  2.   

    UpdateData(true);CDC *p=this->GetDC();
    p->SetMapMode(MM_LOENGLISH);
    p->SetViewportOrg(50,300);CBrush BrushAqua1(RGB(200,100,200));
    CBrush* pOld = p->SelectObject(&BrushAqua1);
    CString str1;
      str1.Format("%d,%d",m_Edit1,m_Edit2);
    p->Ellipse(m_Edit1-10,m_Edit2+10,m_Edit1+10,m_Edit2-10);
    p->TextOut(m_Edit1+15,m_Edit2+8,str1);
    p->DeleteDC();
    BrushAqua1.DeleteObject();
    p->SelectObject(pOld);CBrush BrushAqua2(RGB(250,50,100));
    pOld = p->SelectObject(&BrushAqua2);
    CString str2;
      str2.Format("%d,%d",m_Edit3,m_Edit4);
    p->Ellipse(m_Edit3-10,m_Edit4+10,m_Edit3+10,m_Edit4-10);
    p->TextOut(m_Edit3+15,m_Edit4+8,str2);
    p->SelectObject(pOld);
    p->DeleteDC();
    BrushAqua2.DeleteObject();
      

  3.   

    首先你的p->DeleteDC();这一行代码有问题,GetDC()得到CDC以后,在释放时用ReleaseDC()就行了,不要用DeleteDC(),而且应该放在程序最后释放。 
    再一个BrushAqua1.DeleteObject();也存在潜在的问题,你的CDC中已经选中了这个对象,在没有恢复先前的对象之前最好不要这样操作,程序就有潜在的bug,一旦如果在没有选入其他画涮的情况下再绘制图元就会出错。