(2.2)--第2章Visual C++6.0 绘图基础高级计算机图形学原理与实践.ppt
第二章第二章绘制像素函数绘制像素函数获取像素颜色函数获取像素颜色函数画笔函数画笔函数画刷函数画刷函数绘制直线函数绘制直线函数绘制矩形函数绘制矩形函数绘制椭圆函数绘制椭圆函数绘制圆弧函数绘制圆弧函数绘制多边形函数绘制多边形函数位图函数位图函数文本函数文本函数n nMFCMFC上机操作步骤上机操作步骤n n基本绘图函数基本绘图函数n nCDCCDC类结构和类结构和GDIGDI对象对象n n映射模式映射模式n nCDCCDC类的主要绘图成员函数类的主要绘图成员函数n n设备上下文的调用和释放设备上下文的调用和释放n nVC+VC+绘制图形的几种方法绘制图形的几种方法开发工具的选择开发工具的选择nTurbo CTurbo Cn控制台程序,不支持鼠标和键盘操作。控制台程序,不支持鼠标和键盘操作。n只能显示只能显示1616色,不能绘制光照和带阴影的图色,不能绘制光照和带阴影的图形。形。Turbo C 开发的Sierpinksy海绵Visual C+Visual C+的的MFCMFC可以显示可以显示16781678万种真彩色,支持光万种真彩色,支持光照模型的开发。照模型的开发。支持交互式绘图。支持交互式绘图。MFC 开发的Sierpinksy海绵例1 设计一个长方形CRect类,调用类的成员函数计算长方形的周长和面积。void main()/主函数CRect rect(30,20),*p=▭/定义对象和对象指针/用对象输出周长和面积cout周长为:rect.circum()endl;/输出周长cout面积为:rect.area()endl;/输出面积/用对象指针输出周长和面积cout周长为:circum()endl;/输出周长cout面积为:area()endl;/输出面积CRect:CRect(int len,int wid)/定义带参构造函数length=len;width=wid;cout建立对象endl;CRect:CRect()/定义析构函数cout撤销对象endl;double CRect:circum()/定义周长函数return 2*(length+width);double CRect:area()/定义面积函数return length*width;#includeiostream.hclass CRect/定义长方形类public:CRect(int,int);/声明带参构造函数CRect();/声明析构函数double circum();/声明周长函数double area();/声明面积函数private:int length;/声明长方形的长度int width;/声明长方形的宽度;例3 从例2-1已有的长方形类CRect继承出长方体类CCube,增加高度数据成员height和计算体积成员函数volume()。void main()CCube*p=new CCube(30,20,100);cout立方体的体积为:volume()endl;delete p;CRect:CRect(int len,int wid)/基类带参构造函数length=len;width=wid;cout建立基类对象endl;CRect:CRect()/基类析构函数cout撤销基类对象endl;double CRect:area()/基类面积函数return length*width;double CRect:circum()/基类周长函数return 2*(length+width);#includeiostream.hclass CRect/基类 public:CRect(int,int);CRect();double circum();double area();protected:int length;int width;class CCube:public CRect/公有继承派生类public:CCube(int,int,int);CCube();double volume();/新增面积成员函数private:int height;/新增高度数据成员;CCube:CCube(int len,int wid,int hei):CRect(len,wid)/派生类构造函数height=hei;cout建立派生类对象endl;CCube:CCube()/派生类析构函数cout撤销派生类对象SetPixel(20,20,RGB(255,0,0);-SetPixel(20,20,RGB(255,0,0);c=c=pDCpDC-GetPixel(20,20);GetPixel(20,20);pDCpDC-SetPixel(60,20,c);SetPixel(60,20,c);3.3.画笔函数画笔函数 画笔绘制边界默认的画笔是画笔绘制边界默认的画笔是1 1像素宽的黑色实线笔。像素宽的黑色实线笔。画笔的风格画笔的风格画笔的风格画笔的风格风格代码线型宽度颜色PS_SOLID实线任意指定纯色PS_DASH虚线1(不可任意指定)纯色PS_DOT点线1(不可任意指定)纯色PS_DASHDOT点划线1(不可任意指定)纯色PS_DASHDOTDOT双点画线1(不可任意指定)纯色PS_NULL不可见线任意指定纯色PS_INSIDEFRAME内框架线任意指定纯色类属:类属:CPen:CreatPenCPen:CreatPen 原型:原型:BOOL BOOL CreatePen(intCreatePen(int nPenStylenPenStyle,intint nWidthnWidth,COLORREF COLORREF crColorcrColor););返回值:非零。返回值:非零。参数说明:参数说明:第一个参数第一个参数nPenStylenPenStyle是画笔的风格代码,第二个参数是画笔的风格代码,第二个参数nWidthnWidth是画笔的宽度,第三个参数是画笔的宽度,第三个参数crColorcrColor是画笔的颜是画笔的颜色。色。(1 1)创建画笔函数)创建画笔函数类属:类属:CDC:SelectObjectCDC:SelectObject 原型:原型:CpenCpen*SelectObject(CpenSelectObject(Cpen*pPenpPen););返回值:被替代画笔的指针。返回值:被替代画笔的指针。参数说明:参数参数说明:参数pPenpPen是是CpenCpen类的被选中的新画笔对象指类的被选中的新画笔对象指针。本函数把原画笔换成新画笔,同时返回指向原画笔针。本函数把原画笔换成新画笔,同时返回指向原画笔的指针。的指针。(2 2)选择画笔函数)选择画笔函数(3 3)删除画笔函数)删除画笔函数类属:类属:CGdiObject:DeleteObjectCGdiObject:DeleteObject 原型:原型:BOOL BOOL DeleteObjectDeleteObject();();返回值:非零。返回值:非零。参数说明:画笔使用完毕,把已成自由状态的画笔从参数说明:画笔使用完毕,把已成自由状态的画笔从系统内存中清除。系统内存中清除。类属:类属:CDC:SelectStockObjectCDC:SelectStockObject 原型:原型:virtual virtual CGdiObjectCGdiObject*SelectStockObject(intSelectStockObject(int nIndexnIndex););返回值:被替代的返回值:被替代的CGdiObjectCGdiObject类对象的指针。类对象的指针。(4 4)选择一支库画笔函数)选择一支库画笔函数 参数说明:参数参数说明:参数nIndexnIndex是库画笔代码。是库画笔代码。WindowsWindows系系统中准备了一些使用频率较高的画笔,不需要创建,统中准备了一些使用频率较高的画笔,不需要创建,可以直接选用。同样,使用完库画笔时也不需要调可以直接选用。同样,使用完库画笔时也不需要调用用DeleteObjectDeleteObject()()函数从内存中删除已使用过的画函数从内存中删除已使用过的画笔。笔。三种常用库笔三种常用库笔库笔代码库笔代码含义含义BLACK_PEN宽度为1的黑笔实线笔WHITE_PEN宽度为1的白笔实线笔NULL_PEN透明笔VC+VC+中的画刷用于对图形内部进行填充。中的画刷用于对图形内部进行填充。4.4.画刷函数画刷函数创建实体画刷函数创建实体画刷函数BOOL BOOL CreateSolidBrush(COLORREFCreateSolidBrush(COLORREF crColorcrColor););选择画刷函数选择画刷函数CBrushCBrush*SelectObject(CBrushSelectObject(CBrush*pBrushpBrush););删除画刷函数删除画刷函数BOOL BOOL DeleteObjectDeleteObject();();创建阴影画刷函数创建阴影画刷函数BOOL BOOL CreateHatchBrush(intCreateHatchBrush(int nIndex,COLORREFnIndex,COLORREF crColorcrColor););第一个参数第一个参数nIndexnIndex是阴影样式代码,第二个参数是阴影样式代码,第二个参数crColorcrColor是阴影线的颜色是阴影线的颜色选择一只库画刷函数选择一只库画刷函数virtual virtual CGdiObjectCGdiObject*SelectStockObject(intSelectStockObject(int nIndexnIndex););常用的阴影线样式常用的阴影线样式阴影样式代码含义HS_BDIAGONAL45下降阴影线(从左到右)HS_CROSS水平和垂直交叉阴影线HS_DIAGCROSS45十字交叉阴影线HS_FDIAGONAL45上升阴影线(从左到右)HS_HORIZONTAL水平阴影线HS_VERTICAL垂直阴影线常用的库画刷样式常用的库画刷样式库画刷代码含义对应的RGBBLACK_BRUSH黑色的实心刷子RGB(0,0,0)DKGRAY_BRUSH暗灰色的实心刷子RGB(64,64,64)GRAY_BRUSH灰色的实心刷子RGB(128,128,128)LTGRAY_BRUSH淡灰色的实心刷子RGB(192,192,192)WHITE_BRUSH白色的实心刷子RGB(255,255,255)NULL_BRUSH透明刷子HOLLOW_BRUSH空心刷子5.5.绘制直线函数绘制直线函数设置直线的起点位置设置直线的起点位置CPointCPoint MoveTo(intMoveTo(int x x,intint y);y);设置直线的终点位置设置直线的终点位置BOOL BOOL LineToLineTo(intint x x,intint y);y);参数说明:参数说明:采用起点闭区间,终点开区间的处理方法,绘制直线采用起点闭区间,终点开区间的处理方法,绘制直线的函数不指定直线的颜色,直线颜色可以通过画笔函的函数不指定直线的颜色,直线颜色可以通过画笔函数来指定。数来指定。例例例例5 5 5 5 从屏幕的(从屏幕的(从屏幕的(从屏幕的(20,3020,3020,3020,30)到()到()到()到(200,300200,300200,300200,300)画一条一)画一条一)画一条一)画一条一像素宽的蓝色直线。像素宽的蓝色直线。像素宽的蓝色直线。像素宽的蓝色直线。void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);pDC-MoveTo(20,30);pDC-LineTo(200,300);pDC-SelectObject(pOldPen);NewPen.DeleteObject();6.6.绘制矩形函数绘制矩形函数类属:类属:CDC:RectangleCDC:Rectangle 原型原型:BOOL Rectangle(int x1BOOL Rectangle(int x1,int y1int y1,int x2int x2,int int y2);y2);返回值:非零。返回值:非零。参数说明:参数说明:该函数使用当前画刷填充矩形内部,并用当该函数使用当前画刷填充矩形内部,并用当前画笔绘制矩形边界线。前画笔绘制矩形边界线。例例6 6 绘制左上角点为(绘制左上角点为(100,100)100,100),右下角点为,右下角点为(600,300600,300)的矩形。矩形边框为一像素宽的蓝色边)的矩形。矩形边框为一像素宽的蓝色边界线,内部填充红色。界线,内部填充红色。nvoid void CTestView:OnDraw(CDCCTestView:OnDraw(CDC*pDCpDC)n nCTestDoc*pDoc=GetDocument();CTestDoc*pDoc=GetDocument();nASSERT_VALID(pDoc);ASSERT_VALID(pDoc);nCPenCPen NewPenNewPen,*,*pOldPenpOldPen;nNewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);n pOldPenpOldPen=pDCpDC-SelectObject(&NewPenSelectObject(&NewPen););n n CBrushCBrush NewBrushNewBrush,*,*pOldBrushpOldBrush;nNewBrush.CreateSolidBrush(RGB(255,0,0);NewBrush.CreateSolidBrush(RGB(255,0,0);n pOldBrushpOldBrush=pDCpDC-SelectObject(&NewBrushSelectObject(&NewBrush););n pDCpDC-Rectangle(100,100,600,300);/-Rectangle(100,100,600,300);/画矩形画矩形n pDCpDC-SelectObject(pOldPenSelectObject(pOldPen);/);/框线为蓝色框线为蓝色n NewPen.DeleteObjectNewPen.DeleteObject();();n pDCpDC-SelectObject(pOldBrushSelectObject(pOldBrush);/);/填充为红色填充为红色nNewBrush.DeleteObjectNewBrush.DeleteObject();();n 7.7.绘制椭圆函数绘制椭圆函数类属:类属:CDC:EllipseCDC:Ellipse 原型原型:BOOL Ellipse(int x1BOOL Ellipse(int x1,int y1int y1,int x2int x2,int y2);int y2);返回值:非零。返回值:非零。参数说明:参数说明:EllipseEllipse函数中,参数函数中,参数x1x1,y1y1是限定椭是限定椭圆范围的外接矩形左上角点的坐标;参数圆范围的外接矩形左上角点的坐标;参数x2x2,y2y2是限定椭圆范围的外接矩形右下角点的坐标是限定椭圆范围的外接矩形右下角点的坐标.注意注意VC+VC+中没有专门的画圆函数,只是把圆中没有专门的画圆函数,只是把圆绘制为长半轴和短半轴相等的椭圆。绘制为长半轴和短半轴相等的椭圆。EllipseEllipse函数函数使用当前画刷填充椭圆内部,并用当前画笔绘制使用当前画刷填充椭圆内部,并用当前画笔绘制椭圆边界线。椭圆边界线。例例7 7 将一个圆绘制在视区中央,圆的形状依据视区形状而将一个圆绘制在视区中央,圆的形状依据视区形状而定。当窗口的形状发生改变时,圆的形状也随之改变。坐定。当窗口的形状发生改变时,圆的形状也随之改变。坐标系的中点位于屏幕中心,标系的中点位于屏幕中心,X X轴向右,轴向右,Y Y轴向上。圆的边界轴向上。圆的边界为一像素宽的蓝色边界线,内部填充为红色。为一像素宽的蓝色边界线,内部填充为红色。void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCRect Rect;GetClientRect(&Rect);pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetWindowExt(Rect.Width(),Rect.Height();pDC-SetViewportExt(Rect.Width(),-Rect.Height();pDC-SetViewportOrg(Rect.Width()/2,Rect.Height()/2);CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);CBrush NewBrush,*pOldBrush;NewBrush.CreateSolidBrush(RGB(255,0,0);pOldBrush=pDC-SelectObject(&NewBrush);pDC-Ellipse(-Rect.Width()/2,Rect.Height()/2,Rect.Width()/2,-Rect.Height()/2);pDC-SelectObject(pOldPen);NewPen.DeleteObject();pDC-SelectObject(pOldBrush);NewBrush.DeleteObject();8.8.绘制圆弧函数绘制圆弧函数BOOL Arc(int x1BOOL Arc(int x1BOOL Arc(int x1BOOL Arc(int x1,int y1int y1int y1int y1,int x2int x2int x2int x2,int y2int y2int y2int y2,int int int int x3 x3 x3 x3,int y3int y3int y3int y3,int x4int x4int x4int x4,int y4);int y4);int y4);int y4);参数说明:参数说明:参数说明:参数说明:参数参数参数参数x1x1x1x1,y1y1y1y1是限定圆弧范围的外接矩形左上角点坐标是限定圆弧范围的外接矩形左上角点坐标是限定圆弧范围的外接矩形左上角点坐标是限定圆弧范围的外接矩形左上角点坐标参数参数参数参数x2x2x2x2,y2y2y2y2是限定圆弧范围的外接矩形右下角点坐标是限定圆弧范围的外接矩形右下角点坐标是限定圆弧范围的外接矩形右下角点坐标是限定圆弧范围的外接矩形右下角点坐标参数参数参数参数x3x3x3x3,y3y3y3y3为圆弧起点坐标,该参数不一定严格位于圆为圆弧起点坐标,该参数不一定严格位于圆为圆弧起点坐标,该参数不一定严格位于圆为圆弧起点坐标,该参数不一定严格位于圆弧上弧上弧上弧上参数参数参数参数x4x4x4x4,y4y4y4y4为圆弧终点坐标,该参数也不一定严格位于为圆弧终点坐标,该参数也不一定严格位于为圆弧终点坐标,该参数也不一定严格位于为圆弧终点坐标,该参数也不一定严格位于圆弧上圆弧上圆弧上圆弧上圆弧按逆时针方向绘制的。该函数使用当前画笔绘制圆圆弧按逆时针方向绘制的。该函数使用当前画笔绘制圆圆弧按逆时针方向绘制的。该函数使用当前画笔绘制圆圆弧按逆时针方向绘制的。该函数使用当前画笔绘制圆弧边界线。由于圆弧可能不封闭,所以圆弧不进行填充。弧边界线。由于圆弧可能不封闭,所以圆弧不进行填充。弧边界线。由于圆弧可能不封闭,所以圆弧不进行填充。弧边界线。由于圆弧可能不封闭,所以圆弧不进行填充。例例8 8 绘制第一象限内的椭圆弧绘制第一象限内的椭圆弧void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);pDC-Arc(100,100,600,300,100,200,350,600);pDC-SelectObject(pOldPen);NewPen.DeleteObject();9.9.绘制多边形函数绘制多边形函数BOOL BOOL Polygon(LPPOINTPolygon(LPPOINT lpPointslpPoints,intint Count);Count);参数说明:参数说明:第一个参数第一个参数lpPointslpPoints指定多边形顶点数组中每一个顶点指定多边形顶点数组中每一个顶点是一个是一个POINTPOINT结构或结构或CPointCPoint对象。对象。第二个参数第二个参数nCountnCount指定多边形数组中的顶点个数。指定多边形数组中的顶点个数。该函数用当前画笔绘制多边形边界线,用当前画刷填充该函数用当前画笔绘制多边形边界线,用当前画刷填充多边形内部。多边形内部。例例例例9 9 9 9 绘制四个顶点分别位于视区上部中点、右部中点、绘制四个顶点分别位于视区上部中点、右部中点、绘制四个顶点分别位于视区上部中点、右部中点、绘制四个顶点分别位于视区上部中点、右部中点、下部中点和左部中点的菱形。边界线为蓝色,内部用红下部中点和左部中点的菱形。边界线为蓝色,内部用红下部中点和左部中点的菱形。边界线为蓝色,内部用红下部中点和左部中点的菱形。边界线为蓝色,内部用红色填充色填充色填充色填充void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCRect Rect;GetClientRect(&Rect);CPen NewPen(PS_SOLID,5,RGB(0,0,255);CPen*pOldPen=pDC-SelectObject(&NewPen);CBrush NewBrush(RGB(255,0,0);CBrush*pOldBrush=pDC-SelectObject(&NewBrush);CPoint p4;p0.x=Rect.left+Rect.Width()/2;p0.y=Rect.top;p1.x=Rect.right;p1.y=Rect.top+Rect.Height()/2;p2.x=p0.x;p2.y=Rect.bottom;p3.x=Rect.left;p3.y=p1.y;pDC-Polygon(p,4);pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);10.10.填充矩形函数填充矩形函数类属:类属:CDC:FillRectCDC:FillRect 原型:原型:void void FillRect(LPCRECTFillRect(LPCRECT lpRectlpRect,CBrushCBrush *pBrushpBrush););返回值:无。返回值:无。参数说明:参数说明:第一个参数第一个参数lpRectlpRect指定矩形,是一个指定矩形,是一个RectRect结构或结构或CRectCRect对象;对象;第二个参数第二个参数pBrushpBrush指定画刷对象指针。指定画刷对象指针。该函数将用当前画刷填充矩形内部,但不画边界线。该函数将用当前画刷填充矩形内部,但不画边界线。例例例例10 10 10 10 绘制(绘制(绘制(绘制(100,100)100,100)100,100)100,100)和(和(和(和(400,200400,200400,200400,200)确定的红色矩形。)确定的红色矩形。)确定的红色矩形。)确定的红色矩形。void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCRect Rect;CBrush pNewBrush(RGB(255,0,0);CBrush*pOldBrush=pDC-SelectObject(&pNewBrush);/定义红色画刷定义红色画刷Rect.left=100;Rect.top=100;Rect.right=400;Rect.bottom=200;pDC-FillRect(Rect,&pNewBrush);/填充矩形内部填充矩形内部pDC-SelectObject(pOldBrush);/恢复画刷恢复画刷打开路径层打开路径层打开路径层打开路径层类属:类属:类属:类属:CDC:BeginPathCDC:BeginPathCDC:BeginPathCDC:BeginPath原型:原型:原型:原型:BOOL BOOL BOOL BOOL BeginPathBeginPathBeginPathBeginPath();();();();返回值:非返回值:非返回值:非返回值:非”0 0 0 0”。参数说明:打开路径层。参数说明:打开路径层。参数说明:打开路径层。参数说明:打开路径层。关闭路径层关闭路径层关闭路径层关闭路径层类属:类属:类属:类属:CDC:EndPathCDC:EndPathCDC:EndPathCDC:EndPath原型:原型:原型:原型:BOOL BOOL BOOL BOOL EndPathEndPathEndPathEndPath();();();();返回值:非返回值:非返回值:非返回值:非”0 0 0 0”。参数说明:关闭路径层,并将路径层选入设备上下文。参数说明:关闭路径层,并将路径层选入设备上下文。参数说明:关闭路径层,并将路径层选入设备上下文。参数说明:关闭路径层,并将路径层选入设备上下文。填充路径层填充路径层填充路径层填充路径层类属:类属:类属:类属:CDC:FillPathCDC:FillPathCDC:FillPathCDC:FillPath原型:原型:原型:原型:BOOL BOOL BOOL BOOL FillPathFillPathFillPathFillPath();();();();返回值:非返回值:非返回值:非返回值:非”0 0 0 0”。参数说明:使用当前画刷填充路径层,该路径层被填充参数说明:使用当前画刷填充路径层,该路径层被填充参数说明:使用当前画刷填充路径层,该路径层被填充参数说明:使用当前画刷填充路径层,该路径层被填充后将从设备上下文中废弃。后将从设备上下文中废弃。后将从设备上下文中废弃。后将从设备上下文中废弃。11.11.路径层函数路径层函数例例例例11 11 11 11 绘制两个多边形,一个使用路径填充,另一个不使绘制两个多边形,一个使用路径填充,另一个不使绘制两个多边形,一个使用路径填充,另一个不使绘制两个多边形,一个使用路径填充,另一个不使用路径填充,试观察结果的异同用路径填充,试观察结果的异同用路径填充,试观察结果的异同用路径填充,试观察结果的异同。void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data here /绘制第1个多边形,用路径层填充 CPoint p7;p0=CPoint(340,240);p1=CPoint(260,160);p2=CPoint(220,260);p3=CPoint(260,370);p4=CPoint(320,300);p5=CPoint(360,380);p6=CPoint(440,220);CBrush NewBrush;NewBrush.CreateSolidBrush(RGB(255,0,0);CBrush*pOldBrush=pDC-SelectObject(&NewBrush);pDC-BeginPath();pDC-MoveTo(p0);/绘制多边形 for(int i=1;iLineTo(pi);pDC-LineTo(p0);pDC-EndPath();pDC-FillPath();/填充多边形 pDC-TextOut(230,450,FillPath函数填充多边形);/绘制第2个多边形,用画刷填充 p0=CPoint(740,240);p1=CPoint(660,160);p2=CPoint(620,260);p3=CPoint(660,370);p4=CPoint(720,300);p5=CPoint(760,380);p6=CPoint(840,220);pDC-Polygon(p,7);/绘制并填充多边形 pDC-TextOut(630,450,Polygon函数填充多边形);pDC-SelectObject(pOldBrush);NewBrush.DeleteObject();导入位图导入位图BOOL BOOL LoadBitmap(UINTLoadBitmap(UINT nIDResourcenIDResource););参数参数nIDResourcenIDResource是资源的是资源的IDID编号编号建立与指定的显示设备上下文兼容的内存设备上下文建立与指定的显示设备上下文兼容的内存设备上下文virtual BOOL virtual BOOL CreateCompatibleDCCreateCompatibleDC(CDC*(CDC*pDCpDC););参数参数pDCpDC是设备上下文的指针,用于在向屏幕输出图形前是设备上下文的指针,用于在向屏幕输出图形前作准备。作准备。选择位图函数选择位图函数CBitmapCBitmap*SelectObjectSelectObject(CBitmapCBitmap*pBitmappBitmap););参数参数pBitmappBitmap是是CBitmapCBitmap类的被选中的新位图指针对象。类的被选中的新位图指针对象。把原位图换成新位图,同时返回指向原位图的指针。把原位图换成新位图,同时返回指向原位图的指针。12.12.位图函数位图函数传送位图函数传送位图函数BOOL BOOL BitBltBitBlt(intint x,x,intint y,y,intint nWidthnWidth,intint nHeightnHeight,CDC*,CDC*pSrcDCpSrcDC,intint xSrcxSrc,intint ySrcySrc,DWORD,DWORD dwRopdwRop););参数参数x x,y y是目标区域的左上角点坐标是目标区域的左上角点坐标参数参数nWidthnWidth和和nHeightnHeight是目标区域的宽度和高度是目标区域的宽度和高度参数参数pSrcDCpSrcDC是源设备上下文的指针是源设备上下文的指针参数参数xSrcxSrc和和ySrcySrc是源位图的左上角点坐标是源位图的左上角点坐标参数参数dwRopdwRop是光栅操作码是光栅操作码例如例如dwRopdwRopSRCCOPYSRCCOPY,表示将源位图直接拷贝到目标,表示将源位图直接拷贝到目标设备上下文。设备上下文。例例例例12 12 12 12 在屏幕上显示一幅位图。在屏幕上显示一幅位图。在屏幕上显示一幅位图。在屏幕上显示一幅位图。void CTestView:OnDraw(CDC*pDC)CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCRect Rect;GetClientRect(&Rect);CDC MemDC;CBitmap NewBitmap,*pOldBitmap;NewBitmap.LoadBitmap(IDB_BITMAP1);MemDC.CreateCompatibleDC(pDC);pOldBitmap=MemDC.SelectObject(&NewBitmap);pDC-BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);MemDC.SelectObject(pOldBitmap);文本颜色设置函数文本颜色设置函数类属:类属:CDC:SetTextColorCDC:SetTextColor原型:原型:virtual virtual COLORREFSetTextColorCOLORREFSetTextColor(COLORREF (COLORREF crColorcrColor););返回值:原文本颜色的返回值:原文本颜色的RGBRGB值。值。参数说明:指定文本颜色。参数说明:指定文本颜色。文本背景颜色设置函数文本背景颜色设置函数类属:类属:CDC:SetBkColorCDC:SetBkColor原型:原型:virtual virtual COLORREFSetBkColorCOLORREFSetBkColor(COLORREF(COLORREF crColorcrColor););返回值:原文本背景色的返回值:原文本背景色的RGBRGB值。值。参数说明:指定文本背景颜色。参数说明:指定文本背景颜色。13.13.图形文本函数图形文本函数(3)(3)文本背景模式设置函数文本背景模式设置函数类属:类属:CDC:SetBkModeCDC:SetBkMode原型:原型:intint SetBkColor(intSetBkColor(int nBkModenBkMode););返回值:原文本背景色的返回值:原文本背景色的RGBRGB值。值。参数说明:参数说明:nBkModenBkMode指定文本是否透明,有两个取值:指定文本是否透明,有两个取值:OPAQUE OPAQUE 文本背景用当前背景颜色填充;文本背景用当前背景颜色填充;TRANSPARENTTRANSPARENT文文本背景透明。本背景透明。(4)(4)文本输出函数文本输出函数类属:类属:CDC:TextOutCDC:TextOut原型:原型:BOOL BOOL TextOut(intTextOut(int x x,intint y y,const const CStringCString&strstr););返回值:非零。返回值:非零。参数说明:参数参数说明:参数x x,y y是文本的起点坐标,参数是文本的起点坐标,参数strstr是是CStringCString对象。对象。文本格式函数文本格式函数类属:类属:CString:FormatCString:Format原型:原型:void Format(LPCTSTR void Format(LPCTSTR lpszFormatlpszFormat,.);,.);返回值:无。返回值:无。参数说明:参数参数说明:参数l