一。 在View类里画直线:
1. view类增加m_ptOrigin成员变量,在view::WM_LBUTTONDOWN消息响应函数里将point(当前点)的值赋值给m_ptOrigin;
2. 在view::WM_LBUTTONUP消息响应函数里的point点就是另外个点了(两点确定一条直线)
3. 产生CClientDC:CClientDC dc(this);
4. 先移动到原点,再划线到当前点:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 2 { 3 // TODO: 在此添加消息处理程序代码和/或调用默认值 4 m_ptOrigin = point; 5 6 CView::OnLButtonDown(nFlags, point); 7 } 8 9 void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 10 { 11 // TODO: 在此添加消息处理程序代码和/或调用默认值 12 CClientDC dc(this); 13 dc.MoveTo(m_ptOrigin); 14 dc.LineTo(point); 15 16 CView::OnLButtonUp(nFlags, point); 17 }
二。 给这条直线选择颜色
1. 产生一个画笔 CPen pen(PS_SOLID, 0, RGB(255, 0, 0));
2. 产生CClientDC: CClientDC dc(this);
3. 将画笔选择入设备描述表中
CPen *pOldPen = dc.SelectObject(&pen);
注意这里dc.SelectObject(&pen)返回的为被替换的CPen,即原来的画笔
4. 移动原点,划线当前点,跟上面一样
5. 选择回原来的画笔
dc.SelectObject(&pOldPen);
1 CClientDC dc(this); 2 CPen *pOldPen = dc.SelectObject(&pen); 3 dc.MoveTo(m_ptOrigin); 4 dc.LineTo(point); 5 dc.SelectObject(pOldPen);
三。产生一个有填充色的矩形
1. 产生一个画刷:CBrush brush(RGB(255, 0, 0));
2. 产生CClientDC: CClientDC dc(this);
3. 填充一个矩形:dc.FillRect(CRect(m_ptOrigin, point), &brush);
四。用位图画刷
先得有位图资源
1. 产生一个位图:CBitmap bitmap;
2. load位图:bitmap.LoadBitmap(IDB_BITMAP1);
3. 产生画刷时选择这个位图:CBrush brush(&bitmap);
下面与上面一样
五。画几个可以重叠的矩形
将矩形的画刷设置成透明画刷
1. 产生CClientDC: CClientDC dc(this);
2. 生成一个透明画刷:CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
3. 保存就画刷:CBrush *pOldBrush = dc.SelectObject(pBrush);
4. 画矩形:dc.Rectangle(CRect(m_ptOrigin, point));
5. 还原画刷:dc.SelectObject(pOldBrush);
六。画笔可以随意画一个连续的线条
将曲线分割成非常小的线段
1. 增加一个成员变量BOOL m_bDraw; 初始化为假
2. 在View::WM_LBUTTONDOWN消息响应函数里增加:m_bDraw = TRUE;
3. 在View::WM_LBUTTONUP消息响应函数里增加:m_bDraw = FALSE;
4. 在View::WM_MOUSEMOVE里判断m_bDraw是不是为真,如果是假直接结束
5. 如果是真的话:
a) 先移动点到m_ptOrigin,再划线到point:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
b) 将m_ptOrigin设为point:m_ptOrigin = point;
1 void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 2 { 3 // TODO: 在此添加消息处理程序代码和/或调用默认值 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 }
七。画扇形
感觉不重要,就不记录了