Visual Studio 2015下MFC画图个人笔记
程序员文章站
2022-06-17 08:53:03
...
直线的绘制与画刷的使用
程序效果:在View视图的某一点出鼠标点击左键并按住,然后拖动鼠标直至松开鼠标左键。在View视图将获得一条由鼠标左键按下处到鼠标左键松开处的一条直线段。
1.新建MFC单文档程序,此处程序名Draw
2.为CDrawView添加成员变量,用于记录线段的起点
在类视图下右键单击CDrawView,选择“添加”->“添加变量”,访问选择“private”,变量类型为“CPoint”,变量名此处为m_ptStartPoint。
3. 使用类向导为CDrawView添加消息响应函数
为CDrawView分别添加鼠标按下与鼠标松开的消息响应函数,用于相应消息的处理。在类视图下右键单击CDrawView,选择“类向导”,选择“消息”栏,选中“WM_LBUTTONDOWN”,再选择“添加处理程序”,使用同样的方法添加“WM_LBUTTONUP”。
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);
// 使用画刷填充矩形区域
//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);