欢迎来到贱贱的博客

扩大
缩小

MFC绘图

//20171/12
1 两点一线 比如鼠标左击和鼠标弹起的两个消息 然后响应从而获取一条线
2 添加响应函数方法 类图->右击->addwindowsmessage
3 Dview和main中同时的添加消息函数 弹出框 发现只会在view类中才会有响应
4 删除通过向导来生成的函数时,方法:函数上面右键 delete
5 双击类名到头文件
6 增加一个响应函数实际上会在三个地方做出补充
 (1)头文件 加入消息函数声明
 (2)源文件中begin_message和end_message之间加入一个消息响应宏 通过宏把消息响应函数关联起来
7 消息映射 基类有虚函数 子类要响应就重写这个函数 子类有调用子类 没有调用父类
 MFC采用消息映射 句柄和指针对照表 当收到消息的时候 通过句柄找到指针 传给
 查看mfc源代码时候 wincore中windowproc f3跟踪查找->windowmessage->根据消息种类判断查找源文件消息映射声明等3个地方 然后由消息函数来响应
8 MFC把作图相关的都放在了cdc中
9 颜色 宏RGB000 黑色 三个255 白色 255 0 0 红色
10 工具栏插入->resourse->Bitmap

 1 void CTest_DrawView::OnLButtonUp(UINT nFlags, CPoint point) 
 2 {
 3     /*采用window SDK方法划线
 4     // TODO: Add your message handler code here and/or call default
 5     HDC hdc;//定义一个句柄
 6     hdc = ::GetDC(m_hWnd);
 7     /*BOOL MoveToEx(    
 8       HDC hdc,          // handle to device context
 9       int X,            // x-coordinate of new current position
10       int Y,            // y-coordinate of new current position
11       LPPOINT lpPoint   // old current position
12     );*/
13     //MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//null大写
14 
15     //划线
16     /*BOOL LineTo(
17    int x,
18    int y 
19     );
20     BOOL LineTo(
21    POINT point 
22     );
23     LineTo(hdc,point.x,point.y);
24     ::ReleaseDC(m_hWnd,hdc);*/
25 
26     /*CDC *pDC;
27     pDC = GetDC();//返回值为指针 所以
28     pDC->MoveTo(m_ptOrigin);
29     pDC->LineTo(point);
30     ReleaseDC(pDC);*/
31 
32     /*//CClientDC 在构造的时候调用getdc获得句柄 析构释放dc句柄 这样不用显示调用
33     // CWnd* GetParent( ) const;
34     CClinetDC dc(GetParent());//得到父窗口的指针
35     CClientDC dc(this);//构造dc
36     dc.MoveTo(m_ptOrigin);
37     dc.LineTo(point);
38     CView::OnLButtonUp(nFlags, point);*/
39 
40      
41 /*explicit CWindowDC(
42    CWnd* pWnd 
43 );意味着这个对象可以访问整个屏幕区域 包括客户区域*/
44  
45     /*CWindowDC dc(GetParent());
46     dc.MoveTo(m_ptOrigin);
47     dc.LineTo(point);
48     CView::OnLButtonUp(nFlags, point);*/
49 
50     //获取桌面窗口
51     /*CWindowDC dc(GetDesktopWindow());
52     dc.MoveTo(m_ptOrigin);
53     dc.LineTo(point);
54     CView::OnLButtonUp(nFlags, point);*/
55 
56     //画笔颜色等类 CPen
57     //CPen pen(PS_SOLID,10,RGB(255,0,0));//红色 实线
58     /*CPen pen(PS_DOT,1,RGB(255,0,0));//点线 为1
59     CClientDC dc(this);
60     //新的设备描述表 来覆盖前面的DC 也是还原
61     CPen *pOldPen = dc.SelectObject(&pen);
62     dc.MoveTo(m_ptOrigin);
63     dc.LineTo(point);
64     dc.SelectObject(pOldPen);
65     CView::OnLButtonUp(nFlags, point);*/
66 
67     //画刷
68     //CBrush brush(RGB(255,0,0));
69     /*CBitmap bitmap;
70     bitmap.LoadBitmap(IDB_BITMAP1);//加载位图
71     CBrush brush(&bitmap);//画刷
72     CClientDC dc(this);
73     dc.FillRect(CRect(m_ptOrigin,point),&brush);
74     CView::OnLButtonUp(nFlags, point);*/
75 
76     //透明画刷的创建
77     CClientDC dc(this);
78     CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
79     //dc.Rectangle(CRect(m_ptOrigin,point));//画矩形 此时是重叠的
80     CBrush *pOldBrush = dc.SelectObject(pBrush);//替换
81     CView::OnLButtonUp(nFlags, point);
82     dc.Rectangle(CRect(m_ptOrigin,point));
83     dc.SelectObject(pOldBrush);//还原先前的画刷
84         CView::OnLButtonUp(nFlags, point);
85  
86 
87 }

 

posted on 2017-01-23 10:15  L的存在  阅读(209)  评论(0编辑  收藏  举报

导航