1 为完成消息捕获,需增加windows消息处理 2 在对应类中选择相应消息处理 3 文档视类,view类覆盖在框架类上,因此在窗口上的任何操作只能作用在view上 4 添加消息响应三步骤: 1 afx_msg void OnLButtonDown(UINT nFlags, CPoint point)//头文件中消息响应的声明 2 BEGIN_MESSAGE_MAP(CDrawView, CView) ON_WM_LBUTTONDOWN()//源文件中将消息与消息响应函数关联起来 END_MESSAGE_MAP() 3 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)//源文件中消息响应函数定义实现 { // TODO: Add your message handler code here and/or call default MessageBox("view cliked"); CView::OnLButtonDown(nFlags, point); } 5 作图要获取DC句柄 6 从CWnd派生出来的都继承了m_hWnd句柄,它跟窗口有关 7 画线: HDC hdc; hdc = ::GetDC(m_hWnd);//SDK MoveToEx(hdc,m_mypoint.x,m_mypoint.y,NULL); LineTo(hdc,point.x,point.y); ::ReleaseDC(m_hWnd,hdc); CView::OnLButtonUp(nFlags, point); 8 //用MFC类来完成 //CDC为MFC封装的设备上下文类 CDC* hDC = GetDC(); hDC->MoveTo(m_mypoint); hDC->LineTo(point); 9 //每一个类都隐含这this指针指向本身 CClientDC dc(GetParent());//获取父窗口句柄,即在view类的父类frame类上画线 dc.MoveTo(m_mypoint); dc.LineTo(point); 10 //不同颜色的画笔 GetDesktopWindow()//获取桌面句柄 CPen myPen1(PS_DOT, 1, RGB(255,0,0)); CClientDC dc(this); 11 //将新画笔选进设备标志中并返回旧画笔 CPen *pOldpen = dc.SelectObject(&myPen1); dc.MoveTo(m_mypoint); dc.LineTo(point); dc.SelectObject(pOldpen);//重新选择旧画笔 12 //创建带位图的画刷 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); CBrush brush(&bitmap); 13 //创建透明画刷 CClientDC DC(this); //GetStockObject获取GDI句柄,FromHandle获取画刷指针,参数类型不同需要强制转换 CBrush *p = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CBrush *P_old = DC.SelectObject(p); DC.Rectangle(CRect(m_mypoint,point)); DC.SelectObject(P_old); 14 类中静态方法并不属于某一具体对象,在代码生成是就已经分配空间 静态方法不能调用非静态成员变量 非静态成员函数可以调用静态成员函数 静态成员变量需要在类外边初始化,否则会出现链接错误 15 画连续弯曲的线,可以捕获鼠标移动的消息 通过左键是否按下和移动时间判断,注意要改变初始点的坐标 定义全局变量判断左键是否按下 CClientDC dc(this); if(lu == TRUE) { dc.MoveTo(m_mypoint); dc.LineTo(point); m_mypoint = point; } CView::OnMouseMove(nFlags, point); 16 带颜色: CClientDC dc(this); CPen pen(PS_DOT,1,RGB(255,0,0)); CPen* old = dc.SelectObject(&pen); if(lu == TRUE) { dc.MoveTo(m_mypoint); dc.LineTo(point); m_mypoint = point; } dc.SelectObject(old); CView::OnMouseMove(nFlags, point);
回顾绘图类
猜你喜欢
转载自blog.csdn.net/qq_24282081/article/details/79032046
今日推荐
周排行