VC单文档中画图
- 格式:wps
- 大小:79.00 KB
- 文档页数:8
VC++图像应用——绘制图形一、利用线条绘制多边形/利用线条绘制多边形和弧线1.创建一个单文档/视图结构的应用程序2.1在视图类的OnDraw编写如下代码1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成void CMy854View::OnDraw(CDC* pDC){CMy854Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CPen pen(PS_SOLID,2,RGB(255,0,0));CPen*pOldPen=pDC->SelectObject(&pen);//矩形pDC->MoveTo(50,30);pDC->LineTo(240,30);pDC->LineTo(240,120);pDC->LineTo(50,120);pDC->LineTo(50,30);//多边形pDC->MoveTo(300,50);pDC->LineTo(400,50);pDC->LineTo(450,100);pDC->LineTo(400,150);pDC->LineTo(300,150);pDC->LineTo(250,100);pDC->LineTo(300,50);//椭圆CRect rc(500,50,600,100);pDC->Arc(500,50,600,100,520,70,560,30);CBrush brush(RGB(255,0,0));pDC->FrameRect(rc,&brush);pDC->SelectObject(pOldPen);}2.2程序3.成功运行程序二、利用制表位控制文本输出/将字符中的制表符按照指定的宽度转换为空格输出1.创建一个单文档/视图结构的应用程序2.1在视图类的OnDraw编写如下代码1.点击文件→选择新建→选择MFC APP ;填写工程名;2.点击确认→选择单文档→点击完成void CMy854View::OnDraw(CDC* pDC){CMy854Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rc(20,100,80,160);pDC->Rectangle(rc);CRect RndRC(20,100,80,160);pDC->RoundRect(RndRC,CPoint(10,10));CPointpts[6]={CPoint(300,50),CPoint(400,50),CPoint(4 50,100),CPoint(400,150),CPoint(300,150),CPoin t(250,100)};pDC->Polygon(pts,6);}2.2程序3.成功运行程序三、绘制空件外观/在窗口中绘制空件1.创建一个单文档/视图结构的应用程序2.1在视图类的OnDraw编写如下代码3.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→4.选择单文档→点击完成void CMy854View::OnDraw(CDC* pDC){CMy854Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rc(50,50,120,80);pDC->DrawFrameControl(rc,DFC_BUTTON ,DFCS_BUTTONPUSH);CRect CapRC(130,50,160,80);pDC->DrawFrameControl(CapRC,DFC_CAP TION,DFCS_CAPTIONHELP);CRect ScrollRC(170,50,200,80);pDC->DrawFrameControl(ScrollRC,DFC_SC ROLL,DFCS_SCROLLCOMBOBOX);}2.2程序3.成功运行程序四、填充图形区域/填充区域的方法1.创建一个单文档/视图结构的应用程序2.1在视图类的OnDraw编写如下代码1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成void CMy854View::OnDraw(CDC* pDC){CMy854Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rc(30,40,100,120);CBrush brush(RGB(128,128,128));pDC->FillRect(rc,&brush);brush.DeleteObject();CBitmap bmp;bmp.LoadBitmap(IDB_BK);brush.CreatePatternBrush(&bmp);CRect bmpRC(110,40,200,120);pDC->FillRect(bmpRC,&brush);bmp.DeleteObject();brush.DeleteObject();CRect rectrc(170,50,200,80);CRect hrc(280,60,350,140);pDC->Rectangle(rectrc);pDC->Rectangle(hrc);HRGNhRect=CreateRectRgn(210,40,300,120);HRGNhrgn=CreateRectRgn(280,60,350,140);HRGN hret=CreateRectRgn(0,0,0,0);CombineRgn(hret,hRect,hrgn,RGN_AND);brush.CreateSolidBrush(RGB(255,0,0));CRgn rgn;rgn.Attach(hret);pDC->FillRgn(&rgn,&brush);brush.DeleteObject();rgn.Detach();DeleteObject(hRect);DeleteObject(hrc);DeleteObject(hret);}2.2程序3.添加位图IDB_BK4.成功运行程序。
第五讲绘图程序-1本例知识要点单文档界面应用程序的基本概念应用程序对象主框架窗口对象文档模板在视图上绘图画笔SDI界面应用程序的基本概念SDI在同一时刻只能打开一个文档(写字板),新建或打开另一文档会自动关闭当前的活动文档;AppWizard产生五个类:见VC开发环境。
应用程序对象应用程序对象(theApp)表示一个程序,它由程序类CSDIApp创建的对象;类CSDIApp从CWinApp类派生而来,内部定义了三个成员函数;函数InitInstance用于对象的初始化,其核心是创建主窗口、文档模板、文档和视对象、显示程序窗口和更新窗口内容;菜单、工具栏按钮、加速键等的WM_COMMAND命令消息,由消息处理函数或虚函数处理消息;应用程序的入口处--SDIApp.cpp文件,其中theApp是一个全局变量,执行程序时立即为其分配内存,然后调用对象的构造函数和InitInstance函数初始化应用程序,接着调用其Run成员启动消息循环,并将消息分配给主框架窗口对象、视图对象、文档对象和应用程序对象。
消息循环获得WM_QUIT消息后结束循环,Run函数调用应用程序的成员函数ExitInstance来关闭程序窗口。
主框架窗口对象主框架窗口对象表示应用程序界面,由类CMainFrame创建的对象,继承了CFrameWnd的许多功能。
其他成员函数:1.OnCreate响应WM_CREATE消息,在Windows创建一个窗口之后和显示一个窗口之前发出;2.PreCreateWindow函数用来修改窗口的外观;3.诊断函数AssertValid和Dump;主框架窗口对象能接收标准的Windows消息(如鼠标、键盘、WM_PAINT、WM_TIMER消息等等)和命令消息。
SDI应用程序中,文档窗口即是主框架窗口。
文档模板文档模板负责创建文档、视图和框架窗口。
SDI应用程序对象只能拥有一个文档模板;MDI为其支持的每种文档类型生成不同的文档模板(如MS OFFICE WORD程序)。
VC++程序设计实验报告一、实验目的掌握MFC编程二、实验内容用MFC向导创建单文档应用程序,实现一个简单的画图程序。
●使用C++语言实现●使用VS2010集成开发环境开发●使用MFC应用程序开发框架三、实验步骤●基本功能描述1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-5可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
●设计思路1. 对需要用到的变量进行初始化。
2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
4. 选择图形或其它属性,可进行下一次绘制。
●软件设计A 设计步骤1.创建单文档创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。
创建成功后,系统自动生成相应的类,如图3所示。
图1 创建工程图2 创建单文档图3 生成类2.编辑菜单打开资源视图中的Menu-IDR_MAINFRAME添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。
实验4 Windows绘图实验目的1、掌握设备描述表2、掌握CDC类和CGDIObject类及其派生类的应用3、掌握CFont类的一个用4、定时器的应用与定时消息的处理实验内容:本节主要掌握Windows的绘图功能,主要内容包括图形设备接口、CDC类和CGDIObject 类、用CDC类进行图形绘制、用CGDIObject类的派生类CPen类和CBrush类进行绘图。
还讲述了用CGDIObject类的派生类CFont类设置字体以及用定时器实现简单的动画效果。
1.设备描述表设备描述表(Device Context)是一个用来确定任何设备的GDI出书的位置和形象属性的集合。
应用程序病不能直接访问设备描述表,但是应用程序可以使用设备描述表的句柄来间接地存取设备描述表及其属性。
创建的设备描述表包含了它所有的属性和默认值。
在Windows环境下,所有图形文字的输出都是基于坐标系统的,图形坐标系统与基于文本的函数所使用的坐标系统是一致的。
默认的坐标系统以用户区域的左上角为原点,向右的每一个像素表示沿正X轴的一个单位,向下的每一个像素表示沿正Y轴的一个单位。
3.绘图工具绘图工具包括画线的画笔、填充图形内部以及书写正文的字体工具。
所有这些工具的使用都要经过3个步骤,即建立工具、选择工具和使用完后删除相应的工具。
4.CDC类和CGDIObject类CDC类封装了Windows的DC(设备描述表),是MFC设备环境类的基类,其他的MFC设备环境类都是CDC类的派生类。
CDC类指针的生成是用GetDC()函数来实现的,CDC类指针的销毁是用ReleaseDC()函数来实现的。
如:CDC *pDC=GetDC();ReleaseDC(pDC);CGDIObject类及其派生类只封装了GDI中的部分实体,所以CGDIObject类和GDI并不具有想CDC类和DC那样的对应关系。
CGDIObject类具有以下几个主要派生类:CBitmap:位图CBrush类:画刷CPen类:画笔CPalette类:调色板CFont类:字体CRgn类:区域构造CGDIObject派生类的对象通用有两种方法:(一)一步构造法。
vc 画图篇(整理资料)Windows中负责图形输出的是GDI(即Graphic Device Interface,图形设备接口)。
这是Windows与硬件无关的图形输出模式的体现。
GDI建立在硬件抽象层(HAL)之上,屏蔽了不同输出设备之间的差异,从而为用户提供了一个统一的“标准输出设备”。
但是,与DOS不同,Windows是多任务、进程独立的,每一个窗口都应该有一个独立的输出通道。
这样,GDI 又使用了一种简单的机制来保证在窗口中画图的不同程序之间能共享“设备”而又互不干扰。
这个机制就是DC(Device Context,设备描述表)。
有人把DC比喻成画家的画室,这里有画布、画刷、画笔等等很多工具。
就画布而言,画布形式可以不同,是的,我可以在桌上(desktop)的纸上(window)画,也可以就画在桌面上,还可以画在墙上(管的着吗!^_^)。
为此,Windows MFC提供了四种不同的DC环境(封装为C++类),以标明不同的绘制权限,即:CPaintDC, 用于在窗口客户区画图(仅限于在OnPaint处理函数中使用);CClientDC, 也用于在窗口客户区画图(限于在OnPaint处理函数之外使用);CWindowDC, 用于在窗口内任意地方画图,包括非客户区;CMetaFileDC, 用于绘制GDI图元文件。
这些类都可以直接实例化,如:CPaintDC dc(this);//this表示此DC所属窗口为当前窗口创建了一个CPaintDC对象dc。
CWindowDC一般不常用,如果想在窗口非客户区画图,可借助OnNcPaint()处理函数捕获WM_NCPAINT消息。
刚才说了,DC中还有画刷、画笔等。
这些都是DC的属性,可通过DC自身(调用其成员函数)获得。
DC属性包括文本颜色、背景颜色、映射模式、绘图模式、当前位置、当前画笔(刷)和当前字体等。
画笔(Pen)、画刷(Brush)都是独立的GDI对象,可通过CDC成员函数SelectObject()选入DC。
第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。
下面是VC下简单绘图函数的基本说明。
1.系统支持操作系统版本:Windows 2000 及以上系统。
编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。
2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。
安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。
安装程序不会修改注册表或者本机的任何文件。
如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。
3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。
VC基本绘图文档[键入作者姓名]VC基本绘图文档设计一个矢量图形绘制程序一、运行环境:Microsoft Visual C++ 6.0二、目标与任务:1.使设计的程矢量绘制图形序具有画点、画线、画多边形、画矩形的功能;2.其中所绘制的点、线、多边形具有保存的功能,并且能保存入数据库,数据库采用的access,文件名为shp.mdb,在设计的程序中使用ODBC访问数据库,DSN=shp,无同户名与密码;3.设计的绘图程序能读入数据库中的记录,而且可以通过自己建立的菜单[数据库操作]的子菜单[记录集导出]导出,显示在自己事先设计好的对话框设置中4.建立的[设置]菜单功能,其子菜单有[点的大小]、[线的宽度]功能。
三、程序总体结构图:四、各个功能模块详细设计1.画点画点流程图画点主要代码:2.画线画线主要代码:3.画矩形画矩形主要代码:4.画多边形画多边形的主要代码:五、数据库设计说明1.构造数据库,数据库采用access,.建立数据表,文件名为shp.mdb如下图5.2.创建ODBC数据源Windows中的ODBC组件出现系统的“控制面板”管理工具中,如下图所示:双击ODBC图标,进入ODBC数据源管理器。
然后创建用户用户DNS,过程如下下图:单击“添加”按钮,弹出创建数据源对话框,按下图选择用户所需的驱动程序(如下图):单击“完成”按钮进入指定驱动程序的安装对话框,单击“选择”按钮,将前面创建的数据库调入,结果如下图所示:单击“确定”按钮。
3.在自己的绘图MFC中绑定数据源建立新的类CShpSet类,其基类是CRecordset,单击“OK”,进入选择数据源对话框,按下图进行选择:如下图进入选择数据表对话框,选择自己已经建立过的shp.mdb数据表,如下图所示:单击“OK”,完成绑定数据源。
6.在MFC中建立显示此记录集对话框,其设计如下图所示:添加基于上图对话框的相应的类DisplayDataBaseDlg,其基类是CDlg,用于显示记录集,并建立相应的数据库操作菜单,用来显示记录集。