一1.docx
《一1.docx》由会员分享,可在线阅读,更多相关《一1.docx(11页珍藏版)》请在冰豆网上搜索。
一1
多媒体播放器开发
本学期院里组织我们到东软进行了为期一周的实习,在实习期间我们以组为单位实现了一个MediaPlayer播放器功能。
我在此功能模块中实现的是设置循环功能,以下是实现的过程及结果。
一.播放器实现功能:
(1)简易播放界面,包括文件、关于。
其中文件的下拉菜单有打开、删除、退出。
(2)右键菜单及循环播放,全屏按钮的设置。
(3)右键菜单功能实现:
a.添加曲目
b.删除曲目
c.清空列表
(4)设置循环功能实现:
a.循环功能
b.播放歌曲,自动高亮
(5)设置全屏功能实现:
(6)主菜单选项实现:
a.打开
b.删除
c.退出
d.关于
(7)整合,测试
二.操作步骤:
本次实习我实现的是功能是(4),实现步骤如下:
选择View中的list,在控件中选择CheckBox,选择好后点击右键,选择Properties将ID名改为IDC_LOOP,在Caption的空白处添加“循环播放”,在Styles中选择Push-Like,
在控件中选择Button,点击右键选择Properties,将ID名改为IDC_FULL_SCREEN,在Caption的空白处添加“全屏”。
在编辑窗口中输入代码。
三.程序代码:
1.头文件代码如下:
//MediaPlayerDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"MediaPlayer.h"
#include"MediaPlayerDlg.h"
#include"wmpmedia.h"
#include"wmpplaylist.h"
#include"WMPControls.h"
#include"wmpsettings.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMediaPlayerDlgdialog
CMediaPlayerDlg:
:
CMediaPlayerDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMediaPlayerDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMediaPlayerDlg)
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMediaPlayerDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMediaPlayerDlg)
DDX_Control(pDX,IDC_LIST1,m_ItemList);
DDX_Control(pDX,IDC_PLAYER,m_player);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMediaPlayerDlg,CDialog)
//{{AFX_MSG_MAP(CMediaPlayerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(NM_RCLICK,IDC_LIST1,OnRclickList1)
ON_COMMAND(ID_Add,OnAdd)
ON_COMMAND(ID_Clear,OnClear)
ON_COMMAND(ID_Delete,OnDelete)
ON_COMMAND(ID_ABOUT,OnAbout)
ON_BN_CLICKED(IDC_FULL_SCREEN,OnFullScreen)
ON_BN_CLICKED(IDC_LOOP,OnLoop)
ON_NOTIFY(NM_DBLCLK,IDC_LIST1,OnDblclkList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMediaPlayerDlgmessagehandlers
BOOLCMediaPlayerDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
((CButton*)GetDlgItem(IDC_LOOP))->SetCheck
(1);
m_player.GetSettings().setMode("loop",true);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMediaPlayerDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCMediaPlayerDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMediaPlayerDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMediaPlayerDlg:
:
OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMenupopMenu;
popMenu.LoadMenu(IDR_CONTEXT);
CMenu*pSubMenu=popMenu.GetSubMenu(0);
POINTpt;
GetCursorPos(&pt);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,pt.x,pt.y,this);
*pResult=0;
}
2.循环播放代码如下:
voidCMediaPlayerDlg:
:
OnLoop()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_player.GetSettings().setMode("loop",((CButton*)GetDlgItem(IDC_LOOP))->GetCheck());
}
3.实现当前播放功能代码:
BEGIN_EVENTSINK_MAP(CMediaPlayerDlg,CDialog)
//{{AFX_EVENTSINK_MAP(CMediaPlayerDlg)
ON_EVENT(CMediaPlayerDlg,IDC_PLAYER,5806/*CurrentItemChange*/,OnCurrentItemChangePlayer,VTS_DISPATCH)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
voidCMediaPlayerDlg:
:
OnCurrentItemChangePlayer(LPDISPATCHpdispMedia)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
for(inti=0;i{
m_ItemList.SetItemState(i,0,LVNI_SELECTED);
CWMPMediamedia=m_player.GetCurrentPlaylist().GetItem(i);
if(media.GetIsIdentical(m_player.GetCurrentMedia()))
{
m_ItemList.SetItemState(i,LVNI_SELECTED,LVNI_SELECTED);
}
}
}
4.实现双击播放歌曲代码:
voidCMediaPlayerDlg:
:
OnDblclkList1(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intsel=m_ItemList.GetNextItem(-1,LVNI_SELECTED);
m_player.GetControls().playItem(m_player.GetCurrentPlaylist().GetItem(sel));
*pResult=0;
}
四.循环播放实现窗体:
5.实习心得
本次实习我们实现的是MediaPlayer播放器,我们是以组为单位来实现这一个功能。
我在此功能实现过程中实现的是循环播放部分的功能,这部分功能在实现时遇到很多问题,包括头文件的添加,以及代码的调试。
以前我们在学校也做过相关的C++的实验,但是在本次实验实现MediaPlayer播放器时,我们人遇到很多问题,首先,所使用的环境与以前在学校里所使用的有很大的不同,其次,在代码实现时由于代码具有的实际意义,在理解和实现上很困难。
但是,由于MediaPlayer播放器是一个具体的功能软件,在实现的过程中我们学到了很多知识。