MFC: 孙鑫教程4笔记

 一。 在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 }
View Code

 

二。 给这条直线选择颜色

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);
View Code

 

三。产生一个有填充色的矩形

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 }
View Code

 

七。画扇形

感觉不重要,就不记录了

你可能感兴趣的:(mfc)