实验五(MFC中的图形及动画)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五MFC中的图形及动画

实验目的

理解MFC中的图形设备接口的相关概念

了解VC中的资源使用

熟悉MFC中的相关图形设备接口使用方法

理解定时器消息相关原理

熟悉利用定时器消息及重绘机制形成动画的方法

实验内容

1、学习使用CDC类,了解相关的成员函数和成员变量;

2、学习VC中资源的使用方法;

3、学习利用定时器消息形成动画的方法。

1、字体及颜色

在上次实验中,我们已经接触到画笔和画刷,在这个实验项目中,我们将接触到更多的CDC类的成员变量和函数的使用。

[实验要求]

新建一个MFC的单文档项目;

在CHelloMFCView::OnDraw()函数中加入如下代码,运行它,看看运行结果是什么样的?

void CHelloMFCView::OnDraw(CDC* pDC)

{

CHelloMFCDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

//设定字体

CFont fontNewFont;

fontNewFont.CreateFont(50,60,0,0,0,FALSE,FALSE,0,

ANSI_CHARSET,OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,

DEFAULT_PITCH|FF_MODERN,

"Arial Bold");

CFont* pfontOldFont = pDC->SelectObject(&fontNewFont);

//设定颜色

pDC->SetTextColor(RGB(255,0,0));

pDC->TextOut(100, 150, "你好!");

}

看看运行结果怎样?

2、位图资源

在视图区显示一张图片。

[实验要求]

找一张bmp格式图片,例如

新建一个单文档的MFC项目,例如取名叫“My”;

在项目的资源选项卡中引入这张bmp图片,注意图片资源的ID;

在视图类定义(头文件)中加入3个如下变量:

class CMyView : public CView

{

// 定义CBitmap类对象以及位图的高度和宽度变量

CBitmap m_Bitmap;

int m_nHeight;

int m_nWidth;

//下面的内容省略

……

修改视图类的构造函数

CMyView::CMyView()

{

// TODO: add construction code here

// 载入位图资源,读位图信息

m_Bitmap.LoadBitmap(IDB_BITMAP1);

BITMAP BM;

m_Bitmap.GetBitmap(&BM);

m_nWidth = BM.bmWidth;

m_nHeight = BM.bmHeight;

}

修改OnDraw()函数

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

// 显示位图

CDC MemDC;

MemDC.CreateCompatibleDC(NULL);

MemDC.SelectObject(&m_Bitmap);

pDC->BitBlt(0,0,m_nWidth,m_nHeight,&MemDC,0,0,SRCCOPY);

}

看看运行结果

3、菜单资源

在上面程序的基础上增加通过菜单缩放图片的功能

[实验要求]

找一张bmp格式图片,例如

新建一个单文档的MFC项目,例如取名叫“My”;

在项目的资源选项卡中引入这张bmp图片,注意图片资源的ID;

使用资源选项卡的菜单编辑器,修改菜单,增加一个名字为“图幅”的弹出菜单,下面增加3个弹出菜单项:缩小、正常、放大,分别设定其ID为ID_shrink,ID_bestfit和ID_zoomout

在视图类定义(头文件)中加入如下变量:

class CMyView : public CView

{

// 定义CBitmap类对象以及位图的显示参数变量

CBitmap m_Bitmap;

float m_fTimes;

int m_nHeight;

int m_nWidth;

……

修改视图类的构造函数

CMyView::CMyView()

{

// TODO: add construction code here

// 载入位图资源,读位图信息

BITMAP BM;

m_Bitmap.LoadBitmap(IDB_BITMAP1);

m_Bitmap.GetBitmap(&BM);

m_nWidth = BM.bmWidth;

m_nHeight = BM.bmHeight;

m_fTimes = 1.0;

}

修改OnDraw()函数

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

// 显示位图

CDC MemDC;

MemDC.CreateCompatibleDC(NULL);

MemDC.SelectObject(&m_Bitmap);

pDC->StretchBlt(0, 0, (int)(m_nWidth*m_fTimes),

(int)(m_nHeight*m_fTimes),

&MemDC, 0, 0, m_nWidth, m_nHeight, SRCCOPY); }

生成菜单消息处理函数,并加入代码

// 原样显示

void CMyView::OnBestFit()

{

// TODO: Add your command handler code here

m_fTimes = 1.0;

Invalidate();

}

// 缩小图像

void CMyView::OnShrink()

{

// TODO: Add your command handler code here

m_fTimes = 0.5;

Invalidate();

}

// 放大图像

void CMyView::OnZoomOut()

{

相关文档
最新文档