基于MFC的绘图软件设计_第1页
基于MFC的绘图软件设计_第2页
基于MFC的绘图软件设计_第3页
基于MFC的绘图软件设计_第4页
基于MFC的绘图软件设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 摘要绘图软件在多种工作中都有着很多的运用,而当前很多办公中的中小型绘图软件的缺乏使得小型绘图软件的开发显得十分必要。因此论文着眼于当前使用较多的C+语言作为软件的开发语言。运用C+软件中的软件基础库类(MFC)进行实用的绘图软件的开发。MFC作为C+封装技术的主要体现,不仅拥有C+语言在绘图方面上的各类优势,同时与Windows系统能够有较多的信息交互。因此基于MFC的绘图软件可以较好的将被处理的图片从抽象变成直观。同时使用MFC设计绘图软件的过程中运用图形设备接口(GDI)来与Windows进行互相的信息交互。运用MFC技术编写出的绘图软件有着界面简洁、功能较多等诸多优点。因此基于MFC的

2、绘图软件设计为很多中小型企业或工作室的绘图提供一套较为完善的解决方案。关键字:绘图软件, MFCAbstractDrawing software in a variety of work has a lot of use, and many of the current office in the lack of small and medium drawing software is the use of graphics software development is very necessary. So the paper focuses on the current use of mo

3、re C + + language as a software development tools. The use of C + + software in the software base library (MFC) for practical drawing software development. MFC as the main embodiment of C + + encapsulation technology, not only has the C + language in the drawing of various advantages, while the Wind

4、ows system can have more information exchange. So MFC-based drawing software can be better to be processed from the abstract image into an intuitive. At the same time the use of MFC design graphics software in the process of using the graphical device interface (GDI) to communicate with each other W

5、indows information. The use of MFC technology to write the graphics software has a simple interface, more features and many other advantages. So MFC-based drawing software design for many small and medium enterprises or studio drawings to provide a more complete solution.Keywords:Drawing software, M

6、FC1、 绪论1.1 课题来源及意义随着计算机绘图辅助设计系统(即CAD系统)的渐渐成熟,图形绘制软件已经成为学校,工厂及各种小型工作室等不可缺的一大工具,大型绘图软件AutoCad ,Solidworks,Pro/E,MatLab也被人们广泛使用,但由于占用资源过大,运行速度慢,界面操作较为复杂,不能很好满足大部分普通人需求。伴随着C+计算机高级语言的应用,MFC工具的实现是的小型软件的开发更加的便捷,MFC凭借着其出色的封装技术和便捷简单的使用特性使得开发便捷的小软件更加的方便和快捷,因此诞生了简单易懂的MFC绘图软件。MFC绘图软件凭借着其占用资源小,方便快捷,功能强大, 操作简单,便于

7、普及,很好的解决了人们日常生活中的问题。本文所设计的绘图软件正是基于MFC的这一特点。选用MFC来搭建绘图软件的整体框架。完善绘图软件的各种功能。使其能够较好的适应工程人员所赋予它们的工作。从而提高软件的实用性。1.2 绘图软件的国内外发展现状在我国处于新石器时代的时候,智慧的中国人民就可以完成一些几何图形、花纹的绘制和雕刻,具有简单的图示能力。最早在春秋战国时期,对于绘图工具的色剂就有着很明确的记载,因此,可以看出绘图工具在人们日常生活中的重要地位。因此绘图软件的设计工作显得尤为重要,最早在春秋战国时期,我国人民就开始运用设计图来对工程建筑进行建设和改进,因此在工程中,提前绘制所需要完成工作

8、的设计图显得至关重要。自秦汉以来,我国对于绘图工具和绘图方法的记载就已经是数不胜数。根据图纸可以制造出各种各样的建筑和器具,在唐宋时期营造法式一书可以说是一本极其详细的绘图巨作。与此同时,在欧洲十八世纪,轰轰烈烈开展的工业革命促进了科学的发展和技术的进步。法国著名的数学家和工程师蒙力总结了前任的各种绘图方法。创立了现代几何学的前身。奠定了绘图软件在科学技术中的作用,并在农业、军事、商业、建筑业等各个领域等到了长足的发展和大量的运用。可以说这是绘图推动科学进步的一大强力佐证。随着科学技术和人类生产力的大规模发展,二战结束后,在20世纪50年代美国科学家发明了世界上第一台计算机埃尼阿克,同时,随着

9、硬件系统的发展各种计算机配套的软件也拍蓬勃的发展起来,这其中就有计算机绘图软件。在60年代初期计算机的普及使用使得CAD技术在绘图领域的大量使用,传统的人为手工绘图逐渐的北计算机绘图所取代。80年代中期之后,系统构造由过去的单一功能变成综合功能,出现了计算机辅助设计与辅助制造联成一体的计算机集成制造系统;随着科技的进一步发展和提升。各种新型的技术的出现(如图像灰度处理、图像捕捉等技术),各种学科交叉也使得新固化技术、网络技术、多处理机和并行处理技术的应用越来越广阔。而这些技术的大大发展也极大地提高了计算机绘图辅助设计系统的性能;使计算机绘图辅助设计系统问题求解能力大为增强,设计过程更趋自动化。

10、目前,计算机绘图辅助设计系统已经被广泛运用到建筑设计、电子和电气、科学研究、机械设计、软件开发、机器人、服装业、出版业、工厂自动化、土木筑、地质、计算机艺术等各个领域。在这些领域中发挥了越来越重要的作用。计算机上各种软件如CAD软件、PS工具的诞生和发展使得绘图的形式与以往变得不同,绘图变得更加快捷有效和迅速,在我们日常生活中的作用也越来越重要。目前,主流的绘图软件有AutoCAD、Photoshop等,但是这些都是适用于大型机械的绘图软件,对于办公室里的小心绘图软件,或者课堂上临时演示的绘图软件来说都十分的缺乏。因此开发一种小型的便携式绘图软件十分有必要。1.3 本文主要内容本文的主要内容为

11、通过对MFC的了解进而了解日常绘图软件总所需要的一些常用功能,阅读相关的文献资料了解MFC开发的流程和MFC技术的特点,结合实际的需求基于MFC设计一个小型的绘图软件,设计运用C+中的各种函数来丰富绘图软件的功能。最后使用Visual Studio软件作为软件的开发工具,完成对软件总体设计。1.4 本章小结本章主要叙述了随着科学技术的快速发展,计算机绘图辅助设计系统逐渐被广泛运用到生活中的各个领域,但由于目前的大部分绘图软件对人们起步要求过高,操作过于复杂,很难解决人们的问题。本论文研究的MFC绘图软件是基于C+高级语言的运用所编译的一款小型绘图软件,在众多画图软件中,凭借着体积小巧,功能强大

12、,简单易懂等众多优点,成为炙手可热的绘图软件。2、MFC及开发工具简介2.1 Visual Studio 简介Microsoft Visual Studio(简称VS软件)是美国微软公司在1997年的时候开发的一种编程语言开发平台,面向的开发语言从一开始的C/C+、VB等开发语言。经历多年的发展,Visual Studio从当初单一的集成开发环境(IDE)演化成现在多种语言集成开发平台。相对于别的开发平台,Visual Studio集成了代码编写、程序调试、编译功能、分析功能等多种功能。本文设计的基于MFC的绘图软件即是以Visual Studio作为主要的开发工具。通过在Visual Stu

13、dio中进行编译和调试从而完成绘图软件的开发。在本文中将会运用到Microsoft Visual Studio软件中的各种功能函数及多种调用指令,将在下文中一一介绍。2.2 Windows API函数简介Windows.API(Application Programming Interface)就是windows应用程序接口。例如Win32就是Windows.API函数的一种。同时针对每一个应用程序都添加了相对应的框架来实现。而这些功能都会大大的减少开发人员的工作量,使得开发的流程和周期变短。本文使用Visual Studio的MFC工具同时结合Windows GDI+合成设计实现了一个绘图软

14、件,软件包括绘图面板,画笔工具(包括矩形的绘制、直线的绘制、椭圆的绘制),文件的保存与打开,颜色面板(选择画笔的颜色)、线条磅数控件(选择线条的粗细)等这几类主要的功能。Windows API中有很多有用的函数,而这些函数的作用也是多种多样,但是总的来说,这些函数的作用可以分为以下的几类。(1)基本服务;(2)组件服务;(3)用户界面服务;(4)图形多媒体服务;(5)消息和协作;(6)网络;(7)Web服务。2.3 绘图所需要运用的Windows API函数简介Windows API函数中有大量的功能函数可以运用到我们的绘图软件中,在本次设计中,主要运用的Windows API绘图函数有以下种

15、类,其中每一种绘图函数的种类都在右边给出了标识:AngleArc函数 用一个连接弧画一条线;Arc函数 画一个圆弧;BeginPath函数 启动一个路径分支;CancelDC函数 取消另一个线程里的长时间绘图操作;Chord函数 画一个弦;CloseFigure函数 描绘到一个路径时,关闭当前打开的图形;CopyEnhMetaFile函数 制作指定增强型图元文件的一个副本(拷贝);CopyMetaFile函数 制作指定(标准)图元文件的一个副本;CreateBrushIndirect函数 在一个LOGBRUSH数据结构的基础上创建一个刷子;CreateDIBPatternBrush函数 用一幅

16、与设备无关的位图创建一个刷子,以便指定刷子样式(图案);CreateEnhMetaFile函数 创建一个增强型的图元文件设备场景;CreateHatchBrush函数 创建带有阴影图案的一个刷子;CreateMetaFile函数 创建一个图元文件设备场景;AbortDoc函数 取消一份文档的打印;AbortPrinter函数 删除与一台打印机关联在一起的缓冲文件;AddForm函数 为打印机的表单列表添加一个新表单;AddMonitor函数 为系统添加一个打印机监视器;AddPort函数 启动“添加端口”对话框,允许用户在系统可用端口列表中加入一个新端口;AddPrinter函数 在系统中添加

17、一台新打印机;AddPrinterConnection函数 连接指定的打印机;AddPrinterDriver函数 为指定的系统添加一个打印驱动程序;AddPrintProcessor函数 为指定的系统添加一个打印处理器;AddPrintProvidor函数 为系统添加一个打印供应商;AdvancedDocumentProperties函数 启动打印机文档设置对话框;ClosePrinter函数 关闭一个打开的打印机对象;ConfigurePort函数 针对指定的端口,启动一个端口配置对话框;ConnectToPrinterDlg函数 启动连接打印机对话框,用它同访问网络的打印机连接;2.4

18、GDI+技术原理GDI+从Windows系统中开始引入一些列的先进技术来实现一些常用的功能。而GDI+技术则是GDI技术的强化版本。其中最主要的地方是强化了可视化的属性。设计完成的操作界面和图像的边界显示都有很大的改进。相比于旧版的GDI,新的GDI+还可以提供多维的矢量图形的处理。在处理完这些图片后,GDI+技术提供了多种格式图片之间的互相转换。包括常用的JEPG、GIF、BMP等。同时,改进后的GDI+也可以生成Flash格式的动画,大大丰富了所能处理的文件种类。论文在选用GDI+技术作为开发的主要技术还有一点即在于新的GDI+技术可以高效稳定的进行图片的组合和显示。通过使用ARGB的值来

19、对画笔的颜色进行调整。而这些优点都使得运用MFC工具来进行绘图软件的开发十分的必要。2.5 MFC开发应用介绍MFC(MicrosoftFoundationClasses),其中文意思为微软基础类库的。意思是包含了微软公司大部分运行,是微软公司实现C+类库的一种,应用的场合十分的广泛。其中对于MFC工具来说。主要封装的大部分都为windows API函数,利用这些windows API函数完成调试、编译等各种工作。同时Microsoft Visual Studio本身也是编译器的一种。但是对于一个大型的project文件来说。他需要一个开发的内核来支持整个project的运行和实现,同时MFC

20、也为C+程序的搭建提供了一个平台、一个框架、C+程序因而可以完整的实现。在调用MFC库里面的各种函数的时候,也具有各种各样的便利和优势,虽然在表面上无法看到MFC是如何运行的,但是封装好的各种各样的功能函数仍然为方便的搭建各类软件提供了多种的途径和,但是也同时可以看出共用了一个框架导致了应用到不同的程序中时。适用性往往不是很高。这样各类函数搭建时的针对性并不是很强。但是这依然无法阻挡MFC的各种优势。Windows编程技术:在Windows编程机制中,应用程序会按照一定顺序来执行。即按照“事件消息处理”来进行运行。当运用MFC定义画笔运行的时候,就相当于某个事件的发生,电脑中的windows处

21、理器就会根据发生事件的不同而产生不同的消息。并且将相对应的消息发送到指定的程序中(例如MFC定义的画笔)。对应的程序就会根据相对应的消息来做出不同的反应。其中消息是API的重点。而在MFC的编程类库中,包含的类非常的多。但是大体上可以分为界面设计、文件操作、数据库访问等几个部分。MFC的方便之处即是提供给操作者一个方便的开发平台。使得操作者不必从头编写程序。而通常的GDI+编程技术如图2-1所示图2-1 应用程序和对象之间的关系2.6 本章小结本章主要介绍了基于MFC设计绘图软件时主要运用到的核心的技术以及MFC技术的概述,本章节中,对于MFC的叙述较为多。对比了MFC软件和其他软件类型的优缺

22、点等等。为后面的基于MFC的编程打下了基础。3、软件功能模块设计论文设计的基于MFC的绘图软采用的是集成MFC和GDI+编程技术合二为一。主要以线、矩形、椭圆等工具组合成一个图像。同时对于绘制完毕的图片可以储存为规定的格式。3.1 软件总体功能设计本论文设计的绘图软件分为两大部分、即基础功能和高级功能。基本功能包括基本画图功能,主要针对的常见的画图功能。包括直线、椭圆、矩形绘图工具,而高级功能则是对基础功能的一些补充,包括存储功能、颜色功能、线条磅数修改等功能。具体如下所示:(1)图形绘制 运用visual studio的MFC工具来搭建。使用C+语言编写。主要功能为绘制直线、矩形、椭圆等几个

23、控件;(2)文字功能 可以在图片中编辑文字,并修改文字的大小等等;(3)线条粗细的修改 通过修改线条的磅数来改变线条的粗细;(4)图形的色彩编辑 使用色彩编辑模块对绘制图形的色彩进行编辑,绘制有多种色彩的图形;(5)文件保存功能的设计 包括文件的存储和打开、文件的调用等等;(6)打印模块的设计 包括打印预览、打印设置等。3.2软件模块设计软件的主要设计模块包括如下:(1) 绘图模块设计 直线、椭圆、矩形工具的绘制(2) 工具箱模块的设计 包括线条粗细的修改、线条颜色的选择等等(3) 绘画保存模块 实现绘制图片的保存功能。包括保存图片的格式的选择。(4) 打印模块 包括打印预览和打印设置等功能。

24、软件的系统基于MFC工具,系统结构设计图如下:图3-1 绘图软件系统结构设计图3.3 本章小结本章节中主要叙述了基于MFC的绘图软件设计的主要流程和软件分步骤设计的顺序和基本软件结构。论文正是依照这个结构完成了整个软件的设计和程序的编写。4、软件的整体结构软件设计的工程文件包括如下的几个大项,如图4-1所示其中各个部分都有其自己的独特作用。论文将会分段进行程序的简单结构的简单介绍。图4-1 绘图软件程序结构图(1) Draw.vcxproj文件Draw.vcxproj文件为整个project文件中项目的主程序文件。包含有文件的总体信息等各类重要的信息,以及有关使用应用程序向导选择的平台、配置和

25、项目功能的信息。Proj文件是整体绘图软件的打包合成。为整个工程文件提供必要的支持。(2)Draw.vcxproj.filters文件Draw.vcxproj.filters文件为 “应用程序向导”生成的VC+ 项目筛选器文件。该文件的主要包含有各类有关项目文件和筛选器之间的各类关联的信息。在本文所使用的IDE模块中,即可以通过Draw.vcxproj.filters文件来实现各类文件之间的相互关联例如,“.cpp”文件与“源文件”筛选器关联。(3)Draw.h文件这是应用程序的主头文件。包含整个工程文件中最重要的部分。其中.h文件有很多的种类,包括 Resource.h等多种声明文件。Dra

26、w.h文件在整个project文件中也占有举足轻重的作用。(4)Draw.cpp文件Draw.cpp文件为包含着应用程序CDrawApp的主应用程序的源文件。从Draw.cpp文件文件中可以调用CDrawApp 的主应用程序文件。Draw.cpp文件是工程文件的其实文件,从Draw.cpp文件中可以打开整个工程文件。(5)Draw.rc文件Draw.rc文件为project文件中所使用的各类关联Microsoft Windows资源的列表文件。包括的种类多种多样包括论文所设计的绘图软件中所需要的光标文件、位置文件、图标文件等等。而Draw.rc文件通常可以在Visual C+中进行修改和编译。

27、(6)resDraw.ico文件resDraw.ico文件为应用程序图标的图标文件。此图标保存在 Draw.rc文件中。当需要调用的时候便进行调用。包括MFC的系统图标、工具箱图标的保存等等。resDraw.ico必不可少,若缺少了resDraw.ico文件则整个界面都将崩溃。上面几类文件为工程文件中较为基础的几类文件之一,在MFC中还有大量的接口文件和程序文件。同时对于绘图软件的主框架窗口:在visual studio中。MFC的接口等程序包括以下几个文件:(1)MainFrm.h, MainFrm.cpp文件MainFrm.h, MainFrm.cpp文件中包含框架类 CMainFrame

28、,改两类文件为整个project文件中的核心文件,整个绘图系统的整体框架都在此类文件中。(2)resToolbar.bmp文件resToolbar.bmp文件为一种位图文件,该文件的作用为设计的绘图软件的工具栏创建平铺图像。为绘图软件的工具箱文件。而论文设计的绘图软件的初始工作栏和软件状态栏则是在CMainFrame类中进行构造。若想在设计的绘图软件中添加工具栏,则需要此类文件来在设计的程序中添加工具栏按钮。(3)DrawDoc.h、DrawDoc.cpp文件DrawDoc.h、DrawDoc.cpp文件包含CDrawDoc类函数。通过对这些文件进行编辑和优化可以实现图片的保存和加载功能。例如

29、保存文件时界面的加载。颜色面板。DrawDoc.h、DrawDoc.cpp 文件为保存打开工具栏提供了必要的支持。(4)DrawView.h、DrawView.cpp - 文档视图文件DrawView.h、DrawView.cpp文件包含 CDrawView 类。这些文件主要反映的是软件框架的搭建。将整个视图搭建于MFC中除了以上叙述的软件部分,在绘图软件的设计过程中,还有其他功能软件和其他的插件为绘图软件提供了大量的支持,具体的其他支持性部件如下所示:(1)ActiveX 控件ActiveX 控件一个用于互联网程序搭建的小程序,有的时候也被工程人员称之为插件程序。ActiveX 控件可以用来

30、播放动画等或者执行一些子线程程序。论文搭建的绘图软件多处地方需要ActiveX控件来提供必要的支持。(2) 打印和打印预览支持打印和打印预览功能的实现主要依靠的是MFC调用CView类中的部分函数来生产功能代码从而生产特定功能的代码来完成所需要完成的功能,进而实现打印、打印设置和打印预览命令在打印和打印预览这一模块的的设计中。MFC大量调用CView类中的成员函数。从而实现打印和打印预览的功能。除了以上的proj文件,绘图软件的编写过程中还需要一下的一些标准文件来辅助完成。标准辅助软件则软件的设计中起到的是底层软件的设计。为整个工程文件提供了必要的支持。其他标准文件包括以下:(3)StdAfx

31、.h, StdAfx.cppStdAfx.h, StdAfx.cpp文件用于生成名为 Draw.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。是绘图软件的底层构架,在软件的启动过程中起到了关键的作用。(4)Resource.hResource.h是整个工程文件中的标准头文件,可用于定义新的资源 ID。Microsoft Visual C+ 将读取并更新此文件。此文件也是绘图软件底层开发的软件之一。论文设计的基于MFC的绘图软采用的是集成MFC和GDI+编程技术合二为一。主要以线、矩形、椭圆等工具组合成一个图像。同时对于绘制完毕的图片可以储存为规定的格式。5

32、、软件的实现通过上文的叙述和软件的编写和调试,论文已经初步搭建起来了绘图软件的结构并完成绘图软件的编写工作。基于MFC设计的绘图软件各个功能模块的图形如下:5.1 主界面设计图5-1 主界面示意图主界面为软件的进入界面。主界面包括有绘图界面,文件的新建,保存、打印面板。同时主界面在设计工程中以简单明了为主。没有加入过多的旁栏,使得操作人员在操作的过程中能尽快的了解软件的结构和软件的主要功能,方便软件的普及和学习。主界面如图5-1所示。5.2 保存控件设计图5-2 保存控件设置保存控件中包括文件名的编写、保存类型的选择和保存位置的选择。和其他程序的保存设置的一样。保存的控制设置也较为的简捷,尽可

33、能的方便操作者的使用和掌握。保存工具如图5-2所示5.3 画笔工具的设计画笔工具的设计主要在工具栏中绘图按钮的下方。主要选择的画笔有四类、即点、直线、矩形和椭圆四种画笔形状的选择。通过选择不同的画笔形状,在画布上进行拖动即可绘制对应形状的图形,通过不同图形的组合即可完成相对应的图像的绘制。画笔工具的示意如图5-3所示。图5-3 画笔工具示意图5.4 颜色模块设计颜色工具模块的应用为改变画笔的颜色分类。使得画笔绘制出的颜色多种多样。主要设计的颜色空间如图5-4所示。包括常规的几种颜色和自定义颜色两种。其中自定义颜色可以按照使用者的喜好进行微调。图5-4 颜色模块示意图5.5 线条粗细改变通过MF

34、C提供的工具,改变细条设置的磅数即可改变线条的粗细。从而使得绘制出的画面有着更强的视觉感。改变线条磅数的工具栏如图5-5所示。图5-5 修改线条磅数示意图改变了细条粗细后的效果如图5-6所示。图5-6 改变线条粗细示意图5.6 本章小结本章节主要介绍了软件设计的具体成果。分步骤分工具箱的介绍了软件每一个部分的结构和功能,并对每一个工具箱设计的目的和意义进行了详细的描述。同时也分图片的展示了软件各个部分的显示效果。总结展望论文基于MFC设计了小型的绘图软件。并在visual studio中编译代码实现了绘图的功能,初步的完成了软件设计的任务。同时在软件中添加各类的工具,如画笔工具、颜色修改工具、

35、保存控制工具、打印和打印预览工具、线条磅数修改等工具。使得软件的功能得以丰富,能完成更多的特定功能。同时在完成的过程中,论文也暴露出了很多问题,软件仍然有很多未能完善的地方。例如工具较少,能以完成较为复杂的图形绘制。软件没有渲染的功能,对于图片的后期处理能力较差。同时软件在很多图片处理上都没有相对应的功能,软件仍需要进行继续的改进。才能使得软件有着适用性。附录 软件部分代码Draw.cpp代码/ Draw.cpp : 定义应用程序的类行为。#include "DrawDoc.h"#ifdef _DEBUG#define new DEBUG_NEW#endif/ CDrawA

36、ppBEGIN_MESSAGE_MAP(CDrawApp, CWinApp)ON_COMMAND(ID_APP_ABOUT, &CDrawApp:OnAppAbout)/ 基于文件的标准文档命令ON_COMMAND(ID_FILE_NEW, &CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, &CWinApp:OnFileOpen)/ 标准打印设置命令ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CDrawApp 构造C

37、DrawApp:CDrawApp()/ 支持重新启动管理器m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;#ifdef _MANAGEDSystem.Windows.Forms 添加引用。System:Windows:Forms:Application:SetUnhandledExceptionMode(System:Windows:Forms:UnhandledExceptionMode:ThrowException);#endif/ TODO: 将以下应用程序 ID 字符串替换为唯一的 ID

38、字符串;建议的字符串格式/为 CompanyName.ProductName.SubProduct.VersionInformationSetAppID(_T("Draw.AppID.NoVersion");/ TODO: 在此处添加构造代码,/ 将所有重要的初始化放置在 InitInstance 中/ 唯一的一个 CDrawApp 对象CDrawApp theApp;/ CDrawApp 初始化BOOL CDrawApp:InitInstance()/ 如果一个运行在 Windows XP 上的应用程序清单指定要/ 使用 ComCtl32.dll 版本 6 或更高版本来启

39、用可视化方式,/则需要 InitCommonControlsEx()。 否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);/ 将它设置为包括所有要在应用程序中使用的/ 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp:InitInstance();/ 初始化 OLE 库if (!AfxOleInit()AfxMessageBox(IDP_OLE_INIT_FAILE

40、D);return FALSE;AfxEnableControlContainer();EnableTaskbarInteraction(FALSE);/ 使用 RichEdit 控件需要 AfxInitRichEdit2()/ AfxInitRichEdit2();/ 标准初始化/ 如果未使用这些功能并希望减小/ 最终可执行文件的大小,则应移除下列/ 不需要的特定初始化例程/ 更改用于存储设置的注册表项/ TODO: 应适当修改该字符串,/ 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序");LoadStdProfileSett

41、ings(4); / 加载标准 INI 文件选项(包括 MRU)/ 注册应用程序的文档模板。 文档模板/ 将用作文档、框架窗口和视图之间的连接CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CDrawDoc),RUNTIME_CLASS(CMainFrame), / 主 SDI 框架窗口RUNTIME_CLASS(CDrawView);if (!pDocTemplate)return FALSE;AddDocTemplate(pDocTempla

42、te);/ 分析标准 shell 命令、DDE、打开文件操作的命令行CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);/ 调度在命令行中指定的命令。 如果/ 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。if (!ProcessShellCommand(cmdInfo)return FALSE;/ 唯一的一个窗口已初始化,因此显示它并对其进行更新m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->Update

43、Window();return TRUE;int CDrawApp:ExitInstance()/TODO: 处理可能已添加的附加资源AfxOleTerm(FALSE);return CWinApp:ExitInstance();/ CDrawApp 消息处理程序/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 对话框数据#ifdef AFX_DESIGN_TIMEenum IDD = IDD_ABOUTBOX ;#endifprotected:virtual void Do

44、DataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP()public:;CAboutDlg:CAboutDlg() : CDialogEx(IDD_ABOUTBOX)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()/ 用于运行对话框的应用

45、程序命令void CDrawApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();MainFrm.cpp代码/ MainFrm.cpp : CMainFrame 类的实现#ifdef _DEBUG#define new DEBUG_NEW#endif/ CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)const int iMaxUserToolbars = 10;const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 4

46、0;const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()END_MESSAGE_MAP()static UINT indicators =ID_SEPARATOR, / 状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;/ CMainFrame 构造/析构CMainFrame:CMainFrame()/ TODO: 在

47、此添加成员初始化代码CMainFrame:CMainFrame()int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar

48、.LoadToolBar(IDR_MAINFRAME)TRACE0("未能创建工具栏n");return -1; / 未能创建if (!m_wndStatusBar.Create(this)TRACE0("未能创建状态栏n");return -1; / 未能创建m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT);/ TODO: 如果不需要可停靠工具栏,则删除这三行m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableD

49、ocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return 0;BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ TODO: 在此处通过修改/ CREATESTRUCT cs 来修改窗口类或样式return TRUE;/ CMainFrame 诊断#ifdef _DEBUGvoid CMainFrame:AssertValid() constCFrameWnd:Asser

50、tValid();void CMainFrame:Dump(CDumpContext& dc) constCFrameWnd:Dump(dc);#endif /_DEBUG/ CMainFrame 消息处理程序Graph.h代码/ Graph.cpp : 实现文件/#include "stdafx.h"#include "Draw.h"#include "Graph.h"/ CGraphIMPLEMENT_DYNAMIC(CGraph, CWnd)CGraph:CGraph(int m_nDrawType, int m_nxi

51、ankuan, COLORREF m_clr, CPoint m_ptOrign, CPoint m_ptEnd)this->m_nDrawType = m_nDrawType;this->m_ptOrign = m_ptOrign;this->m_ptEnd = m_ptEnd;this->m_nxiankuan = m_nxiankuan;this->m_clr = m_clr;CGraph:CGraph()CGraph:CGraph()BEGIN_MESSAGE_MAP(CGraph, CWnd)END_MESSAGE_MAP()/ CGraph 消息处理程序DrawDoc.cpp代码/ DrawDoc.cpp : CDrawDoc 类的实现/ SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的/ ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include "Draw.h"#endif#include "DrawDoc.h"#include <propkey.h>#ifdef _DEBUG#define new DEBUG_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论