多媒体应用程序的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>(( | | | ,
, 0, 0), , , (0,0,0,0), , 0);
创建视频窗口
由于使用单独的音频来播放,将视频设置为静音模式
>()();
>(( | | | , , 0, 0),
, , (0,0,0,0), , 0);
创建音频窗口
>(); 将音频窗口设置为不可见
0; }
29
们添加“操作”及相关菜单 项
[] = " (*;*3)|*;*3"; (, , , , );
(() )
= () 获得音频文件名
}
32
() {
>()(); 首先停止正在播放的 >()(); 准备播放 >(); 载入视频文件自动播放
}
() {
>()(); 停止播放
}
33
有了以上代码,程序还不能够正常运行,需要为播 放视频的控件设置窗口尺寸。为此需要响应的消息, 该消息响应函数如下:
(* ) {
>(); }
45
下面需要实现显示函数,提供的可以实现图片的缩 放显示。在上例的函数的最后一行前面加入如下内容: () {;
; >(); >();
(, (>(), ), );
(, (>(), ), );
46
CRect rc; GetClientRect(&rc);
if(m_bScale)
"";
((""))当后辍为时
""; ;
将打开的文件名存入结构体中
(0,()());
发送打开文件命令,参数说明设备类型名包含在结构体 中,
参数说明要打开的文件名包含在结构体中
13
()如果打开不成功,则显示出错的原因
{ ((,()))
(,"出错");
("不明错误标识","出错");
; }
将获取的设备值赋给全局变量 设置正在播放标识为 设置正在暂停标识为
; ();
>(>(),0,0, ,0);
}}
43
【例12-5】在上例的基础上对所载入的图片进行 50%压缩显示 。
添加菜单项“压缩50%”,其为,为了控制显示模 式,为类添加一个控制变量:
;
在的实现中添加对该变量的初始化,以及对应 菜单项的处理: () { =;
=; }
44
() {
=; (); }
功能包 含关系
()
() ()
5
12.1.3 用控制波形声音的播放
( , 接收命令消息的设备 , 发送的命令消息 , 命令消息的标志集 ) 消息参数的结构体地址
常用的设备消息 见教材表12-5
6
在调用设备时可用()检测错误,该函数的 原型如下: (
, 错误代码 , 指向错误内容字串的指针
错误内容的缓冲区容量 )
11
(())
{ (); 获取打开的文件名
(); 获取打开的文件扩展名
()
如果程序正在播放,则关闭
{ (,0);
关闭正在播放的声音
() 如果关闭不成功,则显示出错的原因
{((,()))
(,"出错");
("不明错误标识","出错");
给出相应报告
;
}}
12
如果没有声音正在播放,则获取打开文件的后辍,并根 据后辍决定相应的打开类型 (("")) 当后辍为时
; }
设置正在播放标识为
}}
16
() { ()如果有正在播放的声音 { ()如果不是暂停状态 {(,0);
() { ((,())) (,"出错");
则暂停播放
("不明错误标识","出错");
;
}
;
设置正在暂停标识为
}
17
{(,0);
() { ((,()))
(,"出错");
如果已经是暂停状态 则继续播放
(); }
点击确定的响应 先执行关闭文件的操作 关闭窗口
21
手动加入消息的处理函数
在中的函数 : ()的 “}}” 和 “()” 语句之间加入如下代码: ( );
22
在中的消息映射入口处加入如下代码: ()。 样式如下: (, )
{{() () () () (, ) (, ) (, ) (, ) (, ) }} () ()
(用来储存错误代码)、 (用来储存打开设备的值) [](用来储存出错内容)
9
() { ();
… :
; 初始化正在播放标识 ; 初始化正在暂停标识 0; 初始化设备标识 ; }
10
() 打开一个文件 { ; 定义类的用来存储文件名
; 定义类的用来存储文件扩展名 定义结构体变量用来存储打开文件的信息和返回的设备标识信 息 ; 定义用来储存返回的错误标识 []="波形音频文件(*)|*序列(*)|*\0"; (); 通过打开按钮时显示的内容
(() );
>();
释放接口();
绘制窗口
强制重新
}
通过以上调用,我们
的程序已经将位图文
件成功载入到变量中
了
41
下面就是显示的步骤,与一般的绘图程序 类似,显示代码也是在中完成。
2540 (* ) { * = (); (); : () {;
; >(); >();
42
(, (>(), ), );
(, (>(), ), );
30
() { [] = " (*;*;*)|*;*;*";
件
(, , , , ); (() )
= () 获得视频文件名
}
() {
>()(); 首先停止正在播放的 >()(); 准备播放 >(); 载入视频文件自动播放
只允许打开视频文
Hale Waihona Puke Baidu31
()
{ >()(); 停止播放 }
()
{ 只允许打开音频文件
()
{ []; 保存文件名的缓冲
(, ); 初始化该缓冲
;
打开文件的关键结构
(, ()); 初始化该结构
() 设置该结构的大小
设置属性:文件必须存在、路径必须存在、隐藏只
读文件
|
|;
; 设置该文件框的父窗口
37
(" (*;*;*;*;*;*)\0
*;*;*;*;*;*\0
(*)\0*\0
(*)\0*\0 (*)\0
*\0 (*)\0*\0
(*)\0*\0
(*)\0*\0\0");
支持的文件扩展名
("选择图片");
对话框标题
=;
设置返回文件名的缓冲
=;
设置缓冲的长度
( ()) 调用对话框
();
载入该文件
}
设置
38
下面实现关键函数——:
()
{ (,0,0);
打开文件
( ); = (, ); 获得文件大小
(-1 );
35
【例12-4】使用创建 应用程序,用来装载并显示图片。 创建工程文件。为显示图片,为添加成员以装载图形, 并定义载入图片的函数的声明:
; : ( );
接下来为成员添加初始化和释放的代码: () { =; }
() { () >(); }
36
为实现打开文件,我们添加“操作”菜单,增加菜单
项“载入图片”,其为,然后映射消息响应函数:
7
【例12-2】编写一个音频播放器程序,可以选 择音频文件,并控制其播放、暂停播放、暂 停后的继续播放以及停止播放的功能
8
1. 将头文件加入到文件中,将多媒体函数库通 过菜单中的命令来与程序链接起来
2.在类上增加类型的成员变量,具体如下: (作为判断正在播放的标识) (作为判断正在播放的标识)、
为类添加四个成员,两个用来播放多媒体文件,两个 用来保存待播放的文件名,修改后的文件如下: 4; 前示声明 : {: (); ()
:
* (); 4 *; 4 *;
用来播放视频
用来播放音频
;
视频文件名
;
音频文件名
26
初始化和释放指针,修改文件: "4" "" "" () {
: = 4; = 4; }
•
弄虚作假要不得,踏实肯干第一名。02:20:24 02:20:2402:2012/1/2020 2:20:24 AM
3
12.1.1 一个简单的应用实例
【例12-1】设计一个简单的音频播放程序,程 序启动时,播放系动启动时候的音乐
1.创建工程文件;打开文件,在 语句的上一行顶头加 入语句 <>
2.将与应用程 序链接起来
3.在的()函数中的 之前加上代码: ("");
4
12.1.2 几个常用的音频函数
(1) ()函数:用来播放系统提示音 (2) ()函数:播放音频 (3) ()函数:播放来自资源中的声音
()
{;
;}
27
对于和两个变量,由于对应的是 控件,因此不但需要来初始化指针, 还需要使用它的函数来创建初始化 控件。
由于两个控件是作为的子窗口运 行的,通常它们的创建是在的函数 中完成,因此需要响应的消息,并 在其中创建两个控件:
28
()
{ (() -1)
-1;
:
(, ); 获得标准箭头鼠标指针
("不明错误标识","出错");
;
}
设置正在暂停标识为
} }}
18
() {();
发送停止命令消息,参数说明当命令执行结束后函数 才返回值 () { ((,())) (,"出错");
("不明错误标识","出错"); ;
} ; 设置正在播放标识为 ; 设置正在暂停标识为 ("如要播放新的文件,请在打开前先关闭现有文件"," 注意"); 提请用户注意先关闭现有文件
23
将函数加入应用程序中:
() { ()
成功播放完成后重置标识 { 设置正在播放标识为 设置正在暂停标识为 0; } -1否则返回错误 }
24
12.2 利用 控件实现多媒体程序设计
【例12-3】编 写应用程序, 使得用户可 以分别选择 一个视频文 件和一个音 频文件来同 时播放或者 分别播放
25
(, , ) { (, , );
: ; (); >(); } 在播放视频时,该控件会自动显示出的控制面板, 可以通过在函数中,在创建之后调用函数来隐藏该控 件的控制面板。
>("");
34
12.3常见格式图片的显示
程序中经常要显示各种图片,对于普通的、等 位图格式文件,的,函数已经提供了支持,但 是对于网页中常见的、、以及矢量格式的图片, 自带了一个实现这个功能的函数——。但是由 于中只提到该函数支持、、格式,因此该函数 经常被大家忽视,这里将介绍如何使用该函数 来显示各种格式的图片。
程序设计
教材: 面向对象与可视化程序设
计 (第二版)黄维通编著,清华大 学出版社 参考书: 1. 《程序设计教程》,钱
何倩 桂电信息与通信学院
能编著, 清华大学出版社
2《 程序设计-基础与实例分析》,
朱晴婷编著
第10讲 多媒体应用程序的设计
2
12.1 利用音频函数
为了介绍多媒体程序的设计,我们 先介绍一个非常简单的例子,希望 读者能够通过这个简单的例子,了 解音频文件的播放方法
=;
= (, );
分配全局内存,获得内存句柄
( ); = (); 锁定内存,获得内存指针
( );
39
= 0;
= (, , , , ); 读取文件
( ); (); (); =;
= (, , ); 从内存数据创建*
(() );
40
()
创建
>();
从接口中载入图片到中
= (, , , , ( *));
}
47
20.12.102:20:2402:2 002:2020.12.120.12. 102:20
谢谢
02:20 20.12 102:2
2020年12月1日星期二2时20分24秒
•
踏实,奋斗,坚持,专业,努力成就 未来。20.12.120.12.1T uesday , December 01, 2020
// 缩放
{ CDC memdc;
// 创建内存DC
memdc.CreateCompatibleDC(pDC);
CBitmap bmp;
// 创建位图
bmp.CreateCompatibleBitmap(pDC, nWidth, nHeight);
memdc.SelectObject(bmp); // 将位图选入内存DC
}}
14
() 从头开始播放 {;
结构体变量存储播放相关信息 () 如果没有正在播放的声音 {()();
为发送消息指定窗口句柄 0设置播放位置从头开始 (,()()); 开始播放声音,参数说明开始播放的位置包含在结构 体中 参数的意义是播放完后发送消息
15
() { ((,()))
(,"出错");
("不明错误标识","出错");
m_pPicture->Render(memdc.GetSafeHdc(), 0, 0, nWidth,
nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);
//将图片以原始尺寸绘制到内存DC中
pDC->StretchBlt(0,0,nWidth/2,nHeight/2,&memdc,0,0,
nWidth,nHeight,SRCCOPY);
// 从内存DC缩放拷贝到显示DC
}
else //原始尺寸显示
m_pPicture->Render(pDC->GetSafeHdc(), 0, 0, nWidth,
nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);
19
}
() 关闭当前设备 { () 若什么文件都没有打开过,就不执行关闭操作 {();
() { ((,()))
(,"出错");
("不明错误标识","出错"); ;}
(,0); () { ((,()))
(,"出错");
("不明错误标识","出错");
;}
0; 关闭文件后将变量设为 0
}}
20
()
{ ();