Windows XP,我用VC6.0建了一个项目名称叫T的单文档,在里面绘图,具体步骤如下:
1、在CTView类中添加变量“RECT m_rect;”和“bool m_var;”。
2、在CTViw中添加三个消息“WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_CREATE”的响应函数。
3、这三个函数添加如下:void CTView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    m_var = !m_var;    if (m_var == true)
    {
    m_rect.left = point.x;
        m_rect.top = point.y;
    }    m_rect.right = point.x;
    m_rect.bottom = point.y;
    
CView::OnLButtonDown(nFlags, point);
}void CTView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
    if (m_var == true)
    {
    m_rect.right = point.x;
        m_rect.bottom = point.y;        InvalidateRect (NULL, FALSE);
     }    CView::OnMouseMove(nFlags, point);
}int CTView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
    m_var = false; return 0;
}4、在OnDraw中void CTView::OnDraw(CDC* pDC)
{
CTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
    static RECT oldrect;    pDC->SetROP2 (R2_NOT);
    
 //   pDC->Rectangle (&oldrect);    pDC->MoveTo (oldrect.left, oldrect.top);
    pDC->LineTo (oldrect.right, oldrect.top);
    pDC->LineTo (oldrect.right, oldrect.bottom);
    pDC->LineTo (oldrect.left, oldrect.bottom);
    pDC->LineTo (oldrect.left, oldrect.top);    pDC->MoveTo (m_rect.left, m_rect.top);
    pDC->LineTo (m_rect.right, m_rect.top);
    pDC->LineTo (m_rect.right, m_rect.bottom);
    pDC->LineTo (m_rect.left, m_rect.bottom);
    pDC->LineTo (m_rect.left, m_rect.top);  //  pDC->Rectangle (&m_rect);
    oldrect = m_rect;
}然后编译运行,就可以用鼠标控制来绘制一个矩形了。
问题来了:当你把焦点移开,然后再回来绘制矩形,你会发现上次绘制的矩形会残留在上面。
请高手指教

解决方案 »

  1.   

    不明白lz的意思,在ondraw函数里面绘制,就是保证不被刷新掉,
    如果lz的意思好像是要刷新掉,直接在onmousemove()里面绘制
      

  2.   

    教你一招把ondraw里面的RECT   oldrect; 
    变成成员变量给view添加一个wm_setfocus的响应函数void CTView::OnSetFocus(CWnd* pOldWnd) 
    {
    CView::OnSetFocus(pOldWnd);

    // TODO: Add your message handler code here
    oldrect.left = oldrect.right = oldrect.bottom = oldrect.top = -1;
    }
      

  3.   

    问题出在你的oldrect上吧,是不是在哪里保存了oldrect
      

  4.   

    所有的数据操作都在上面了,我用的是全部刷新,将oldrect改成全局的也不行