现在的位置: 首页 > 综合 > 正文

mfc 中画线的几种方法,画刷

2019年05月31日 ⁄ 综合 ⁄ 共 2062字 ⁄ 字号 评论关闭

我们平常画一条线,通常肯定是需要知道起点和终点的。mfc也一样。

我们先定义一个。变量CPoint的m_ptStart变量记录起点位置,起点是鼠标放下去的位置

创建按下鼠标事件:

void Ctest4View::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
	m_ptStart = point;  //记录起点
	CView::OnLButtonDown(nFlags, point);
}

在终点,做画线操作。方法很多。鼠标弹起来的事件

void Ctest4View::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
         ................
	CView::OnLButtonUp(nFlags, point);
}

方法一:

		HDC hdc;  //申明hdc句柄
		hdc = ::GetDC(m_hWnd);  //调用全局的函数
		MoveToEx(hdc,m_ptStart.x,m_ptStart.y,NULL); //移动到这个点
		LineTo(hdc,point.x,point.y);  //从当前位置划线结束
		::ReleaseDC(m_hWnd,hdc);//释放dc,也是全局

方法二:

		CDC *pDC = GetDC();   //返回dc句柄指针,相当于设置
		pDC->MoveTo(m_ptStart);//
		pDC->LineTo(point);
		ReleaseDC(pDC);//释放dc

方法三:

	       //CClientDC dc(this);//本窗口
	        CClientDC dc(GetParent());//父窗口  CClientDC  包含了 getdc  并releasedc
		dc.MoveTo(m_ptStart);
		dc.LineTo(point);

方法四:

	      //CWindowDC dc(GetParent());
	      CWindowDC dc(GetDesktopWindow()); //获取桌面设备
	      dc.MoveTo(m_ptStart);
	      dc.LineTo(point);

给dc对象增加画笔

		CDC *pDC = GetDC();
		CPen pen(PS_SOLID,10,RGB(255,0,0));   //创建画笔,画笔风格,颜色
		pDC->MoveTo(m_ptStart);    //指定起点位置
		CPen *poldPen = pDC->SelectObject(&pen);//将画笔上线,并返回老画笔
		pDC->LineTo(point);//描绘,从起点到point点
		pDC->SelectObject(poldPen); //恢复画笔
		ReleaseDC(pDC); //释放

给dc对象增加画刷

		//颜色画刷
		CBrush brush(RGB(255,0,0));  //创建红色画刷
		CClientDC dc(this);  //创建dc  CClientDC 构造函数里,有getdc 和 releasedc
		dc.FillRect(CRect(m_ptStart,point),&brush);//填充矩形

创建位图画刷,IDB_BITMAP1是位图资源

		//位图画刷
		CBitmap bitmap;
		bitmap.LoadBitmap(IDB_BITMAP1);
		CBrush brush(&bitmap);
		CClientDC dc(this);  //创建dc
		dc.FillRect(CRect(m_ptStart,point),&brush);

创建透明画刷

	        CClientDC dc(this);
		//获取透明画刷 GetStockObject 返回画刷句柄 FromHandle 返回画刷指针
		CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
		CBrush *poldBrush = dc.SelectObject(pBrush);
		dc.Rectangle(CRect(m_ptStart,point));//画矩形
		dc.SelectObject(poldBrush);

鼠标轨迹事件

void Ctest4View::OnMouseMove(UINT nFlags, CPoint point)  //
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	dc.SelectObject(pen);
	if(m_draw)
	{
		dc.MoveTo(m_ptStart);
		dc.LineTo(m_ptold);
		dc.MoveTo(m_ptold);
		dc.LineTo(point);
		m_ptold = point;
	}
	CView::OnMouseMove(nFlags, point);
}

抱歉!评论已关闭.