//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 }