搞懂了书上所讲的简单绘图的程序,现在看的关于文本编程就轻松多了。
先回顾一下,要在做一个可以画直线的程序,主要做的就是两点,一个是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 }