CString filter_str = "txt files (*.txt)|*.txt|word files (*.doc)|*.doc||"
CFileDialog mSaveDlg(FALSE,NULL,NULL,NULL,filter_str,NULL)//初始化
mSaveDlg.DoModal()//显示
DWORD filter_num = mSaveDlg.m_ofn.nFilterIndex//返回的是当前选择的文件类型是第几个
filter_num -= 1//适应数组
char a[][9] = //文件类型数组
CString file_ext = a[filter_num]//获得文件类型的名称
int ext_length = file_ext.GetLength()//获得长度
MFC 打开保存文件对话框一、打开文件夹:
1、CFileDialog实现
CFileDialog hFileDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_READONLY,
TEXT("支持的图像文件 (*.jpg*.gif*.bmp...)|*.jpg*.gif*.bmp|专用Tiff图像文件(*.tiff*.tif)|*.tiff*.tif|所有文件(*.*)|*.*||"),NULL)
hFileDlg.m_ofn.nFilterIndex=1
hFileDlg.m_ofn.hwndOwner=m_hWnd
hFileDlg.m_ofn.lStructSize=sizeof(OPENFILENAME)
hFileDlg.m_ofn.lpstrTitle=TEXT("打开图像文件...\0")
hFileDlg.m_ofn.nMaxFile=MAX_PATH
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)
}
设置对话框的标题:
dlg.m_ofn.lpstrTitle = _T("Open Image")
函数就是DoModal( )。virtual int DoModal( )
Return Value
IDOK or IDCANCEL. If IDCANCEL is returned, call the WindowsCommDlgExtendedError function to determine whether an error occurred.
IDOK and IDCANCEL are constants that indicate whether the user selected the OK or Cancel button.
Remarks
Call this function to display the Windows common file dialog box and allow the user to browse files and directories and enter a filename.
If you want to initialize the various file dialog-box options by setting members of the m_ofn structure, you should do this before calling DoModal, but after the dialog object is constructed.
When the user clicks the dialog box’s OK or Cancel buttons, or selects the Close option from the dialog box’s control menu, control is returned to your application. You can then call other member functions to retrieve the settings or information the user inputs into the dialog box.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)