MFC视频播放器(试过,可以成功)

MFC视频播放器(试过,可以成功)
MFC视频播放器(试过,可以成功)

1需求分析

NBA现役巨星资料库

随着NBA (National Basketball Association)近二十年来在中国市场的扩张,如今中国积攒的相当一部分NBA的忠实球迷,更随着中国如王治郅,姚明,易建联等中国球员加入NBA,更多的中国人开始了解NBA。从而NBA得各种信息变得炙手可热,如NBA巨星们的视频,个人资料,周边故事,赛事,等等。这些信息,现如今不仅仅在网络上被各种人使用使用,在日常生活中也是很值得爱好NBA的人去了解的。

本人也是一位NBA的爱好者,在一次资料的搜集中,我想要查询网络上“现役NBA巨星的资料”时,可并没有发现,只有“ 50大”(NBA历史上前五十的巨星)诸多资料。其现役巨星的资料大多都是分散的记录。

在当下,“50大”只能是NBA的周边或历史,而现役巨星才是现在球迷的追求对象,所以一套完整的现役巨星资料可以称得上是一份绝对的值得珍藏的资料。

但是整理一份资料简单,只需在各种网站中搜索巨星的名字,相关资料自然会弹出,可如何去让它具有一个更高的集成性,如何去让它更符合我们拥有如今操作理念,不在是单一的单窗口字面文档。

设计一个基于数据库且可实现多窗口,在形式上多样化,这就是此次MFC程序设计的主导方向。

MFC程序设计

既然程序是基于数据库的,固然数据库是必须建立的,在MFC建立数据库的方式有很多,期中最简单操作的是Access数据库的调用可通过ODBC。而形成形式上的突破方法是很多的,如联入多媒体,插入视图,增加功能等等。

数据流图

图片视频

2系统设计概要设计

在需求分析中提到所建立的程序可以实现多窗口调用且具有多功能的。首先, 建立的程序是基于数据库的多文档格式 MFC 程序,整个程序大至可分为三个模 块。 体系结构设计

分析我设计的这个程序,其三个模块并不是互相调用的,而是另两个模块以窗 口对接按键的形式,被第一个模块调用的。这样的结构存在属于“层次结构” , 高层的工作建立在低层的工作上面,把复杂的事情转化成多件逐层递进的事件。 模块设计

上面说到,这个程序设计中有三个模块,其中两个以窗口形式存在的模块与另 一模块的耦合(Coupling )较强,可是这两个模块却又是完全独立的,他们属于 强内聚(Cohesion )。这样的设计算不上“强内聚,弱耦合”。可在程序中以窗口 运行的两个模块是具有一定的封闭性。

详细设计

? NEAffite^星信电:城宰(Atctis 2000丈件棺式I

角炳d tedistma dmw I X I -a 蛊 iB

2使用ODBC 实现对Access 的驱动(WIN7在主控面板右上角输入“ ODBC”)

科比?布莱恩特 砂圭尔?真的 阿伦?

艾弗森 薔怖恩-韦懐 勒布朗?普姆斯 億怖特?霍华德 克里斯?保罗 史蒂夫

?抽什 凯文?仙内特 待雷西?麦克格€ 姚用

小飞侠

1.英尺$英=

2.1GM 打却?1英 誓案 1.83M 阳贪尺0英十 闷电侠 1.93m / 6尺4寸 小皇帝 2. (J3mf6英尺£英匚 M

21册6英尺11金

蹩王

1.83m

1.91m 線王

2.1W6 尺 11 寸 T _

Mac

2. 03冊£英尺£英;

沦鋼T 英尺6疑

sa.oks/aos 磅 得分后卫/小前^洛杉矶湖人限 HT 阪型融 中饉 漩士顿凯尔特” T4.业討1閃磅得分后卫 费城七六人臥 20&切听埜斤得分后卫/组织后迈阿密热火

113 4W250^小前覆 迈阿魏火臥 120kg 中锂

奥兰多魔术阴 TO- *kg 扌空球后卫 新臭尔良靑虫郢 89kj

113.4ke/2S0^ 101kg/223i^

134.2k* 渐磅

锋后 前

分锂 犬得中

菲尼克斯衣阳F 披士屯帥特‘ 底特律活基陆 休斯顿火箭

记录:?E

r^jrs II 裁 I

隼号

出牛曰期丨 身為

1 EE5*]共有记录数"1

3.建立一个MFC程序,多文档(MDI )格式打开,且在第三部中,选取读取数据库,在数据库中ODBC的下拉栏中选择自己刚才建立驱动的Access文档,完毕后点击完成。

将这部分静态文本更改属性与栏目名对应。

s:d

j ..............

1 L场上谊呂Edii

FR S

E血

[Edit

5?在类向导(MFC ClassWizard)中添加每个栏目的类(最终的每一步结束后都

要点击

OK 键,VC 才会保存设置)

6. 这样就实现了数据的直观表现,接下来是添加“查询功能” 。新建一个对话框 Dialog ),加入一个动态文本框且去掉取消按键,这时修改动态文本的 ID ,且 为其添加新类。

MFc7:las&Wizard

接着在主面板上添加一个按键,更改属性名称为“巨星查找”,然后建立类向导,

Mtrssage Maps Member Variables Aulnmatium

Class oaime :

▼ |FindDlg

L MQWa\kuqiTindDlg.b. FX.AMQWS\kuqi^FindDlg r cpp

I

Type

MembEF Add Variable... AidliiveX E VEH I K

Adri

T

Delete Variable IDC EDIT NAME

Erojed : | Icuqi

FAC+1JLM1I y-tfontrol ID's :

Descrlplio

CStrini

in strName

Cancel

Updalt Col

给他一个单击指令(BN_CLICKED ),然后对其编辑(EDIT)建立消息映射,输入相应代码(在一章节中会说明)从而实现查询功能。

7. 插入播放器控件。如今MFC的发展已经很先进,不仅自身拥有比较的大的控件库,还能在Windows寻找已注册的软件控件。这样一来,对控件的调用显得尤为方便。在Windows常见的影音播放器中有Media Player,暴风影音(Storm Player)等,我选择插入的空间是Media Player,因为其是Windows自带的,这样便可以增强程序的广泛性。

首先建立一个对话框,然后点击鼠标右键,插入一个控件,在列表中选择

Win dows Media Player。

Insert ActiveX Control

ActiveX control:

XDownloaddManager Class XPlayerOCX Control 性能益视器控制

Path:

C^wi ndaws\systeni32\wfnp.dll

然后对话框中会出现一个传统的Media Player的窗口,在此窗口上

点击右键,建立类向导,打开Memble Variables,为此控件添加相关的数据成员,方法同图四。但要注意会弹出以下对话框

X匚述亞

Copy @

Paste

Insert ActiveX ControL-

UploadCtl Class

VideoRenderCtl Class

WangV/angX Class

Windows Live Mail Mime Editor

Windows Live上裁工具

Windows Mail Mime Editor

Cancel

Windows Media Pla

Size to Conte nt

I孟Align Left Edges

?? Align Top

寥Check Mnemonics

卓口砂$也甜rd,”

EventSr.H

Efi1Prop^rtie?

这些都是与WMP (Windows Media Player )有关的类,其实有部分是多余的,因为在使用控件时并不会去调用,可为了快捷,直接点击0K就行了,此处不做解释。

这时播放器已经有了半条生命了,还要为其添加一项打开项目。加入一个按键,

改其属性名称为Open,然后给它建立一个单击指令(BN_CLICKED),在编辑(EDIT)中为其添加消息映射(代码下一章节可见)。最后同样要让在主窗口上的按键于此窗口连接,方法同6。

8. 最后插入一些图片美化窗口。选取图片,另存为“256色位图”,然后回到MFC 中,工作区中插入(In sert)图片(Bit map),点击引入(Import),加入欲加入的位图。加入后,在想加入图片的窗口中加入图片控件(Picture),右击属性,调整为位图,在ID栏中选择刚才所加入位图的ID即可。但要注意,加入的图片一般会覆盖在某些控件上,应该合理布局。

Insert Resource

程Accelerator

錮Bitmap

Cursor Dialog

HTML Icon Menu

Siring Tabic 忌

na Toolbar O Version 伪Import Resource

―Ct+S5

r" ■ ^>NG司咕

331字书

交件名Of,

文件裟型CT)

?

取消I well03_1024

230 KB

yaoyong

45.2 KB

283 KB

Open

as:

3代码实现

1 ?为查询系统添加代码

(接Two ? 6)在点击编辑后,首先在?cpp 文件最上方加入头文件 #i nclude "Fi ndDIg.h"

然后在后面void CKuqiView::OnButton2()函数中加入 { Fin dDlg myDlg; myDIg.DoModal (); m_pSet->MoveFirst(); while (!m_pSet->lsEOF()) { _

if(m_pSet->m_colu mn1 == myDlg.m_strName) { ~ ~ 一

UpdateData(FALSE); return;

} m_pSet->MoveNext();

} _

MessageBox("您查询的球员可能不是超级巨星","请注意 ",MB_OK|MB 」CONWARNING);

return;

最终效果

回 京带卜I

理网

■口1W .RbH

□ Cf IQ h QI Al H 7 1^ H II tl

}

2 ?为视频播放器插入Open按键

(接Two ? 7)打开Open按键的编辑后,加入如下编码:

void Show::O nButto n2()

{

// TODO: Add your con trol no tificatio n han dler code here

char szFileFilter[]=

"Mp3 File(*mp3)|*mp3|"

"Wma File(*.wma)|*.wma|"

"Video File(*dat)|*dat|"

"Wave File(*.wav)|*.wav|"

"AVI File(*.avi)|*.avi|"

"Movie File(*.mov)|*.mov|"

"Media File(*.mmm)|*.mmm|"

"Mid File(*.mid;*,rmi)|*.mid;*.rmi|"

"MPEG File(*mpeg)|*.mpeg|"

"All File(**)|**||";〃文件类型过滤

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY ,szFileFilter);

if(dlg.DoModal()==IDOK){

CStri ng PathName=dlg.GetPathName();

PathName.MakeUpper(); m_ActiveMovie.SetUrl(PathName);

}

}

3 ?连接“视频展示”与“播放窗”

(接Two ? 7)进编辑后,将CKuqiView.h文件翻至最上方,然后加入

#i nclude "Show.h"

再在下方按键函数中加

void CKuqiView::O nButto n1()

{

// TODO: Add your con trol no tificati on han dler code here

Show s;

s.DoModal ();

}

4系统测试

功能性测试:

在这一环节中,这个程序完成目的是比较好的。最终还是基本达到了预期效果,功能实现的也比较全面。

容错性测试:

在这个环节里,有很多是我在编写程序中遇到的,问题如下:

一.Media Player在作为控件后,虽然很多函数都是开放的,而且那些基本

按键都是存在的,可是恰恰是关键的按键却无法实现调用。比如,我想自己

插入一个按键去实现对Media Player的“播放操作”,可是我却在

CWMPPIayer4 (Media Player的一个类)中无法调用,总是会弹出“ error

C2039: 'play' : is not a member of 'CWMPPIayer4',可是我在

CWMPPIayer4 中却可以找到它的子类CWMPControls,在这个子类中就存

在play ()。最终我尝试着解决,既然,在CWMPControls中不能调用,那

我就将play

()重新改成一个在CWMPPlayer4下的成员函数,直接将它加入类中,再

在” CWMPPIayer4.h”文件中给play ()这个函数赋予它原有的功能,最

后再删去原来CWMPControls原有的的play ()函数。虽然我知道这更改的

源程序的很多代码,可是这样改理论上应该是没错的,并且,最终也没有检

测出语法错误,可是在运行的时候就出错了,就是说新的的调用还是有冋

题,所以,这里我还是有很深的疑冋。

二.无法实现的视频拖动。这个项目,我也研究很长时间,最后总是有问题。

我的目的是在打开视频播放器后可以拖动一个视频放在播放器的窗口里就可

以实现视频的自动播放。我的想法是,因为再拖动视频到窗口里是,最终动

作时松开鼠标,所以我加入了“鼠标左键弹起( MouseUp)”的命

令,在这个消息里添加消息映射,我尝试了一个

m_ActiveMovie.DragAcceptFiles (TRUE);这个函数虽然可以调用,而且它的意义也正是接受文件,后来再添加后紫红播放时还是遇到了不发调用

的问题。

三.支持格式太少。MediaPlayer播放格式支持的太少,这是它本身就存在的弊

病,比如现如今网络常用的rm或rmvb的形式,它都无法实现播放。而我在想问这个控件扩充播放格式时,只在Open里加了一些语句想要实现播放格

式的添加,可是这样虽然可以Open里允许打开rm,rmvb形式,但却还是无法播放,看播放也就是所需解码器是另一个模块。

四.不同系统,控件的不同调用。比如现在我在我的win7系统写好这个程序,其

中调用了Media Player,运行也正常。可为什么在学校的xp系统中会出现

很多问题呢?我自身有一个解,但不应定对。在win7的系统中Media Player

是12代,而Xp中原配的Media Player是10代的。12代的很多东西都是

超越10代的,可因为12代必然向下兼容,所以10代的功能应该都可以在

12代中实践,反之,则未必。虽然从程序的外观看是插入了控

件,可是其实每次实现Media Player都还是基于Windows自身的Media

Player功能调用,所以系统的改变也会对Media Player的调用存在影响。

五.加入可以随资料变动的图片。最终这个还是没有研究出来,客观原因是

因为这个涉及到了数据库二进制输出等难点,可应该还是主观的原因会多一

些。

性能与效率测试:

这方面这个程序还是可以的,除了些多余加载的Media Player类之外,别的语句简洁,清晰,明了。而且整体操作也比较容易。

易用性测试:

Whe n you are old and grey and full of sleep, And no ddi ng by the fire, take dow n this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your mome nts of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim soul in you,

And loved the sorrows of your cha nging face; And bending dow n beside the glow ing bars, Murmur, a little sadly, how love fled

And paced upon the mountains overhead

And hid his face amid a crowd of stars.

The furthest dista nee in the world

Is not betwee n life and death

But whe n I sta nd in front of you

Yet you don't know that

I love you.

The furthest dista nee in the world

Is not whe n I sta nd in front of you

Yet you can't see my love

But whe n un doubtedly knowing the love from both Yet cannot be together.

The furthest dista nee in the world

Is not being apart while being in love

But whe n I pla inly cannot resist the year ning

Yet prete nding you have n ever bee n in my heart. The furthest dista nee in the world

Is not struggli ng aga inst the tides

But using on e's in differe nt heart

To dig an un crossable river

For the one who loves you.

Whe n you are old and grey and full of sleep,

And no ddi ng by the fire, take dow n this book, And slowly read, and dream of the soft look

Your eyes had once, and of their shadows deep; How many loved your mome nts of glad grace, And loved your beauty with love false or true,

But one man loved the pilgrim soul in you,

And loved the sorrows of your cha nging face;

And bending dow n beside the glow ing bars, Murmur, a little sadly, how love fled

And paced upon the mountains overhead

And hid his face amid a crowd of stars.

The furthest dista nee in the world

Is not betwee n life and death

But whe n I sta nd in front of you

Yet you don't know that

I love you.

The furthest dista nee in the world

Is not whe n I sta nd in front of you

Yet you can't see my love

But whe n un doubtedly knowing the love from both Yet cannot be together.

The furthest dista nee in the world

Is not being apart while being in love

But whe n I pla inly cannot resist the year ning

Yet prete nding you have n ever bee n in my heart. The furthest dista nee in the world

Is not struggli ng aga inst the tides

But using on e's in differe nt heart

To dig an un crossable river

For the one who loves you.

務崔表連用向导创建表通过揃人站创堡叢

NBA

相关主题
相关文档
最新文档