MFC点击按钮打开对话框选择文件夹(不是文件)

MFC点击按钮打开对话框选择文件夹(不是文件),第1张

选择所选择的文件,获取文件夹的路径

CString

m_FileDir

BROWSEINFO

bi

ZeroMemory(&bi,

sizeof(BROWSEINFO))

bi.hwndOwner

=

m_hWnd

bi.ulFlags

=

BIF_RETURNONLYFSDIRS

LPITEMIDLIST

pidl

=

SHBrowseForFolder(&bi)

BOOL

bRet

=

FALSE

TCHAR

szFolder[MAX_PATH*2]

szFolder[0]

=

_T('')

if

(pidl)

{

if

(SHGetPathFromIDList(pidl,

szFolder))

bRet

=

TRUE

IMalloc

*pMalloc

=

NULL

if

(SUCCEEDED(SHGetMalloc(&pMalloc))

&&

pMalloc)

{

pMalloc->Free(pidl)

pMalloc->Release()

}

}

m_FileDir

=

szFolder//选择的文件夹路径

查找所有MDB文件(记录数组自己写吧)

CFileFind

ff

BOOL

res

=

ff.FindFile(m_FileDir+"*.mdb")

while(res)

{

res

=

ff.FindNextFile()

//不遍历子目录

if(!ff.IsDirectory()

&&

!ff.IsDots())

{

CString

strFile

=

ff.GetFileName()

…//

在这里写需要的代码

}

}

ff.Close()

//

不要忘记关闭

今天写一个程序,其中一个功能是用对话框来选择一个文件夹的路径。可是以前常用的CFileDialog必须指定到文件,选择一个文件夹只能继续打开而不能返回这个路径,CFileDialog貌视也没有参数可以弄成选择文件夹的式样。上网找了找,CSDN里有人提供下面这个函数的用法:

CString

ShowSelectDirectoryDlg(const

CString

&

strDlgTitle)

{

char

szDir[MAX_PATH]

BROWSEINFO

bi

ITEMIDLIST

*pidl

bi.hwndOwner

=

this->m_hWnd

bi.pidlRoot

=

NULL

bi.pszDisplayName

=

szDir

bi.lpszTitle

=

strDlgTitle

bi.ulFlags

=

BIF_RETURNONLYFSDIRS

bi.lpfn

=

NULL

bi.lParam

=

0

bi.iImage

=

0

pidl

=

SHBrowseForFolder(&bi)

if(pidl

==

NULL)

return

_T()

if(!SHGetPathFromIDList(pidl,

szDir))

return

_T()

这个函数的传入参数strDlgTitle,就是选择文件夹对话框的标题栏名称。只需要模拟这个函数的写法,添加代码到特定的消息响应函数里去就可以了。

这个满足你的要求

s返回文件路径

#define

DLG_FILTER

"ALL

Files

(*.*)|*.*||"

#define

DLG_EXT

"*

"

CFileDialog

dlg(TRUE,

_T(DLG_EXT),

NULL,

OFN_HIDEREADONLY

|

OFN_OVERWRITEPROMPT

|

OFN_ALLOWMULTISELECT,

_T(DLG_FILTER))

if

(dlg.DoModal()

==

IDOK)

{

POSITION

pos

=

dlg.GetStartPosition()

while

(pos

!=

0)

{

CString

s

=

dlg.GetNextPathName(pos)

}

}

下面代码,可以选择文件夹,会返回文件夹的路径

需要自己查找每个文件

char*

GetPath(HWND

hWnd,char*

pBuffer)

{

BROWSEINFO

bf

LPITEMIDLIST

lpitem

memset(&bf,0,sizeof

BROWSEINFO)

bf.hwndOwner=hWnd

bf.lpszTitle=

"选择路径"

bf.ulFlags=BIF_RETURNONLYFSDIRS

//属性你可自己选择

lpitem=SHBrowseForFolder(&bf)

if(lpitem==NULL)

//如果没有选择路径则返回

0

return

0

//如果选择了路径则复制路径,返回路径长度

SHGetPathFromIDList(lpitem,pBuffer)

return

pBuffer

}


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

原文地址: http://outofmemory.cn/tougao/11425477.html

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

发表评论

登录后才能评论

评论列表(0条)

保存