【计算机图形学课程】⼀.MFC基本绘图函数使⽤⽅法
这是最近我《计算机图形学》课程实践编程课介绍的相关知识,主要是想通过MFC C++绘图,让学⽣体会下图形学相关的编程及简单的图形绘制,同时⾮常佩服学⽣的想象⼒,他们做得真的不错。希望这篇基础⽂章对你有所帮助吧!尤其是有这门课程的学⽣或编程爱好者,如果⽂章存在错误或不⾜之处,还请海涵。
参考书籍:孔令德·《计算机图形学基础教程(Visual C++版)》
学⽣绘制的图形还是⾮常有创新的,表⽰很满意,哈哈哈~
⼀. MFC绘图基础知识 CDC类
PS:这部分主要引⼊孔令德⽼师的知识,这篇⽂章以后⾯的编程为主。
VC++具有强⼤的绘图功能,虽然基于对话框的应⽤我推荐⼤家使⽤C# Winform程序,但是计算机图形和图像的基础知识,还是强烈推荐使⽤VC++ MFC实现。这有助于让你深⼊的理解图形变换、图像处理等知识。 在Windows平台下,GDI(Graphics Device Interface)图形设备接⼝被抽象为上下⽂CDC类(Device Context,DC)。Windows平台直接接收图形数据信息的不是显⽰器和打印机等硬件设备,⽽是CDC对象。MFC中,CDC类定义设备上下⽂对象的基类,封装了所需的成员函数,调⽤CDC类的成员函数,绘制和打印图形及⽂字。
CDC类派⽣出CClientDC类、CMetaFileDC类、CPaintDC类和CWindowDC类,请读者⾃⾏学习,同时推荐阅读原书。
MFC常⽤CPoint、CRect、CSize等数据类型。
(1) CPoint类:存放点坐标(x,y);
(2) CRect类:存放矩形左上顶点和右下⾓顶点的坐标(top、left、right、bottom),其中(top,left)为矩形的左上⾓点,
(right,bottom)为矩形的右下⾓点;
(3) CSzie类:存放矩形的宽度和⾼度的坐标(cx,cy),其中cx为矩形的宽度,cy为矩形的⾼度。
MFC绘图⼯具类包括CGdiObject、CBitmap、CBrush、CFont、CPallette、CPen和CRgn等。常⽤的包括:
(1) CBitmap:封装了⼀个GDI位图,提供位图操作的接⼝;
(2) CFont:封装了GDI字体,可以选作设备上下⽂中的当前字体;
(3) CBrush:封装了GDI画刷,选作设备上下⽂的当前画刷,画刷⽤于填充图形内部;
training是什么意思(4) CPen:封装了GDI画笔,选作设备上下⽂的当前画笔,画笔⽤于绘制图形边界线;
(5) CPallette:封装了GDI调⾊板,提供应⽤程序和显⽰器之间的颜⾊接⼝;
(6) CGdiObject:GDI绘图⼯具的基类,⼀般不能直接使⽤。
⼆. MFC单⽂档编程介绍
⾸先创建MFC项⽬,选择"MFC AppWizard"⼯程,命名为"test01"。
然后选择"单⽂档"格式,其中"基于对话框"是Dialog对话框⼯程。
创建完⼯程,在⼯作区间主要包括:ClassView(类视图)、ResourceView(资源视图)和FileView(⽂件视图)。其中类视图主要包含各个类,⽂件视图包括源⽂件.cpp和头⽂件.h。
high fidelity
打开资源ResourceView视图如下所⽰:
米奇妙妙屋英文全集MFC写代码通常在xxxView.cpp⽂件下,在"test01View.cpp"中找到OnDraw()函数,⽤于绘图:
/
// CTest01View drawing
void CTest01View::OnDraw(CDC* pDC)
{
CTest01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
下⾯将详细介绍MFC基础绘图函数
三. MFC绘图函数及扩展
1.MFC绘图函数
(1)绘制直线
CDC::MoveTo(int x, int y)
将画笔移动到当前位置,即坐标(x, y)处,并没有画线。
CDC::LineTo(int x, int y)
画笔从当前位置绘制⼀条⼦线到(x, y)点,但不包含(x, y)点。
void CTest01View::OnDraw(CDC* pDC)
{
CTest01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->MoveTo(100,150);
pDC->LineTo(300,400);
// TODO: add draw code for native data here
}
endeavor绘制图形如下所⽰,坐标(100, 150)表⽰距离左边100,距离顶部150。
注意:绘制图形主要调⽤CDC* pDC⽅法实现,MFC可以补充提⽰函数。
(2) 设置画笔
通常可以设置绘制图形的颜⾊及线条属性,函数为:困境英语
CPen::CreatePen(int nPenStyle, int nWidth, COLORREF color)
其中第⼀个参数为画笔的风格,实现、虚线等,第⼆个参数为画笔粗细,第三个参数使画笔的颜⾊,采⽤RGB(255, 255, 255)赋值。sacrum
CPen::SelectObject(Cpen *pen)
调⽤CPen选中画笔对象指针,即将画笔指向新画笔,同时指向指针。
void CTest01View::OnDraw(CDC* pDC)
{
CTest01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//绘制直线
pDC->MoveTo(100,150);
pDC->LineTo(300,400);
//定义画笔绘制直线
CPen pen(PS_DASH, 4, RGB(255,0,0)); //虚线粗4 红⾊
gunpDC->SelectObject(&pen);
pDC->MoveTo(100,150);
pDC->LineTo(400,300);
//⽅法⼆ CreatePen定义画笔
CPen pen2;
pen2.CreatePen(PS_DASHDOTDOT, 1, RGB(0,255,0)); //双点画线粗2 绿⾊
bolavenpDC->SelectObject(&pen2);
狷羚亚科pDC->MoveTo(100,150);
pDC->LineTo(500,200);
}
运⾏结果如下图所⽰,注意定义画笔后需要选择画笔SelectObject(),才能使⽤。
电台在线收听(3) 绘制矩形
CDC::Rectangle(int x1, int y1, int x2, int y2)
参数x1、y1表⽰矩形左上⾓坐标,参数x2、y2表⽰矩形右下⾓坐标。