VC++打开、保存文件对话框和浏览文件夹对话框
一。打開文件夾:
1。CFileDialog實現
CFileDialog hFileDlg(true,NULL ,
?? NULL,
?? OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST,
?? TEXT("驅動文件 (*.sys)|*.sys|所有文件(*.*)|*.*|"),
?? NULL);
if(hFileDlg.DoModal() == IDOK)
{
?? m_path = hFileDlg.GetPathName();
?? UpdateData(FALSE);
}
?
2。API實現
OPENFILENAMEA ofn;??????
char szFile[260];??????
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '/0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "音頻文件/0*.wma/0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = 0;
if (GetOpenFileNameA(&ofn)==FALSE)
?? return S_FALSE;
CString c_save_path=ofn.lpstrFile;
二、保存文件
同上,只不過將“ CFileDialog hFileDlg(true,NULL ”改為“ CFileDialog hFileDlg(false,NULL ”,或者將GetOpenFileNameA改為GetSaveFileNameA,即可。
三、瀏覽文件夾對話框
//回調函數
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
??? if(uMsg==BFFM_SELCHANGED||uMsg==BFFM_INITIALIZED)
??? {
??????? if(uMsg==BFFM_INITIALIZED)
??????? {
??????????? ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,
??????????????? LPARAM(lpData));
??????? }
??? }
??? return 0;
}
TCHAR chPath[255]; //用來存儲路徑的字符串
CString strPath = "";
BROWSEINFO bInfo;
GetModuleFileName(NULL,chPath,MAX_PATH);
strPath=chPath;
ZeroMemory(&bInfo, sizeof(bInfo));
bInfo.hwndOwner = m_hWnd;
bInfo.lpszTitle = _T("請選擇路徑: ");????
bInfo.ulFlags?? = BIF_RETURNONLYFSDIRS|BIF_EDITBOX;
bInfo.lpfn????? = BrowseCallbackProc;
bInfo.lParam??? = (LPARAM)strPath.GetBuffer(strPath.GetLength());
LPITEMIDLIST lpDlist; //用來保存返回信息的IDList
lpDlist = SHBrowseForFolder(&bInfo) ; //顯示選擇對話框
if(lpDlist != NULL) //用戶按了確定按鈕
{
?? SHGetPathFromIDList(lpDlist, chPath);//把項目標識列表轉化成字符串
?? strPath = chPath; //將TCHAR類型的字符串轉換為CString類型的字符串
?? m_save_path=strPath;
?? UpdateData(FALSE);
}
總結
以上是生活随笔為你收集整理的VC++打开、保存文件对话框和浏览文件夹对话框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DuplicateHandle复制句柄保
- 下一篇: VC6.0 DLL项目与WINDOWS项