孙鑫vc++学习(vs2008)笔记之第四课MFC消息映射、画图

1.view类始终在框架类窗口之上

2.删除类成员函数:在属性窗口消息里面找到相应的消息相应函数下拉菜单删除。

3.增加一个消息响应函数的时候,在三个地方修改代码:①头文件中增加消息相应函数声明;②源文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP(消息映射表)之间加入相应函数宏,通过这个宏把消息和消息响应函数联系起来;③消息响应代码。

4.处理机制:消息映射。

5.WindowProc在wincore.cpp中,其中调用OnWndMsg完成消息映射的处理

6.从CWnd所派生出来的类当中都有一个数据成员保存了跟这个类相关的句柄,m_hWnd

7.CDC类,跟作图有关的操作封装在CDC类中

8.作图区域:client and nonclient areas,客户区和非客户区

9.静态函数:不属于某个具体的对象,只属于所属的类本身,非静态成员函数属于对象。静态函数在类创建的时候分配空间,非静态函数在定义对象的时候分配空间。内存里面有分配才能调用。静态成员变量必须初始化

10.用到的一些函数在程序注释里面。。。。

View Code
 1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
2 {
3 // TODO: 在此添加消息处理程序代码和/或调用默认值
4 m_ptOrigin = m_ptOld = point;
5 m_bDraw = TRUE;
6
7
8 CView::OnLButtonDown(nFlags, point);
9 }
10
11 void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
12 {
13 // TODO: 在此添加消息处理程序代码和/或调用默认值
14 //HDC hdc;
15 //hdc = ::GetDC(m_hWnd);
16 ////从CWnd所派生出来的类当中都有一个数据成员保存了跟这个类相关的句柄m_hWnd
17 //::MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); //移动到原点
18 //LineTo(hdc,point.x,point.y); //画线
19 //::ReleaseDC(m_hWnd,hdc); //释放DC
20
21 //CDC类
22 //CDC *pDC = GetDC(); //CWnd类的成员函数GetDC
23 //pDC->MoveTo(m_ptOrigin);
24 //pDC->LineTo(point);
25 //ReleaseDC(pDC);
26
27 //CClientDC类
28 //CClientDC dc(this);
29 ////CClientDC dc(GetParent());
30 //dc.MoveTo(m_ptOrigin);
31 //dc.LineTo(point);
32
33 //CWindowDC dc(this); //CWindowDC可以访问客户区和非客户区
34 //CWindowDC dc(GetParent());
35 //CWindowDC dc(GetDesktopWindow()); //获取桌面句柄
36 //dc.MoveTo(m_ptOrigin);
37 //dc.LineTo(point);
38
39 //CPen pen(PS_DOT,1,RGB(0,255,0)); //定义画笔
40 //CClientDC dc(this);
41 //CPen *pOldPen = dc.SelectObject(&pen); //颜色切换
42 //dc.MoveTo(m_ptOrigin);
43 //dc.LineTo(point);
44 //dc.SelectObject(pOldPen);
45
46 //画刷,填充矩形区域
47 //CBrush brush(RGB(255,0,0));
48 //CBitmap bitmap;
49 //bitmap.LoadBitmap(IDB_BITMAP1); //位图画刷
50 //CBrush brush(&bitmap);
51 //CClientDC dc(this);
52 ////dc.FillRect(CRect(m_ptOrigin,point),&brush);
53 //CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //透明矩形
54 ////FromHandle是静态成员函数
55 //CBrush *pOldBrush = dc.SelectObject(pBrush);
56 //dc.Rectangle(CRect(m_ptOrigin,point)); //画矩形
57 //dc.SelectObject(pOldBrush);
58
59 m_bDraw = FALSE;
60 CView::OnLButtonUp(nFlags, point);
61 }
62
63 void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
64 {
65 // TODO: 在此添加消息处理程序代码和/或调用默认值
66 CClientDC dc(this);
67 CPen pen(PS_SOLID,1,RGB(255,0,0));
68 CPen *pOldPen = dc.SelectObject(&pen);
69 if (m_bDraw)
70 {
71 dc.SetROP2(R2_BLACK); //设置绘画模式
72 dc.MoveTo(m_ptOrigin);
73 //dc.LineTo(point); //连续画画
74 //m_ptOrigin = point; //下一次起点是上一次的终点
75 dc.LineTo(m_ptOld); //画扇形
76 //dc.MoveTo(m_ptOrigin);
77 dc.MoveTo(m_ptOld);
78 dc.LineTo(point);
79 m_ptOld = point;
80
81 }
82 dc.SelectObject(pOldPen);
83 CView::OnMouseMove(nFlags, point);
84 }

 

原文地址:https://www.cnblogs.com/quantumplan/p/2348388.html