C语言如何调用系统的文件浏览功能?

C语言如何调用系统的文件浏览功能?,第1张

加上头文件#include <commdlg.h>

其格式如下

OPENFILENAME ofn

char path[MAX_PATH]

static TCHAR szFilter[] = TEXT ("Text Files (*.TXT)\0*.txt\0") \

TEXT ("ASCII Files (*.ASC)\0*.asc\0") \

TEXT ("All Files (*.*)\0*.*\0\0")

ofn.lStructSize = sizeof (OPENFILENAME)

ofn.hwndOwner = hwnd

ofn.hInstance = NULL

ofn.lpstrFilter = szFilter

ofn.lpstrCustomFilter = NULL

ofn.nMaxCustFilter = 0

ofn.nFilterIndex = 0

ofn.nMaxFile = MAX_PATH

ofn.nMaxFileTitle = MAX_PATH

ofn.lpstrInitialDir = NULL

ofn.lpstrTitle = NULL

ofn.Flags = 0 // Set in Open and Close functions

ofn.nFileOffset = 0

ofn.nFileExtension = 0

ofn.lpstrDefExt = TEXT ("txt")

ofn.lCustData = 0L

ofn.lpfnHook = NULL

ofn.lpTemplateName = NULL

ofn.hwndOwner = hwnd

ofn.lpstrFile = path

ofn.lpstrFileTitle = NULL

ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT

GetOpenFileName (&ofn) //打开文件对话框

GetSaveFileName(&ofn)//保存文件对话框

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")


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12089670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存