VC++学习/MFC (2)

  搞懂了书上所讲的简单绘图的程序,现在看的关于文本编程就轻松多了。

  先回顾一下,要在做一个可以画直线的程序,主要做的就是两点,一个是LBUTTONDOWN(鼠标左键按下的响应函数)和LBUTTONUP(鼠标左键抬起的响应函数),然后记录一下Origin点和现在的最后的point点就可可以了。

  单纯画直线有很多中方法:

  首先是在LBUTTONDOWN中记录下m_ptOrigin点:

1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
2 {
3     // TODO: Add your message handler code here and/or call default
4     m_ptOrigin=point;
5     m_bdraw=TRUE;
6     CView::OnLButtonDown(nFlags, point);
7 }

  然后就可以在LBUTTUONUP中操作了,有多重方法:

  (1)

1     HDC hdc;
2     hdc = ::GetDC(m_hWnd);
3     MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
4     LineTo(hdc,point.x,point.y);
5     ::ReleaseDC(m_hWnd,hdc);

  (2)

1     CDC* pDC=GetDC();
2     pDC->MoveTo(m_ptOrigin);
3     pDC->LineTo(point);
4     ReleaseDC(pDC);

  (3)

1     CClientDC dc(this);
2     dc.MoveTo(m_ptOrigin);
3     dc.LineTo(point);

  另外,CClientDC dc(this)后可以用dc.FillRect(m_ptOrigin,point)来画矩形。

要想画连续线条就得先定义BOOL型的私有成员变量m_bDraw;在鼠标按下去的时候改值为真,鼠标左键弹起时为假:

  

 1 void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
 2 {
 3     // TODO: Add your message handler code here and/or call default
 4     CClientDC dc(this);
 5     if(m_bdraw==TRUE)
 6     {
 7         dc.MoveTo(m_ptOrigin);
 8         dc.LineTo(point);
 9         m_ptOrigin=point;        //    修改线段的起点
10     }
11     CView::OnMouseMove(nFlags, point);
12 }

 

  

  

  

posted on 2013-03-25 09:41  Zee、  阅读(272)  评论(0编辑  收藏  举报