实验五(MFC中的图形及动画)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()
{