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、在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;
}然后编译运行,就可以用鼠标控制来绘制一个矩形了。
问题来了:当你把焦点移开,然后再回来绘制矩形,你会发现上次绘制的矩形会残留在上面。
请高手指教
如果lz的意思好像是要刷新掉,直接在onmousemove()里面绘制
变成成员变量给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;
}