课程设计论文-基于MFC的绘图软件的设计与实现

更新时间:2023-09-16 02:20:01 阅读量: 高中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于MFC的绘图软件的设计与实现

一、多媒体概述 (一)多媒体的定义

多媒体(duō méi tǐ)的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合。

媒体(Media)就是人与人之间实现信息交流的中介,简单地说,就是信息的载体,也称为媒介。多媒体就是多重媒体的意思,可以理解为直接作用于人感官的文字、图形图像、动画、声音和视频等各种媒体的统称,即多种信息载体的表现形式和传递方式。

多媒体即多媒体信息服务,MMS(Multimedia Message Service),是目前短信技术开发最高标准的一种。它最大的特色就是可以支持多媒体功能,借助高速传输技术EDCE(Enhanced Data rates for GSM Erolution)和GPRS,以WAP为载体传送视频片段、图片、声音和文字,不仅可以在手机之间进行多媒体传输。而且可以在手机和电脑之间传输;其短消息容量平均为3万字节,最高可达10万字节;具有MMS功能的移动电话内置媒体编辑器,可以编写多媒体信息,如果安装上一个内置或外置的照相机,用户还可以制作并传送PowerPoint格式的信息或电子明信片。

多媒体技术不是各种信息媒体的简单复合,它是一种把文本(Text)、图形(Graphics)、图像(Images)、动画(Animation)和声音(Sound)等形式的信息结合在一起,并通过计算机进行综合处理和控制,能支持完成一系列交互式操作的信息技术。多媒体技术的发展改变了计算机的使用领域,

- 1 -

使计算机由办公室、实验室中的专用品变成了信息社会的普通工具,广泛应用于工业生产管理、学校教育、公共信息咨询、商业广告、军事指挥与训练,甚至家庭生活与娱乐等领域。

(二)多媒体的解析

多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。多媒体本身有两个方面,和所有现代技术一样它是由硬件和软件,或机器和思想混合组成。可以将多媒体技术和功能在概念上区分为控制系统和信息。 多媒体之所以能够实现是依靠数字技术。多媒体代表数字控制和数字媒体的汇合,电脑是数字控制系统,而数字媒体是当今音频和视频最先进的存储和传播形式。事实上有人就简单地认为多媒体是电脑和电视的结合。电脑的能力达到实时处理电视和声音数据流的水平,这时多媒体就诞生了。多媒体电脑需要具有比主流电脑更强的能力,多媒体电脑决定了主流电脑的发展。区别普通电脑和多媒体电脑的主要东西是声卡和只读光盘驱动器。光盘是多媒体的主要存储和交换媒体。没有这种方便的光盘,电脑工业就无法销售构成多媒体节目的几百兆字节的音频、可视的和文字的数据,你也无法买到多媒体。

现在可以回答什么是多媒体。它不只是一件东西,而是包括许多东西的复杂的组合:硬件、软件和这两者相遇时的界面。不,我们还忘了一件最重要的事情.多媒体还包括你。咳,就是!对于多媒体,你不再是一个被动的观众,你可以控制,可以交互作用,可以让它按你的需要去做。在一个报告中,你可以不管那些无用的东西而直接进入重要的数据,可以将

- 2 -

感兴趣的全世界的报告和图片收集汇编到一起。这就是多媒体的力量和它与传统媒体(如书本和电视)的区别所在。

多媒体能做什么?它展示信息、交流思想和抒发情感。它让你看到、听到和理解其他人的思想。也就是说,它是一种通讯的方式。声音、图像、图形、文字等被理解为承载信息的媒体而称为多媒体其实并不准确,因为这容易跟那些承载信息进行传输、存储的物质媒体(也有人称为介质),如电磁波、光、空气波、电流、磁介质等相混淆。但是,现在多媒体这个名词或术语几乎已经成为文字、图形、图像和声音的同义词,也就是说,一般人都认为,多媒体就是声音、图像与图形等的组合,所以在一般的文章中也就一直沿用这个不太准确的词。目前流行的多媒体的概念,主要仍是指文字、图形、图像、声音等人的器官能直接感受和理解的多种信息类型,这已经成为一种较狭义的多媒体的理解。

在计算机和通信领域,我们所指的信息的正文、图形、声音、图像、动画,都可以称为媒体。从计算机和通信设备处理信息的角度来看,我们可以将自然界和人类社会原始信息存在的式---数据、文字、有声的语言、音响、绘画、动画、图像(静态的照片和动态的电影、电视和录像)等,归结为三种最基本的媒体:声、图、文。传统的计算机只能够处理单媒体---“文”,电视能够传播声、图、文集成信息,但它不是多媒体系统。通过电视,我们只能单向被动地接受信息,不能双向地、主动地处理信息,没有所谓的交互性。可视电话虽然有交互性,但我们仅仅能够听到声音,见到谈话人的形象,也不是多媒体。所谓多媒体,是指能够同时采集、处

- 3 -

理、编辑、存储和展示两个或以上不同类型信息媒体的技术,这些信息媒体包括文字、声音、图形、图像、动画和活动影像等。

在日常生活中,被称为媒体的东西有许多,如蜜蜂是传播花粉的媒体、苍蝇是传播病菌的媒体。但准确地说,这些所谓的“媒体”是传播媒体,并非我们所说的多媒体中的“媒体”,因为这些传播媒体传播的都是某种物质实体,而文字、声音、图像、图形这些都不是物质实体,它们只是客观事物某种属性的表面特征,是一种信息表示方式。我们在计算机和通信领域所说的“媒体”,是信息存储、传播和表现的载体,并不是一般的媒介和媒质。

从概念上准确地说,多媒体中的“媒体”应该是指一种表达某种信息内容的形式,同理可以知道,我们所指的多媒体,应该是多种信息的表达方式或者是多种信息的类型,自然地,我们就可以用多媒体信息这个概念来表示包含文字信息、图形信息、图像信息和声音信息等不同信息类型的一种综合信息类型。

总之,由于信息最本质的概念是客观事物属性的表面特征,其表现方式是多种多样的,因此,较为准确而全面的多媒体定义,就应该是指多种信息类型的综合。

这些媒体可以是图形、图像、声音、文字、视频、动画等信息表示形式,也可以是显示器、扬声器、电视机等信息的展示设备,传递信息的光纤、电缆、电磁波等中介媒质,还可以是存储信息的磁盘、光盘、磁带等存储实体。

(三)多媒体的特点

- 4 -

多媒体技术有以下几个主要特点:

1)集成性 能够对信息进行多通道统一获取、存储、组织与合成。 2)控制性 多媒体技术是以计算机为中心,综合处理和控制多媒体信息,并按人的要求以多种媒体形式表现出来,同时作用于人的多种感官。

3)交互性 交互性是多媒体应用有别于传统信息交流媒体的主要特点之一。传统信息交流媒体只能单向地、被动地传播信息,而多媒体技术则可以实现人对信息的主动选择和控制。

4)非线性 多媒体技术的非线性特点将改变人们传统循序性的读写模式。以往人们读写方式大都采用章、节、页的框架,循序渐进地获取知识,而多媒体技术将借助超文本链接(Hyper Text Link)的方法,把内容以一种更灵活、更具变化的方式呈现给读者。

5)实时性 当用户给出操作命令时,相应的多媒体信息都能够得到实时控制。

6)信息使用的方便性 用户可以按照自己的需要、兴趣、任务要求、偏爱和认知特点来使用信息,任取图、文、声等信息表现形式。

7)信息结构的动态性 “多媒体是一部永远读不完的书”,用户可以按照自己的目的和认知特征重新组织信息,增加、删除或修改节点,重新建立链。

(四)多媒体技术概述

1、多媒体技术的基本概念

在计算机行业里,媒体有两种含义:其一是指传播信息的载体,如语言、文字、图像、视频、音频等等;其二是指存贮信息的载体,如ROM、RAM、

- 5 -

BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; int tmOverhang; int tmDigitizedAspectX; int tmDigitizedAspectY; } TEXTMETRIC; CFont fontText; CString strText; CSize sizeText;

ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,

DEFAULT_PITCH | FF_ROMAN, \调用CFont::CreateFont函数,建立GDI的字体对象,参数1和2是字体的高度和宽度,最后一个参数是字体的名称

CFont* pOldFont = (CFont*) pDC->SelectObject(&fontText);//将新字体选进

设备,并返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它

pDC->GetTextMetrics(&tm);//参数是指向TEXTMETRIC结构的指针,得到当前字体的属

性,

strText.FormanPoint t(\磅 WINDOWS 中文字体范例 1234567890\

sizeText = pDC->GetTextExtent(strText); pDC->TextOut(0, nPos, strText);

pDC->SelectObject(pOldFont);//恢复原来的对象 nPos -= tm.tmHeight + tm.tmExternalLeading; }

4)编辑CMy82View::OnDraw函数

- 16 -

void CMy82View::OnDraw(CDC* pDC) {

int nPosition = 0;

for (int i = 12; i <= 24; i += 2) { ShowFont(pDC, nPosition, i); }

三、图形绘画程序的具体实现

(一)在视类中添加成员变量并初始化

class CDrawView : public CView {// Implementation public: };

int m_nMaxX; // 用于保存屏幕尺寸 int m_nMaxY;

CDC * m_pMemDC; //内存DC

CBitmap * m_pBitmap; // 与显示DC的位图兼容的位图 int m_nDrawType; //画图类型 int m_nLineWidth; //线宽

COLORREF m_cLineColor; //线的颜色 COLORREF m_cFillColor; //填充颜色 bool m_bDrawing; //是否正在画图 CPoint m_ptStart; //画图的起始点 CPoint m_ptOld; //保存鼠标临时点 virtual ~CDrawView();

( 1 )在构造函数中初始化部分成员变量

CDrawView::CDrawView() {

// TODO: add construction code here

m_pMemDC = new CDC; //构造内存DC对象

- 17 -

}

m_pBitmap = new CBitmap; // 构造位图对象

m_nDrawType = -1; //程序启动时没有选中绘图类型,不处于绘图状态 m_nLineWidth = 1; //线宽初始为1个像素

m_cLineColor = RGB(0,0,0); //线的颜色初始为黑色 m_cFillColor = RGB(0,0,255); //填充色初始为蓝色 m_bDrawing = false; //程序启动时不处于画图状态

( 2 )在析构造函数中释放指针变量占用的内存

CDrawView::~CDrawView() {

delete m_pMemDC; //删除内存DC对象 delete m_pBitmap; //删除位图对象

}

( 3 )为视类添加WM_CREATE消息处理函数

int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct {

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: Add your specialized creation code here

m_nMaxX = GetSystemMetrics(SM_CXSCREEN);//得到屏幕宽度 m_nMaxY = GetSystemMetrics(SM_CYSCREEN); //得到屏幕高度 CDC * pDC = GetDC(); //获得显示DC的指针

m_pMemDC->CreateCompatibleDC(pDC); //创建显示DC的兼容内存DC //创建与显示DC的“位图”兼容的位图,位图和屏幕一样大

m_pBitmap->CreateCompatibleBitmap(pDC, m_nMaxX, m_nMaxY); //将兼容位图选进内存DC,pOldBitmap用来保存内存DC中的原位图

CBitmap * pOldBitmap = m_pMemDC->SelectObject(m_pBitmap);// 创建一个白色画刷 CBrush brush;

brush.CreateStockObject(WHITE_BRUSH);

- 18 -

//将选进内存DC的位图整个填上白色(与窗口底色一致) }

CRect rect(-1,-1,m_nMaxX, m_nMaxY); m_pMemDC->FillRect(rect,&brush); //恢复内存DC中的原有位图

m_pMemDC->SelectObject(pOldBitmap); ReleaseDC(pDC); // 释放显示DC return 0;

(二)在视类中添加菜单消息响应函数

1、在视图类中添加 “直线”、“矩形”、“椭圆”、“填充”4个菜单项的消息响应函数和“线宽”菜单中5个菜单项的消息响应函数 DrawView.h文件

afx_msg void OnSelectDrawType(UINT nID);

afx_msg void OnUpdateSelectDrawType(CCmdUI * pCmdUO); afx_msg void OnDrawLineWidth(UINT nID);

afx_msg void OnUpdateDrawLineWidth(CCmdUI * pCmdUO); DrawView.cpp文件

ON_COMMAND_RANGE(ID_DRAW_LINE,ID_DRAW_FILL, OnSelectDrawType) ON_UPDATE_COMMAND_UI_RANGE(ID_DRAW_LINE,ID_DRAW_FILL, OnUpdateSelectDrawType)

ON_COMMAND_RANGE(ID_DRAW_LINEWIDTH_ONE,ID_DRAW_LINEWIDTH_FIVE, OnDrawLineWidth)

ON_UPDATE_COMMAND_UI_RANGE(ID_DRAW_LINEWIDTH_ONE,ID_DRAW_LINEWIDTH_FIVE,OnUpdateDrawLineWidth)

void CDrawView::OnSelectDrawType(UINT nID) { }

m_nDrawType = nID - ID_DRAW_LINE;

- 19 -

void CDrawView::OnUpdateSelectDrawType(CCmdUI * pCmdUI) { }

void CDrawView::OnDrawLineWidth(UINT nID) { }

void CDrawView::OnUpdateDrawLineWidth(CCmdUI * pCmdUI) { }

int nID = pCmdUI->m_nID - ID_DRAW_LINEWIDTH_ONE + 1; if(nID == m_nLineWidth)

pCmdUI->SetCheck(true);

m_nLineWidth = nID - ID_DRAW_LINEWIDTH_ONE + 1; int nID = pCmdUI->m_nID - ID_DRAW_LINE; if(nID == m_nDrawType)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

else

pCmdUI->SetCheck(false);

2、在视图类中添加 “线色?”和“填充色?”2个菜单项的消息处理函数

void CDrawView::OnDrawLinecolor() {

CColorDialog dlg;

dlg.m_cc.Flags |= CC_PREVENTFULLOPEN | CC_RGBINIT; dlg.m_cc.rgbResult = m_cLineColor; if(dlg.DoModal() == IDOK) {

- 20 -

本文来源:https://www.bwwdw.com/article/495h.html

Top