图像处理软件的设计和实现本科7727083
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目: BMP图像处理软件的设计和实现
摘要
随着时代的发展,科技的进步,一些简单的图片已经不能满足人们的需求。
图像运用的扩大与对图像本身的精益求精,使人们越来越依赖于各种图像处理软件。
各种图像处理软件也越来越完善,普及程度不断的提高。
本文用Visual C++作为开发工具,设计了一个BMP图像处理软件。
该图像处理软件能够实现对BMP图像的基本操作,如图像的打开,关闭,保存;图像的基本处理,如图像放大、缩小、旋转、转置、二值化处理、中值滤波、边缘检测、直方图以及马赛克效果等等。
论文首先分析了国内外图像处理软件的现状,以及发展趋势,之后详细地分析了本软件的功能,完成了系统的总体设计和功能规划,进而对每个模块完成了详细设计和实现,最后完成了测试工作。
结果表明,本系统能够完成要求的所有功能,软件具有友好的用户界面和良好的健壮性,具有一定的应用价值。
关键词:Visual C++6.0;BMP;图像处理;数字图像处理;图像处理软件
Design and Implementation of BMP
Image Processing System
Abstract
With the development of science, the simple pictures couldn’t meet people’s demand. The magnification of picture’s usage and the ever delicated image of picture itself, has made people more and more rely on several of picture-processing software. And the popularization of these softwares is going higher and higher, with the progress made by themselves.
I use Visual C++ development to build software which is used to deal with BMP images. This software can carry out some base operations of BMP images, such as open, close and save;some base processes of BMP images, such as magnify, shrink, rotate, binary process, mid-value filter, edge-detect, cauterization of pictures and the mosaic effect. This paper at first analyzed status of picture-processing software both of domestic an foreign, and the developing trend,After analysis the function of this software in detail and completed the overall design of the system and function.And completed the detailed design and implementation of each module, finally completed the testing work.The results show that the system can complete all the requirements of the function,the software has a friendly user interface and good robustness, and has certain application value.
KEY WORDS:Visual C++6.0;BMP;picture-processing;Digital Image Processing;
Image Processing Software
主要符号表
12111,...,,g m g g 列矩阵
),()(N f f 1)2,1(1,1,...,,f 横矩阵
G ,f 矩阵
w
宽 h
高 f f y x ∆∆,
卷积算子 )(j i R ,
梯度幅值 ),(2j i f ∇
拉氏算子
f 2∇ 拉普拉斯算子
目录
摘要 (I)
Abstract (II)
主要符号表 (III)
1 绪论 (1)
1.1本课题设计的背景 (1)
1.2本课题设计的目的和意义 (2)
1.3本课题国内外研究状况 (2)
1.4本课题研究的主要内容 (3)
1.5现有图像处理软件 (4)
2 开发环境及主要技术介绍 (5)
2.1 面向对象编程 (5)
2.2 Visual C++ 6.0 (6)
2.2.1 Visual C++ 6.0概述 (6)
2.2.2 Visual C++ 6.0主要部分 (6)
2.3 MFC (7)
2.4设备上下文DC (8)
2.5数字图像处理基础 (9)
2.5.1数字图像概述 (9)
2.5.2图像处理概述 (10)
2.5.3图像的基本概念 (11)
2.5.4 BMP位图 (12)
3 系统总体设计 (13)
3.1系统总体框架设计 (13)
3.1.1系统的总体框架设计如下 (13)
3.1.2系统流程图如下 (13)
3.1.3系统的模块设计 (14)
4 系统详细设计与实现 (17)
4.1BMP文件结构 (17)
4.1.1BMP文件组成 (17)
4.1.2BMP文件头 (17)
4.1.3BMP信息头 (17)
4.1.4BMP颜色表 (18)
4.1.5BMP图形数据 (18)
4.2 CDib类的设计 (19)
4.3 文件操作 (21)
4.3.1打开图片 (21)
4.3.2保存图片 (21)
4.4几何变化 (21)
4.4.1镜像 (21)
4.4.2缩放 (22)
4.4.3图像转置 (22)
4.4.4图像旋转 (22)
4.5特效显示 (22)
4.5.1马赛克特效 (23)
4.5.2扩散效果 (23)
4.5.3平滑效果 (23)
4.6灰度变化 (23)
4.6.1反色变化 (23)
4.6.2黑白变化 (24)
4.6.3灰度变化 (24)
4.7分析变化 (25)
4.7.1边缘检测 (25)
4.7.2锐化处理 (25)
4.7.3霓虹处理 (26)
4.7.4滤波处理 (26)
4.7.5曝光效果 (27)
4.7.6浮雕效果 (27)
4.7.7柔化效果 (27)
5 系统测试 (28)
5.1测试目的 (28)
5.2测试效果 (28)
5.2.1文件操作 (29)
5.2.2几何变化 (30)
5.2.3特效显示 (33)
5.2.4灰度变化 (35)
5.2.5分析变化 (36)
5.3 测试结论 (40)
6 结论 (41)
参考文献 (1)
致谢.......................................................................错误!未定义书签。
毕业设计(论文)知识产权声明 ..........................错误!未定义书签。
毕业设计(论文)独创性声明 ..............................错误!未定义书签。
附录. (46)
1绪论
1.1本课题设计的背景
从80年代中期以来,超大规模集成电路的发展,为图形学的飞速发展奠定了物质基础。
计算机的运算能力的提高,图形处理速度的加快,使得图形学的各个研究方向得到充分发展,图形学已广泛应用于各个领域,代表性的应用有:计算机辅助绘图及设计、事务管理中的交汇式绘图、科学计算可视化、过程控制、计算机动画及广告、计算机艺术、地形地貌和自然资源的图形显示、办公自动化及电子出版系统。
把原始图像与计算机结合起来,从而创作出许多更加完美的图像,满足了人们的需求。
计算机图像处理,是指利用计算机对图像进行一系列加工,以便获得人们所需要的效果。
图像是人类获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。
因此,图像处理的应用领域必然涉及到人类生活和工作的方方面。
随着时代的进步,各种图像处理软件也越来越完善,人们对图像的应用和要求也越来越精益,为了给观看者更深刻的印象,关于图片处理的软件业收到了大家的欢迎和喜爱,所以图像处理软件能够更好的满足人们对图像的需求,其中可以对图片进行90度的改变和锐化处理。
图像是人类获取信息、表达信息和传递信息的重要手段,图像处理应用广泛,图像处理软件MATLAB虽然能够对数字图像进行方便的处理,并且其制作的界面也比较友好,但是由于其过于庞大,移植性和速度方面也很难与VC++相比。
另外,由于商业化的VC++图像处理软件价格比较昂贵,而且不便于二次开发,本课题利用VC++集成开发环境开发一套简单的图像处理软件系统。
图像处理技术起源比较早,但真正发展是在八十年代后,随着计算机技术的高速发展而迅猛发展起来。
图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。
图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。
图像处理的应用领域很广,大致可以分为六大领域以及十余个子领域:
1.材料科学:光学材料、金属材料、晶体材料、陶瓷建筑材料
2.地学:岩矿结构、岩体裂隙特征、土体颗粒
3.生命科学:生物、植物、医学、基因
4.地理学:经济地理、土地资源、地貌、气像学
5.机器人:包括电路设计、识别等
6.鉴定:指纹鉴定、财务印章管理、防伪鉴定等
常见的图像处理有图像数字化、图像编码、图像增强、图像复原、图像分割
与图像分析等。
经过处理后的图像,一定能够更好的被用于工业或者个人目的。
为此开发这个数字图像处理软件,能够处理一些图像,并对图像处理技术此方面进行深入的研究。
1.2本课题设计的目的和意义
目的:本次毕业设计是要完成一个BMP图像处理软件,其中包括对文件的读取保存和修改(图像的反转和锐化)。
读取文件中的图片可以对文件中的图片进行读取,在修改后也可以保存修改后的文件,对图片进行处理主要是运用指针和模板等对图像可以进行翻转和锐化。
BMP图像处理软件是对BMP图像的基本操作,比如图像的打开、关闭、保存,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果;BMP图像的基本处理,图像的基本处理,如图像放大、缩小、旋转、转置、二值化处理等等。
意义:图像对于人眼来说是模糊的甚至是不可见的,通过图象增强技术,可以使模糊甚至不可见的图像变得清晰明亮,通过图像处理中的技术,可以将人眼无法识别的图像进行分类处理,该技术已经广泛深入地应用于国计民生休戚相关的各个领域,更加满足人们对于图像的需求。
1.3本课题国内外研究状况
麻省理工学院(MIT)旋风I号(Whirlwind I)计算机的附件诞生了。
该显示器用一个类似于示波器的阴极射线管(CRT)来显示一些简单的图形。
1958年美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。
在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。
计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。
从1962年,林肯实验室的Sutherland发表一篇题为“一个人机交互通信的图形系统”的博士论文,他在论文中首次使用计算机图形学“Computer Graphics”这个术语,证明交互计算机图形学是一个可行的、有用的研究领域,从而确定计算机图形学作为一个崭新的科学分支的独立地位屹立于计算机领域。
此后,国内外都很重视图形学的发展以及研究,各种各样的图像处理软件显现出来,比如PhotoShop和Picasa。
70年代是计算机图形学发展过程中一个重要的历史时期。
由于光栅显示器的产生,在60年代就已萌芽的光栅图形学算法,迅速发展起来,区域填充、裁剪、消隐等基本图形概念、及其相应算法纷纷诞生,图形学进入第一个兴盛的时期,并开始出现实用的CAD图形系统。
又因为通用、与设备无关的图形软件的发展,图形软件功能的标准化问题被提出来。
1974年,美国国家标准化局(ANSI)在ACM SIGGRAPH的一个与“与机器无关的图形技术”的工作会议上,提出制
定有关标准的基本规则。
此后ACM专门成立一个图形标准化委员会,开始制定有关标准。
该委员会于1977、1979年先后制定和修改“核心图形系统”(Core Graphics System)。
ISO随后又发布了计算机图形接口CGI(Computer Graphics Interface)、计算机图形元文件标准CGM(Computer Graphics Metafile)、计算机图形核心系统GKS(Graphics Kernel system)、面向程序员的层次交互图形标准PHIGS(Programmer's Hierarchical Interactive Graphics Standard)等。
这些标准的制定,为计算机图形学的推广、应用、资源信息共享,起到重要作用。
国内在此领域的研究中最具有代表性的是梦幻科技推出的彩影图形处理和相片制作软件,彩影拥有非常智能、傻瓜而功能强大的图像处理、修复和合成功能。
解决了国内外图像处理软件过于复杂、不易操作的问题,让所有用户不需要专业的图像美工技能即可轻松点击并制作出绚丽多彩的图像特效图。
新一代在线图像编辑软件OPCOL是国内领先的在线图像处理系统,它采用最新Flash技术开发,不用下载任何插件,只需flash10的支持即可实现在线图片编辑,可无缝嵌入主流浏览器,具有文件体积小速度快,兼容各种浏览器等特点;适于各种自动在线图片编辑的场合使用,是未来网站的一个新功能和亮点,满足您的创新需求,解决网站在线图片编辑难题。
美国MathWorks公司出品的MATLAB软件,功能十分强大,它主要应用于工程计算、信号处理与通讯、图像处理等领域。
MATLAB之所以称为世界流行的科学计算与数学应用软件,是因为它有着强大的矩阵运算和处理功能,具体表现在强大的数值计算功能、数据分析和科学计算可视化功能、强大的符号计算功能、强大的非线性动态系统建模和仿真功能、灵活的程序接口功能等方面。
而数字图像处理与矩阵运算具有密切的联系,并且MATLAB 图像处理工具箱提供了丰富的图像处理函数,熟练使用这些函数可以完成几乎所有的图像处理工作。
应用MATLAB进行数字图像处理可以节省大量编写低层算法源代码的时间,避免程序设计中的重复劳动,达到事半功倍的效果。
另外,新版本的MATLAB在图形用户界面(GUI)的制作上作了很大的改善。
MATLAB的不足之处是运行程序时需要安装有MATLAB系统,可移植性能差,应用不方便,执行速度慢。
Photoshop是Adobe公司开发的世界上最优秀的平面图像处理软件之一,集图像扫描、编辑修改、图像制作、广告创意,图像输入与输出与一体,在图像处理及平面设计领域里,Photoshop一直都以界面美观,操作方便,在图像处理和电脑绘图软件领域里独占鳌头。
Photoshop的功能非常强大,它支持多种图像格式和颜色模式,能同时进行多色层处理。
其绘画功能和选取功能能使图像编辑变得十分方便,图像变形功能可用来制作特殊的视觉效果。
1.4本课题研究的主要内容
本课题主要研究如何利用Visual C++ 集成开发环境开发一个图像处理软件。
在熟悉图像处理相关技术,熟悉图像处理各种算法之后,在Windows操作
系统下,利用C++语言在Visual C++ 6.0开发环境下,设计和实现一个图像处理软件。
本图像处理软件实现对BMP图像的基本操作,主要有五部分:图像的文件操作、图像的几何变换、图像的特效显示、图像的灰度变化、图像的分析变化,用各种图像处理软件的算法实现其各个模块的功能。
1.5现有图像处理软件
随着对图像处理需求的扩大,现有的图像处理软件多种多样,数不胜数。
本文简单介绍两个比较有代表性的图像处理软件:Photoshop和Picasa。
Photoshop简介:Photoshop是平面图像处理业界霸主Adobe公司推出的跨越PC和MAC两界首屈一指的大型图像处理软件。
它功能强大,操作界面友好,得到广大第三方开发厂家的支持,从而也赢得众多的用户的青睐。
Photoshop是目前公认的最好的通用平面美术设计软件,它的功能完善,性能稳定,使用方便,所以在几乎所有的广告、出版、软件公司,Photoshop都是首选的平面工具。
它是专门用来进行图像处理的软件。
通过它可以对图像修饰、对图形进行编辑,以及对图像的色彩处理,另外,还有绘图和输出功能等。
在实际生活和工作中,可以将数码照相机拍摄下来的照片进行编辑和修饰,也可以将现有的图形和照片,用扫描仪扫入计算机进行加工处理,还可以把摄像机摄入的内容转移到计算机上,然后用它实现对影像的润色。
Picasa简介:Google Picasa原为独立收费的图片处理软件,其界面美观华丽,功能实用丰富。
被Google收购后,已改为完全免费软件。
只需拥有Picasa,你就可以随心所欲地体验你的歌谱图片和数码相。
Google照片处理软件尤其适合于初级数码照片爱好者使用,Picasa可以通过简单的单次点击式修正来进行高级修改处理,只需动动指尖来处理相片即可获得震撼效果。
它是一个可在计算机上查看、整理、修改和共享图片的软件,它会让所有这些工作变得简单而有趣。
Picasa 不会未经您的允许就删除图片或将图片放到网络上。
它自动将你的相片从你的数码相机传输到你的电脑上,管理图片并让你能在几秒中内查找到所需的图片,让你轻松地编辑, 打印以及共享相片,创建幻灯片,定购打印以及其它更多。
Picasa会自动根据照片拍摄的时间,目录,机型来判断,自动建立像簿,查找方便,还有timeline功能。
2 开发环境及主要技术介绍
2.1 面向对象编程
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)计算机编程架构。
OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。
为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。
通过这些概念面向对象的思想得到了具体的体现。
1.对象(Object) :可以对其做事情的一些东西。
一个对象有状态、行为和标识三种属性。
2.类(class) :一个共享相同结构和行为的对象的集合。
3.封装(encapsulation):第一层意思:将数据和操作捆绑在一起,创造出一个新的类型的过程。
第二层意思:将接口与实现分离的过程。
4.继承:类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。
继承描述了类之间的“是一种”关系。
子类可以对基类的行为进行扩展、覆盖、重定义。
5.组合:既是类之间的关系也是对象之间的关系。
在这种关系中一个对象或者类包含了其他的对象和类。
组合描述了“有”关系。
6.多态:类型理论中的一个概念,一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。
因此,这个名称表示的任何对象可以以不同的方式响应一些共同的操作集合。
7.动态绑定:也称动态类型,指的是一个对象或者表达式的类型直到运行时才确定。
通常由编译器插入特殊代码来实现。
与之对立的是静态类型。
8.静态绑定:也称静态类型,指的是一个对象或者表达式的类型在编译时确定。
9.消息传递:指的是一个对象调用了另一个对象的方法(或者称为成员函数)。
10.方法:也称为成员函数,是指对象上的操作,作为类声明的一部分来定义。
方法定义了可以对一个对象执行那些操作。
面向对象主要特征:
封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。
封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。
封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。
它由类的派生功能体现。
一个类直接继承其它类的全部描述,同时可修改和扩充。
继承具有传递性。
继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。
类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。
继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:对象根据所接收的消息而做出动作。
同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。
例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。
多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。
在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
2.2 Visual C++ 6.0
2.2.1 Visual C++ 6.0概述
Visual C++ 6.0,简称VC或VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“低级语言”的程序。
它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导App Wizard、类向导Class Wizard等开发工具。
这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。
Visual C++ 6.0以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。
这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
2.2.2 Visual C++ 6.0主要部分
a.Developer Studio
这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C++”,所以很多人理所当然的认为,那就是Visual C++了。
其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。
我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。
所以不要把Developer Studio当成Visual C++,它充其量只是Visual C++的一个壳子而已。
b. MFC
从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder 和Symantec C++同样可以处理MFC。
同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC 就等于抛弃了Visual C++中很大的一部分功能。
但是,Visual C++也不等于MFC。
c. Platform SDK
这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,Platform SDK是以Microsoft C/C++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到Developer Studio没有编译程序的功能,这项工作是由是CL来完成的,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。
2.3 MFC
MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC的关键技术:
1. MFC程序的初始化过程
建立一个MFC窗口很容易,只用两步:一是从CWinApp派生一个应用程序类,然后建立应用程序对象(theApp),就可以产生一个自己需要的窗口。
2.运行时类型识别(RTTI)
运行时类型识别(RTTI)即是程序执行过程中知道某个对象属于某个类,平时用C++编程接触的RTTI一般是编译器的RTTI,即是在新版本的VC++编译器里面选用“使能RTTI”,然后载入typeinfo.h文件,就可以使用一个叫typeid()的运算子,它的地位与在C++编程中的sizeof()运算子类似的地方(包含一个头
文件,然后就有一个熟悉好用的函数)。
typeid()关键的地方是可以接受两个类型的参数:一个是类名称,一个是对象指针。
3.动态创建
动态创建就是运行时创建指定类的对象,在MFC中大量使用。
如框架窗口对象、视对象,还有文档对象都需要由文档模板类对象来动态的创建。
4.永久保存
MFC的连续存储(serialize)机制俗称串行化。
这里的永久保存是站在Application Framework的角度来说的。
即保存一些数据,框架通过读这些数据能够自动把原本的对象重构出来。
这里也是通过两类宏实现的。
这两类宏分别是在类中增加operator>>友元函数(把数据串行化到文件中)的声明和定义。
5.消息映射
消息映射与命令传递体现了MFC与SDK的不同。
在SDK编程中,没有消息映射的概念,它有明确的回调函数中,通过一个switch语句去判断收到了何种消息,然后对这个消息进行处理。
所以,在SDK编程中,会发送消息和在回调函数中处理消息就差不多可以写SDK程序了。
在MFC中,看上去发送消息和处理消息比SDK更简单、直接,但可惜不直观。
举个简单的例子,如果想自定义一个消息,SDK是非常简单直观的,用一条语句:SendMessage(hwnd,message/*一个大于或等于WM_USER的数字*/,wparam,lparam),之后就可以在回调函数中处理了。
但MFC就不同了,因为你通常不直接去改写窗口的回调函数,所以只能亦步亦趋对照原来的MFC代码,把消息放到恰当的地方。
6.消息传递
在MFC的消息不仅仅是在派生类和基类之间流动,还可以在同一层次之间流动。
对于WM_COMMAND来说,消息处理的顺序可以整理为:Frame窗口先接受到消息,依次判断View、Frame窗口本身、CWinApp的DefWndProc是否处理,如果View要处理消息他也会依次判断View本身处理还是Document处理,如果是Document处理他也会依次判断Document本事处理还是Document Template处理。
因为上面类的层次关系。
对于消息的传递只能通过静态、全局函数、虚函数来完成。
2.4设备上下文DC
设备上下文DC(Device Context又称设备环境,也称设备描述表)是一个Windows数据结构,它包含了某个设备的绘制属性。
是一个关于如何绘制图形的方法的集合,它可以绘制各种图形,确定在应用窗口中绘制图形的方式,即确定绘图模式和映射模式。
在绘图之前,必须获取绘图窗口区域的一个设备环境DC。
接着进行GDI函数的调用,执行适合于设备环境DC的命令。
获取DC时,Windows。