回顾绘图类

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