欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Visual Studio 2015下MFC画图个人笔记

程序员文章站 2022-06-17 08:53:03
...

 直线的绘制与画刷的使用

程序效果:在View视图的某一点出鼠标点击左键并按住,然后拖动鼠标直至松开鼠标左键。在View视图将获得一条由鼠标左键按下处到鼠标左键松开处的一条直线段。

1.新建MFC单文档程序,此处程序名Draw

2.为CDrawView添加成员变量,用于记录线段的起点

在类视图下右键单击CDrawView,选择“添加”->“添加变量”,访问选择“private”,变量类型为“CPoint”,变量名此处为m_ptStartPoint。

Visual Studio 2015下MFC画图个人笔记

3. 使用类向导为CDrawView添加消息响应函数

为CDrawView分别添加鼠标按下与鼠标松开的消息响应函数,用于相应消息的处理。在类视图下右键单击CDrawView,选择“类向导”,选择“消息”栏,选中“WM_LBUTTONDOWN”,再选择“添加处理程序”,使用同样的方法添加“WM_LBUTTONUP”。


Visual Studio 2015下MFC画图个人笔记


4.编辑消息响应函数

在上图中点击“编辑代码”可跳转至对应的消息响应函数。或在DrawView.cpp中找到这两个的消息响应函数。在OnLButtonDown中添加以下代码,用于保存线段的起始点。

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_ptStart = point;
	CView::OnLButtonDown(nFlags, point);
}

在OnLButtonUp中添加以下代码,用于线段的绘制。

// 画线方式一
	HDC hdc;
	//使用全局函数获取View类窗口句柄
	hdc = ::GetDC(m_hWnd);
	MoveToEx(hdc, m_ptStart.x, m_ptStart.y, NULL);
	LineTo(hdc, point.x, point.y);
	::ReleaseDC(m_hWnd, hdc);

	// 画线方式二
	CDC *pDC = GetDC();
	pDC->MoveTo(m_ptStart);
	pDC->LineTo(point);
	ReleaseDC(pDC);

	// 画线方式三 使用CClientDC,无需使用GetDC()与ReleaseDC()
	CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
	CClientDC clientDC(this);
	// 函数SelectObject(Cpen *pen)的返回值为被替换画笔对象的指针
	CPen *pOldPen = clientDC.SelectObject(&pen);
	clientDC.MoveTo(m_ptStart);
	clientDC.LineTo(point);
	clientDC.SelectObject(pOldPen);

使用画刷填充矩形区域,在OnLButtonUp中添加以下代码:

	// 使用画刷填充矩形区域
	//CBrush brush(RGB(255, 0, 0));
	//CClientDC clientDC(this);
	//clientDC.FillRect(CRect(m_ptStart, point), &brush);

使用画刷加载位图,在OnLButtonUp中添加以下代码:

	/**
	 * 使用画刷加载位图
	 * 鼠标右键项目名————“添加”————“资源”————“Bitmap”————“新建”
	 * 使用LoadBitmap()函数加载位图
	 */
	//CBitmap bitmap;
	//bitmap.LoadBitmapW(IDB_BITMAP1);
	//CBrush brush(&bitmap);
	//CClientDC clientDC(this);
	//clientDC.FillRect(CRect(m_ptStart, point), &brush);





相关标签: visual studio mfc