设置不同线宽、颜色后,画2个椭圆,窗口大小改变后,怎么使先前画的图颜色不变显示出来?
在OnLButtonUp(UINT nFlags, CPoint point) 中将画的图保存起来:
CGraphic *pGraphic=new CGraphic(m_nDrawType,m_ptOrigin,point,m_clr);
m_ptrArray.Add(pGraphic);在OnDraw(CDC* pDC)中重画,窗口改变后,两个椭圆都变成了最后设置的颜色,怎么解决啊?请教了

解决方案 »

  1.   

    ondraw()中重画
    CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    pDC->SelectObject(pBrush);CPen pen(m_nLineStyle,m_nLineWidth,m_redrawClr);
        pDC->SelectObject(&pen);pDC->Ellipse(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
       ((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
      

  2.   

    CPen pen(m_nLineStyle,m_nLineWidth,m_redrawClr);
    你这里使用了当前的线型和颜色等参数,自然按照当前的参数进行绘制了。
    要保留之前的参数,那么你除了要在鼠标事件中记录点坐标外,这些参数你也要保留才行啊。
      

  3.   

    m_clr  就是啊,我QQ:964144671  请加我
      

  4.   

    问题是,你在OnDraw中没有使用m_clr,而是使用m_redrawClr啊。存储了不用,和不存储有啥区别。
      

  5.   

    写错了,你在OnDraw中是m_clr,问题是我用一个颜色画个椭圆,再换一种颜色画另一个椭圆,窗口大小变了之后,俩个椭圆的颜色都变成了最后那个椭圆的颜色
      

  6.   

    void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
        CClientDC dc(this); //画笔
        CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
        dc.SelectObject(&pen); //透明画刷
    CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //画刷
    CBrush brush(HS_DIAGCROSS,RGB(255,1,1));// dc.SelectObject(&brush);
    dc.SelectObject(pBrush); switch(m_nDrawType)
    {
    case 1:
    dc.SetPixel(point,m_clr);
    break;
    case 2:
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    break;
    case 3:
    dc.Rectangle(CRect(m_ptOrigin,point));
    break;
    case 4:
    dc.Ellipse(CRect(m_ptOrigin,point));
    break;
    }

    CGraphic *pGraphic=new CGraphic(m_nDrawType,m_ptOrigin,point,m_clr);
    m_ptrArray.Add(pGraphic);

    CView::OnLButtonUp(nFlags, point);
    }void CTestView::OnDraw(CDC* pDC)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here    CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    pDC->SelectObject(pBrush); CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
        pDC->SelectObject(&pen); for (int i=0;i<m_ptrArray.GetSize();i++)
    {
    switch(((CGraphic*)m_ptrArray.GetAt(i))->m_nDrawType)
    {
    case 1:
    pDC->SetPixel(((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd,m_clr);
    break;
    case 2:
    pDC->MoveTo(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin);
    pDC->LineTo(((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd);
    break;
    case 3:
    pDC->Rectangle(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
    ((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
    break;
    case 4:
    pDC->Ellipse(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
    ((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
    break;
    } }}
      

  7.   

    CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
    你仔细看看吧,你OnDraw时固定使用了这个m_clr。这个m_clr就是最后一次产生的颜色。而你每个图形记录的颜色在你的CGraphic类中,你并没有使用啊。
      

  8.   

    请问怎么样把记录在CGraphic类中的颜色从新选在画笔中?
      

  9.   


    for (int i=0;i<m_ptrArray.GetSize();i++)
    {
        CGraphic *pGraphic = m_ptrArray.GetAt(i);
        CPen pen(m_nLineStyle,m_nLineWidth,pGraphic->m_clr);
        pDC->SelectObject(&pen);
     
        switch(pGraphic->m_nDrawType)
    ......