网络歌曲在线播放系统文档格式.docx
《网络歌曲在线播放系统文档格式.docx》由会员分享,可在线阅读,更多相关《网络歌曲在线播放系统文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
EXIT退出当前的MP3界面
在实现这些功能的时候,我将用到MCIWnd媒体控制接口。
MCIWnd是Windows95提供的基于MCI的窗口类。
MCIWnd并不属于MFC,因此在VC++中利用MCIWnd进行编程,首先应包含头文件VFW.H。
然后我们就可以利用MCIWnd窗口对象提供了可靠的方法对媒体播放进行控制。
首先在类的头文件中申明一些变量和函数
CStaticm_Status;
用来在静态的文本上显示文字
CButtonm_Play;
CButtonm_Pause;
CStringm_Path;
这个是用来表示获得文件的路径
afx_msgvoidOnExit();
afx_msgvoidOnStop();
afx_msgvoidOnPause();
afx_msgvoidOnPlay();
afx_msgvoidOnOpen();
HWNDm_Audio;
窗口句柄
BOOLPause;
实现Exit
思路是:
按Exit按纽的时候,如果窗口句柄存在就调用Destroy销毁窗口然后调用ONOK否则直接退出
HCURSORCMp3PlayerDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMp3PlayerDlg:
OnExit()
if(m_Audio!
=NULL)
{
MCIWndDestroy(m_Audio);
OnOK();
}
CDialog:
OnCancel();
实现Stop
按Stop按纽的时候,在静态文本中显示SelectionStoped首先用MCIWndStop停止正在播放的文件,如果窗口句柄存在就调用Destroy销毁窗口。
再将窗口还原为有用,以至下次可以继续使用
OnStop()
MCIWndStop(m_Audio);
if(m_Audio!
m_Status.SetWindowText(_T("
SelectionStoped"
));
m_Play.EnableWindow(TRUE);
实现Pause
按Pause按纽的时候,在静态文本中显示SelectionPause
在暂停与播放间轮流的,实现的时候,先要判断之前的状态再选择的调用MCIWndResume,MCIWndPause
OnPause()
if(Pause)
m_Pause.SetWindowText("
Pause"
);
//m_Pause对应的控件的值
MCIWndResume(m_Audio);
//返回到你暂停的位置并重新开始
Pause=FALSE;
//设置Pause的值啊否则下次按Pause的时候会有问题
SelectionPaused"
else
MCIWndPause(m_Audio);
Pause=TRUE;
实现Play
按Play按纽的时候,在静态文本中显示Playing...
如果m_Audio为空就创建一个窗口否则退回文件开始处然后再调用MCIWndPlay来播放文件
设置好Pause和m_Play.EnableWindow的初值
OnPlay()
if(m_Audio==NULL)
m_Audio=MCIWndCreate(this->
GetSafeHwnd(),//获得父窗口
AfxGetInstanceHandle(),//获得当前实例句柄
WS_CHILD|WS_VISIBLE|MCIWNDF_NOMENU,//窗口样式
m_Path);
//m_Path文件路径
m_Status.SetWindowText(_T("
Playing..."
MCIWndHome(m_Audio);
}//
MCIWndPlay(m_Audio);
Pause=FALSE;
实现Open
CFileDialogmp3(TRUE,NULL,NULL,OFN_HIDEREADONLY,"
MP3Files(*.mp3)|*.mp3|"
这句话代表选择MP3文件。
然后通过函数获得文件路径,从而用可以用函数PLAY来播放
OnOpen()
m_Audio=NULL;
CFileDialogmp3(TRUE,NULL,NULL,OFN_HIDEREADONLY,"
//选择MP3文件
if(mp3.DoModal()==IDOK)
{
m_Path=mp3.GetPathName();
UpdateData(FALSE);
}//
}
(2)server和client界面
由于这两个界面是相连的来传输文件的,而且我们在教学的时候也是一起来教的,所以这两个界面一起来分析。
server界面
我做的SERVER界面只有一个功能就是选择要传输的文件,并和CLIENT相连
首先申明一个文件的结构体
typedefstruct_SOCKET_STREAM_FILE_INFO{
TCHARszFileTitle[128];
//文件的标题名
DWORDdwFileAttributes;
//文件的属性
FILETIMEftCreationTime;
//文件的创建时间
FILETIMEftLastAccessTime;
//文件的最后访问时间
FILETIMEftLastWriteTime;
//文件的最后修改时间
DWORDnFileSizeHigh;
//文件大小的高位双字
DWORDnFileSizeLow;
//文件大小的低位双字
DWORDdwReserved0;
//保留,为0
DWORDdwReserved1;
}SOCKET_STREAM_FILE_INFO,*PSOCKET_STREAM_FILE_INFO;
要用的
afx_msgvoidOnButtonLicsen();
实现发送文件
包括三部分,判断是否有要传输的文件,判断CLIENT端是否有要接受文件,发送文件
1.判断是否有要传输的文件,是通过PATH,看是否有文件的路径来寻找,若不存在则显示不存在,存在的话继续往下
CFilemyFile;
if(!
myFile.Open(Dlg.GetPathName(),CFile:
modeRead|CFile:
typeBinary))
AfxMessageBox("
文件不存在!
"
MB_OK|MB_ICONERROR);
return;
2.判断CLIENT端是否有要接受文件,
sockSrvr.Listen();
3.选择并发送文件
FindClose(FindFirstFile(Dlg.GetPathName(),&
FindFileData));
//释放FindFirst操作所申请的内存资源
memset(&
StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());
复制
StreamFileInfo.dwFileAttributes=FindFileData.dwFileAttributes;
StreamFileInfo.ftCreationTime=FindFileData.ftCreationTime;
StreamFileInfo.ftLastAccessTime=FindFileData.ftLastAccessTime;
StreamFileInfo.ftLastWriteTime=FindFileData.ftLastWriteTime;
StreamFileInfo.nFileSizeHigh=FindFileData.nFileSizeHigh;
StreamFileInfo.nFileSizeLow=FindFileData.nFileSizeLow;
sockRecv.Send(&
StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
UINTdwRead=0;
while(dwRead<
StreamFileInfo.nFileSizeLow)
byte*data=newbyte[1024];
UINTdw=myFile.Read(data,1024);
sockRecv.Send(data,dw);
dwRead+=dw;
myFile.Close();
sockRecv.Close();
AfxMessageBox("
发送完毕!
CLIENT界面
我做的CLIENT界面,是将SERVER传输过来的文件保存在CLIENT的文件夹里面
首先和SERVER一样申明一个文件的结构体
还有
afx_msgvoidOnButtonSend();
afx_msgvoidOnChangeEditIpaddress();
实现通过地址来判断是否连接
添入文本数据后利用GetDlgItemText函数获取控件ID的文本,判断是否正确后,开始连接并接受
CStringszIpAddress;
GetDlgItemText(IDC_EDIT_IPADDRESS,szIpAddress);
if(szIpAddress.IsEmpty())
GetDlgItem(IDC_BUTTON_SEND)->
EnableWindow(FALSE);
EnableWindow(TRUE);
实现接受
包括两部分,判断是否连接,接受文件
1.判断是否连接
if(!
sockClient.Connect((LPCTSTR)szIP,800))
连接到对方机器失败!
2.接受文件
SOCKET_STREAM_FILE_INFOStreamFileInfo;
sockClient.Receive(&
CFiledestFile(StreamFileInfo.szFileTitle,CFile:
modeCreate|CFile:
modeWrite|CFile:
typeBinary);
UINTdwRead=0;
memset(data,0,1024);
UINTdw=sockClient.Receive(data,1024);
destFile.Write(data,dw);
SetFileTime((HANDLE)destFile.m_hFile,&
StreamFileInfo.ftCreationTime,
&
StreamFileInfo.ftLastAccessTime,&
StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
接收完毕!
五、运行结果
六、全部代码
MP3界面
//Mp3PlayerDlg.cpp:
implementationfile
//
#include"
stdafx.h"
Mp3Player.h"
Mp3PlayerDlg.h"
vfw.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CMp3PlayerDlgdialog
CMp3PlayerDlg:
CMp3PlayerDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMp3PlayerDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMp3PlayerDlg)
m_Path=_T("
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
DoDataExchange(CDataExchange*pDX)
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMp3PlayerDlg)
DDX_Control(pDX,IDC_Status2,m_Status);
DDX_Control(pDX,ID_Play,m_Play);
DDX_Control(pDX,ID_Pause,m_Pause);
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CMp3PlayerDlg,CDialog)
//{{AFX_MSG_MAP(CMp3PlayerDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(ID_Exit,OnExit)
ON_BN_CLICKED(ID_Stop,OnStop)
ON_BN_CLICKED(ID_Pause,OnPause)
ON_BN_CLICKED(ID_Play,OnPlay)
ON_BN_CLICKED(ID_Open,OnOpen)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CMp3PlayerDlgmessagehandlers
BOOLCMp3PlayerDlg:
OnInitDialog()
OnInitDialog();
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
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);
CDialog:
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
}//按关闭按纽的时候如果窗口句柄存在就调用Destroy销毁窗口然后调用ONOK否则直接退出
//设置Pau