




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年婚前財(cái)產(chǎn)公證及婚姻家庭財(cái)產(chǎn)保全與管理協(xié)議
- 2025年度全新員工離職保密協(xié)議及離職后市場(chǎng)競(jìng)業(yè)限制合同
- 2025年度影視作品贊助協(xié)議書模板下載
- 2025年度安全風(fēng)險(xiǎn)評(píng)估廠房租賃安全生產(chǎn)管理合同
- 2025年度特殊行業(yè)安全保衛(wèi)人工成本協(xié)議書
- 2025年度公司股份增發(fā)與投資者權(quán)益保護(hù)協(xié)議書
- 2025年度公司股東內(nèi)部關(guān)于研發(fā)創(chuàng)新成果共享的協(xié)議書
- 2025年度XX金融控股集團(tuán)股東退股及風(fēng)險(xiǎn)管理協(xié)議
- 2025年度拖欠工資解除勞動(dòng)合同賠償計(jì)算規(guī)范范文
- 2025年貴州文化旅游職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)參考答案
- 山地光伏設(shè)計(jì)方案
- 2022廣州美術(shù)學(xué)院附屬中學(xué)(廣美附中)入學(xué)招生測(cè)試卷語文
- 北師大版(2019)選擇性必修第三冊(cè)Unit 7 Careers Topic Talk 導(dǎo)學(xué)案
- 春節(jié)復(fù)工復(fù)產(chǎn)安全教育培訓(xùn)
- 2024年廣西公務(wù)員考試行測(cè)真題及答案解析
- 護(hù)理質(zhì)量改進(jìn)項(xiàng)目
- 《礦產(chǎn)地質(zhì)勘查規(guī)范 花崗偉晶巖型高純石英原料》(征求意見稿)
- 關(guān)尹子教射課件
- 《合同能源管理介紹》課件
- 養(yǎng)殖駱駝的可行性方案
- 汽車運(yùn)用與維修專業(yè)(新能源方向)調(diào)研報(bào)告
評(píng)論
0/150
提交評(píng)論