自己動(dòng)手開發(fā)音樂播放器文件操作_第1頁(yè)
自己動(dòng)手開發(fā)音樂播放器文件操作_第2頁(yè)
自己動(dòng)手開發(fā)音樂播放器文件操作_第3頁(yè)
自己動(dòng)手開發(fā)音樂播放器文件操作_第4頁(yè)
自己動(dòng)手開發(fā)音樂播放器文件操作_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

轉(zhuǎn)載請(qǐng)注明出處:青島網(wǎng)站建設(shè)自己動(dòng)手開發(fā)音樂播放器(四)文件操作

所有的準(zhǔn)備工作做完了后,就可以實(shí)現(xiàn)播放音樂的功能了嗎,NO,在實(shí)現(xiàn)播放音樂之前還需要處理音樂文件,就是對(duì)音樂文件的增刪改查

首先我們需要知道OPENFILENAME結(jié)構(gòu)和GetFileName函數(shù)

OPENFILENAME結(jié)構(gòu)是一個(gè)文件處理結(jié)構(gòu)

參數(shù):

DWORDlStructSize;

HWNDhwndOwner;

HINSTANCEhInstance;

LPCTSTRlpstrFilter;

LPTSTRlpstrCustomFilter;

DWORDnMaxCustFilter;

DWORDnFilterIndex;

LPTSTRlpstrFile;

DWORDnMaxFile;

LPTSTRlpstrFileTitle;

DWORDnMaxFileTitle;

LPCTSTRlpstrInitialDir;

LPCTSTRlpstrTitle;

DWORDFlags;

WORDnFileOffset;

WORDnFileExtension;

LPCTSTRlpstrDefExt;

LPARAMlCustData;

LPOFNHOOKPROClpfnHook;

LPCTSTRlpTemplateName;

由于OPENFILENAME結(jié)構(gòu)的參數(shù)過多,我就不一一介紹,在后面程序中使用時(shí),我再介紹

還需要一個(gè)函數(shù)GetOpenFileName用于打開文件夾,GetOpenFileName只用一個(gè)參數(shù),OPENFILENAME的地址

在使用時(shí)還需要定義一些全局變量為了減少變量的使用

/************************************************************************

處理音樂文件時(shí)所需的全局變量

*************************************************************************/

staticOPENFILENAMEofn;//打開文件對(duì)話框的文件結(jié)構(gòu)

staticcharszOpenFileName[80*MAX_PATH];//保存文件名

staticcharszFileName[80*MAX_PATH];//保存歌曲的全路徑

staticcharszPath[80*MAX_PATH];//儲(chǔ)存路徑

staticcharOpenMusicFile[MAX_PATH];//保存路徑(用于操作音樂)

為了處理音樂文件還需要定義幾個(gè)函數(shù)

voidFileInit(HWNDhwnd)

/**********************************************************************

函數(shù)名:FileInit(HWNDhwnd)

函數(shù)功能:打開文件初始化文件對(duì)話框

****************************************************************************/

voidFileInit(HWNDhwnd)

{

//文件結(jié)構(gòu)清零

ZeroMemory(&ofn,sizeof(ofn));

//文件結(jié)構(gòu)的大小

ofn.lStructSize=sizeof(ofn);

//文件路徑

ofn.lpstrFile=szOpenFileName;

ofn.lpstrFile[0]=TEXT(‘\0’);

ofn.nMaxFile=sizeof(szOpenFileName);

//過濾器

ofn.lpstrFilter=TEXT("所有支持文件(*.wav,*.mp3,*.wma)\0*.wav;*.mp3;*.wma\0wave文件(*.wav)\0*.wav\0mp3文件(*.mp3)\0*.mp3\0wma文件(*.wma)\0*.wma\0");

ofn.nFilterIndex=1;

ofn.lpstrFileTitle=NULL;

ofn.nMaxFileTitle=0;

ofn.lpstrInitialDir=NULL;

ofn.hwndOwner=hwnd;

ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_ALLOWMULTISELECT;

}

intOpenFileDlg(void)

/**********************************************************************

函數(shù)名:boolOpenFileDlg(void)

函數(shù)功能:打開文件對(duì)話框

************************************************************************/

intOpenFileDlg(void)

{

returnGetOpenFileName(&ofn);

}

voidAddFile(HWNDhwnd)

/**********************************************************************

函數(shù)名:voidAddFile(HWNDhwnd)

函數(shù)功能:添加文件

***********************************************************************/

voidAddFile(HWNDhwnd)

{

TCHAR*p;//用于遍歷音樂文件

intlen=0;

FileInit(hwnd);//文件初始化

if(OpenFileDlg())

{

/*把第一個(gè)文件名復(fù)制到szPath

如果只選了一個(gè)文件,就復(fù)制到最后一個(gè)’\’

如果選了多個(gè)文件,就復(fù)制到第一個(gè)NULL字符*/

lstrcpyn(szPath,szOpenFileName,ofn.nFileOffset);

/*當(dāng)只選了一個(gè)文件時(shí),下面的NULL是必須的

這是不區(qū)別待選了一個(gè)和多個(gè)文件情況

*/

szPath[ofn.nFileOffset]=‘\0’;

len=lstrlen(szPath);

if(szPath[len-1]!=‘\\’)

{

lstrcat(szPath,TEXT("\\"));

}

p=szOpenFileName+ofn.nFileOffset;

ZeroMemory(szFileName,sizeof(szFileName));

HWNDhwndList=GetDlgItem(hwnd,IDC_LIST1);

while(*p)

{

lstrcat(szFileName,szPath);/*給文件名加上路徑*/

lstrcat(szFileName,p);/*加上文件名*/

ListBox_InsertString(hwndList,-1,p);

lstrcat(szFileName,TEXT("\n"));/*換行*/

p+=lstrlen(p)+1;/*移到下一個(gè)文件*/

}

}

}

voidAddFolder(HWNDhwnd)

/************************************************************************************

函數(shù)名:AddFolder(HWNDhwnd)

函數(shù)功能:添加文件夾

****************************************************************************/

voidAddFolder(HWNDhwnd)

{

//保存文件夾的路徑

TCHARszFile[MAX_PATH];

TCHARpBuffer_Directory[MAX_PATH];//存放文件信息

BROWSEINFOsBrowseInfo;//文件夾結(jié)構(gòu)

LPCITEMIDLISTlpitem;//用于判斷是否選擇了一個(gè)文件夾

WIN32_FIND_DATAsfd;//文件的全部屬性結(jié)構(gòu)

//對(duì)文件夾結(jié)構(gòu)清零

ZeroMemory(&sBrowseInfo,sizeof(BROWSEINFO));

//瀏覽文件夾對(duì)話框的父窗體句柄。

sBrowseInfo.hwndOwner=hwnd;

//該瀏覽文件夾對(duì)話框?qū)υ捒虻娘@示文本,用來提示該瀏覽文件夾對(duì)話框的功能、作用和目的。

sBrowseInfo.lpszTitle="請(qǐng)選擇文件夾";

//文件夾對(duì)話框的選項(xiàng)

sBrowseInfo.ulFlags=BIF_RETURNONLYFSDIRS;

//BIF_RETURNFSANCESTORS:返回文件系統(tǒng)的一個(gè)節(jié)點(diǎn)。僅僅當(dāng)選中的是有意義的節(jié)點(diǎn)時(shí),“OK”按鈕才可以使用。

//顯示一個(gè)選擇文件夾的對(duì)話框

lpitem=SHBrowseForFolder(&sBrowseInfo);

//判斷是否選擇了文件夾

if(NULL==lpitem)

{

return;

}

//獲得文件夾的路徑

SHGetPathFromIDList(lpitem,pBuffer_Directory);

strcpy(szFile,pBuffer_Directory);

//枚舉過濾條件(只實(shí)現(xiàn)MP3)

lstrcat(pBuffer_Directory,"\\*.mp3");

/*得到第一個(gè)文件(第一首歌)的句柄*/

HANDLEhfindfile=FindFirstFile(pBuffer_Directory,&sfd);

if(INVALID_HANDLE_VALUE==hfindfile)//判斷文件是否有效

{

return;

}

do

{

if(sfd.cFileName[0]==‘.’)

{

continue;

}

lstrcat(szFileName,szFile);

lstrcat(szFileName,TEXT("\\"));

lstrcat(szFileName,sfd.cFileName);

lstrcat(szFileName,TEXT("\n"));

//得到ListBox控件的句柄

HWNDhwndList=GetDlgItem(hwnd,IDC_LIST1);

//將音樂文件的文件名(歌曲名)添加到播放列表中

ListBox_InsertString(hwndList,-1,sfd.cFileName);

}while(FindNextFile(hfindfile,&sfd));

/*只要沒遍歷到文件夾中的最后一個(gè)文件就一直添加*/

}

在voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)中添加下面的代碼

/*添加歌曲到列表中*/

caseID_MENUADD:

{

AddFile(hwnd);

}

break;

/*添加歌曲到播放列表中*/

caseIDC_ADD:

{

AddFile(hwnd);

}

break;

運(yùn)行效果

刪除列表中的歌曲,刪除列表中的歌曲主要使用ListBox_DeleteString函數(shù)

ListBox_DeleteString有兩個(gè)參數(shù)

intListBox_DeleteString(

HWNDhwndCtl,

intindex

);

一個(gè)是ListBox控件的句柄,一個(gè)是刪除的歌曲的索引

在刪除歌曲中需要定義一個(gè)函數(shù)voidDeleteMusic(HWNDhwnd)用于刪除選定的歌曲

/*************************************************************************

函數(shù)名:voidDeleteMusic(HWNDhwnd)

函數(shù)功能:刪除選定的歌曲

**************************************************************************/

voidDeleteMusic(HWNDhwnd)

{

GetMusic(hwnd);//選定歌曲

//得到ListBox控件的句柄

HWNDhwndList=GetDlgItem(hwnd,IDC_LIST1);

//得到選擇的歌曲的序號(hào)

intCurSel=ListBox_GetCurSel(hwndList);

//下一曲

JumpMusic(hwnd,1);

//刪除選定的歌曲

ListBox_DeleteString(hwndList,CurSel);

}

在voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)中添加下面的代碼

//刪除歌曲

caseIDC_DELETE:

{

DeleteMusic(hwnd);

}

break;

運(yùn)行效果

刪除"美麗的神話"

刪除前

刪除后

清空列表框中的歌曲,清空列表框中的歌曲和刪除歌曲的方法類似,只是循環(huán)刪除,直到列表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論