我做了2个按钮,按button1对按钮画边框,再按button2时清空边框,在button2上画,但是好像不行,我另做了一个按钮button3,在button3中调用Invalidate(TRUE); 再按botton2时画button2时就没问题,在线等
void CLinetDlg::OnButton1() 
{ CWnd* pWnd=GetDlgItem(IDC_BUTTON1);
CDC* pDC=pWnd->GetDC();
CPen pen(PS_SOLID,2,RGB(255,0,0));
CPen * pOldPen=pDC->SelectObject(&pen);  
pDC->MoveTo(0,0); 
pDC->LineTo(0,200); 

  pDC->MoveTo(0,200); 
pDC->LineTo(200,200);  pDC->MoveTo(200,200); 
pDC->LineTo(200,0);  pDC->MoveTo(200,0); 
pDC->LineTo(0,0);
pDC->SelectObject(pOldPen); ReleaseDC(pDC);
}void CLinetDlg::OnButton2() 
{ Invalidate(TRUE); CWnd* pWnd1=GetDlgItem(IDC_BUTTON2);
CDC* pDC=pWnd1->GetDC();
CPen pen1(PS_SOLID,2,RGB(255,0,0));
CPen * pOldPen1=pDC->SelectObject(&pen1);   pDC->MoveTo(0,0); 
pDC->LineTo(0,200); 

  pDC->MoveTo(0,200); 
pDC->LineTo(200,200);  pDC->MoveTo(200,200); 
pDC->LineTo(200,0);  pDC->MoveTo(200,0); 
pDC->LineTo(0,0);
pDC->SelectObject(pOldPen1);}

解决方案 »

  1.   

    pen是不是没有删除啊浪费资源啊
    结尾加上:
    pDC->SelectObject(pOldPen);
    pen.DeleteObject();
      

  2.   

    谢谢楼上,可是我在button2里面先调用 Invalidate(TRUE);后面画的东西,一闪,就没了,我把Invalidate(TRUE);单独放在button3里面,先调用,再修改button2代码画,就可以
    void CLinetDlg::OnButton2() 
    {
    CWnd* pWnd1=GetDlgItem(IDC_BUTTON2);
    CDC* pDC=pWnd1->GetDC();
    CPen pen1(PS_SOLID,2,RGB(255,0,0));
    CPen * pOldPen1=pDC->SelectObject(&pen1);   pDC->MoveTo(0,0); 
    pDC->LineTo(0,200); 

      pDC->MoveTo(0,200); 
    pDC->LineTo(200,200);  pDC->MoveTo(200,200); 
    pDC->LineTo(200,0);  pDC->MoveTo(200,0); 
    pDC->LineTo(0,0);
    pDC->SelectObject(pOldPen1); pen1.DeleteObject();
    }void CLinetDlg::OnButton3() 
    {

    Invalidate(TRUE);
    }
      

  3.   

    我做了2个按钮,按button1对按钮画边框,再按button2时清空边框,在button2上画,但是好像不行,我另做了一个按钮button3,在button3中调用Invalidate(TRUE); 再按botton2时画button2时就没问
    被你说得晕糊糊的
      

  4.   

    OnButton2() 改成这样试试void CLinetDlg::OnButton2() 
    { CWnd* pWnd=GetDlgItem(IDC_BUTTON1);
    CDC* pDC=pWnd->GetDC();
    CPen pen(PS_SOLID,2,RGB(255,0,0));
    CPen * pOldPen=pDC->SelectObject(&pen);  
             pDC->SetROP2(R2_NOTXORPEN); 
    pDC->MoveTo(0,0); 
    pDC->LineTo(0,200); 

      pDC->MoveTo(0,200); 
    pDC->LineTo(200,200);  pDC->MoveTo(200,200); 
    pDC->LineTo(200,0);  pDC->MoveTo(200,0); 
    pDC->LineTo(0,0);
    pDC->SelectObject(pOldPen);
    ReleaseDC(pDC);
    CWnd* pWnd1=GetDlgItem(IDC_BUTTON2);
    pDC=pWnd1->GetDC();
    CPen * pOldPen1=pDC->SelectObject(&pen);   pDC->MoveTo(0,0); 
    pDC->LineTo(0,200); 

      pDC->MoveTo(0,200); 
    pDC->LineTo(200,200);  pDC->MoveTo(200,200); 
    pDC->LineTo(200,0);  pDC->MoveTo(200,0); 
    pDC->LineTo(0,0);
    pDC->SelectObject(pOldPen1);
             pen.DeleteObject();
    ReleaseDC(pDC);}
      

  5.   

    我搞定了,谢谢各位帮忙的朋友,将绘图代码写在OnPaint里面才可以,用一个全局变量判断具体画在哪个控件内。