MFC简单绘图

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本章内容2.1MFC上机操作步骤2.2基本绘图函数2.3本章小结2.4习题2.2MFC上机操作步骤关于工具VisualC++6.0是目前使用极为广泛的可视化编程平台。使用VC++语言开发的图形,与使用TurboC语言开发的图形相比,不仅可以显示真彩色,而且可以实现交互式绘图。MicrosoftFoundationClassLibrary微软基类库MFC是以C++形式封装的WindowsAPI(ApplicationProgramInterface),包含了一百多个已经定义好的常用类。MFC的上机操作过程启动MicrosoftVisualC++6.0从【File】菜单中选择【New】命令,弹出【New】对话框,切换到【Projects】选项卡。在左边窗口中选择MFCAppWizard(exe),在右边的Projectsname文本框中键入应用程序名,这里输入Test,在Location文本框中出现用于存放应用程序的根目录,这里设置为D:\Test。其余保持默认值。如图所示。单击【OK】按钮。在对话框【MFCAppWizard-Step1】中,选中SingleDocument单选按钮,其余保持默认值,如图所示。单击【Finish】按钮结束。完成上述步骤后,应用程序Test的框架即被生成,出现程序工作区。如图所示。在工作区的【ClassView】面板中显示所创建的类和成员函数在【ResourceView】面板中显示所创建的资源在【FileView】面板中显示源程序文件,主要包括程序源文件(*.CPP)、头文件(*.h)和资源文件(*.ico、*.bmp等)从【ClassView】面板可以看出CTestApp是应用的主函数类,用来处理消息。MFC中的数据是存储在CTestDoc类文档中结果的显示是在CTestView类中文档类负责管理和维护数据本身视图类负责处理用户鼠标和键盘的操作全部展开FileView面板后,显示如图的界面内容本书后续的编程过程中一般使用的是CTestView类的TestView.h头文件和TestView.cpp源文件。OnDraw(CDC*pDC)函数voidCTestView::OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);}pDC定义为CDC类的指针。pDoc通过GetDocument()函数得到了指向文档类CTestDoc的指针。OnDraw(CDC*pDC)函数voidCTestView::OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);}ASSERT_VALID(pDoc)函数使pDoc指针有效。使用pDC指针,可以对CDC类的成员函数进行操作。注意:OnDraw函数是由系统框架直接调用的,程序一运行就会自动执行。!按钮点击工具条上的“!”按钮,就可以直接编译、运行程序尽管未编写一句代码,但Test程序已经形成一个可执行程序框架返回2.2基本绘图函数在Windows平台上,应用程序的图形设备接口(GraphicsDeviceInterface,GDI)被抽象化为设备上下文(DeviceContent,DC)在微软基类库MFC中,CDC类是定义设备上下文对象的基类,所有绘图函数都在CDC基类中定义。2.2节内容2.2.1CDC类结构和GDI对象2.2.2映射模式2.2.3CDC类的主要绘图成员函数2.2.4设备上下文的调用和释放2.2.5VC++绘制图形的几种方法2.2.1CDC类结构和GDI对象1.CDC类CDC类有4个派生类CClientDC类显示器客户区设备上下文类CClientDC只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏的空白区域)进行绘图点(0,0)是客户区的左上角其构造函数调用GetDC函数其析构函数调用ReleaseDC函数CMetaFileDC类Windows图元文件设备上下文类CMetaFileDC封装了在一个Windows图元文件中绘图的方法图元文件是一系列与设备无关的图片的集合,由于它对图像的保存比像素更精确,因而往往在要求较高的场合下使用例如,AutoCAD中的图像保存等。CPaintDC类是成员函数OnPaint中使用的显示器上下文类CPaintDC只在处理WM_PAINT消息中使用,用户一旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)的指针来使用CPaintDC类的构造函数会自动调用CWnd::BeginPaintCPaintDC类的析构函数则会自动调用CWnd::EndPaintCWindowDC类整个窗口区域的显示器设备上下文类,包括客户区和非客户区CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角其构造函数调用GetWindowDC其析构函数调用ReleaseDC2.常用绘图类常用绘图类常用绘图类CPoint类:存放点坐标(x,y)。CRect类:存放矩形左上角顶点和右下角顶点的坐标(top,left,right,bottom)Csize类:存放矩形的宽度和高度的坐标(cx,cy),其中cx为矩形的宽度,cy为矩形的高度。3.绘图工具类绘图工具类绘图工具类CGdiObject类:GDI绘图工具的基类,一般不能直接使用。CBitmap:封装了一个GDI位图,提供位图操作的接口。CBrush类:封装了GDI画刷,可以选作设备上下文的当前画刷。画刷用于填充图形内部。绘图工具类CFont:封装了GDI字体,可以选作设备上下文中的当前字体。CPallette:封装了GDI调色板,提供应用程序和显示器之间的颜色接口。CPen:封装了GDI画笔,可以选作设备上下文的当前画笔。画笔是用于绘制图形边界线。2.2.2映射模式把图形显示在屏幕坐标系中的过程称为映射根据映射模式的不同可以分为逻辑坐标设备坐标逻辑坐标的单位是米制尺度或其它与字体相关的尺度设备坐标的单位是像素映射模式模式代码坐标单位坐标系特征MM_TEXT一个像素设备坐标。屏幕左上角为坐标原点,X轴向右,Y轴向下。MM_LOMETRIC0.1mm逻辑坐标。坐标原点位置可以自由设置,X轴向右,Y轴向上。MM_HIMETRIC0.01mm逻辑坐标。坐标原点位置可以自由设置,X轴向右,Y轴向上。MM_LOENGLISH0.01inch逻辑坐标。坐标原点位置可以自由设置,X轴向右,Y轴向上。MM_HIENGLISH0.001inch逻辑坐标。坐标原点位置可以自由设置,X轴向右,Y轴向上。映射模式模式代码坐标单位坐标系特征MM_TWIPS1/440inch或1/20点逻辑坐标。坐标原点位置可以自由设置,X轴向右,Y轴向上。MM_ISOTROPIC用户自定义,X轴和Y轴比例相等逻辑坐标。坐标原点位置可以自由设置,X轴和Y轴方向自定义。MM_ANSIOTROPIC用户自定义,X轴和Y轴比例独立设置逻辑坐标。坐标原点位置可以自由设置,X轴和Y轴方向自定义。映射模式在缺省情况下,一般使用的是设备坐标系MM_TEXT,坐标原点位于客户区的左上角,X轴水平向右,Y轴垂直向下,坐标基本单位为一个像素。1.设置映射模式函数类属:CDC::SetMapMode原型:virtualintSetMapMode(intnMapMode);返回值:原映射模式。参数说明:nMapMode是表2-1的模式代码。2.设置窗口范围函数类属:CDC::SetWindowExt原型:virtualCSizeSetWindowExt(intcx,intcy);返回值:原窗口范围的CSize对象。参数说明:cx窗口x范围的逻辑坐标,cy窗口y范围的逻辑坐标。3.设置视区范围函数类属:CDC::SetViewportExt原型:virtualCSizeSetViewportExt(intcx,intcy);返回值:原视区范围的CSize对象。参数说明:cx视区x范围的逻辑坐标,cy视区y范围的逻辑坐标。4.设置视区坐标原点函数类属:CDC::SetViewportOrg原型:virtualCPointSetViewportOrg(intx,inty);返回值:原视区原点的CPoint对象。参数说明:参数x,y是视区的新原点坐标。2.2.3CDC类的主要绘图成员函数1.绘制像素函数类属:CDC::SetPixel原型:COLORREFSetPixel(intx,inty,COLORREFcrColor);设置某像素点的RGB值1.绘制像素函数参数说明:SetPixel函数中,COLORREF是32位颜色数据类型;第一和第二个参数x,y是像素点位置的逻辑坐标值,第三个参数crColor是像素点的颜色值,COLORREF型变量可以利用RGB(bRed,bGreen,bBlue)来指定相应的颜色值,每种颜色用一个字节表示,可以被设定为0~255之间的任意值,0代表无色,255代表全色。2.获取像素颜色函数类属:CDC::GetPixel原型:COLORREFGetPixel(intx,inty)const;返回值:指定像素的RGB值。参数说明:得到指定像素的RGB颜色值例4在屏幕的(20,20)坐标位置处绘制一个红色像素点。然后取出该像素点的颜色,在屏幕的(60,20)坐标处绘制一个相同颜色的像素点。voidCTestView::OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);COLORREFc;pDC-SetPixel(20,20,RGB(255,0,0));c=pDC-GetPixel(20,20);pDC-SetPixel(60,20,c);}语句:COLORREFc;注释:变量c用于存放像素点的颜色值语句:pDC-SetPixel(20,20,RGB(255,0,0));注释:在屏幕的(20,20)坐标位置处,绘制一个红色的像素点语句:c=pDC-GetPixel(20,20);注释:c保存该像素点的颜色语句:pDC-SetPixel(60,20,c);注释:在像素点(60,20)处以颜色值c绘制一个像素点。3.画笔函数画笔是用来绘制直线、曲线或图形的边界线,是绘图工具类之一画笔通常具有线型、宽度和颜色三种属性画笔的线型通常有实线、虚线、点线、点划线、双点划线、不可见线和内框架线7种,这些线型都是以PS_为前缀的预定义标识符3.画笔函数默认的画笔是一个像素单位的黑色实线要想更换画笔,可以在创建新画笔对象后,将其选入设备上下文,就可使用新画笔进行绘图。画笔的风格风格代码线型宽度颜色PS_SOLID实线任意指定纯色PS_DASH虚线1(不可任意指定)纯色PS_DOT点线1(不可任意指定)纯色PS_DASHDOT点划线1(不可任意指定)纯色PS_DASHDOTDOT双点画线1(不可任意指定)纯色PS_NULL不可见线1(不可任意指定)纯色PS_INSIDEFRAME内框架线任意指定纯色(1)创建画笔函数类属:CPen::CreatPen原型:BOOLCreatePen(intnPenStyle,intnWidth,COLORREFcrColor);返回值:非零。参数说明:第一个参数nPenStyle是画笔的风格代码第二个参数nWidth是画笔的宽度第三个参数crColor是画笔的颜色。(2)选择画笔函数类属:CPen::SelectObject原型:Cpen*SelectObject(Cpen*pPen);返回值:被替代画笔的指针。参数说明:参数pPen是Cpen类的被选中的新画笔对象指针。本函数把原画笔换成新画笔,同时返回指向原画笔的指针

1 / 112
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功