MFC中想实现打开文件或文件夹,该怎么实现呢
发布网友
发布时间:2022-05-20 11:48
我来回答
共3个回答
热心网友
时间:2023-10-18 06:45
把"通过选择得到一个文件/文件夹的路径" 这些代码实现 写到某个函数里,不是写到按钮实现的函数里就行了。例如:
【以下代码中 filePathFile就是你想要的路径】
在主体函数中:
CFileDialog *lpszOpenFile; //定义一个CfileDialog对象
//生成一个对话框
lpszOpenFile = new CFileDialog
(TRUE,"abc.txt","",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , "文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|");
if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮
{
filePathName = lpszOpenFile->GetPathName();//得到打开文件的路径
}
if(!file.Open(filePathName,CFile::modeRead))
{
MessageBox("can not open file!");
return;
}
热心网友
时间:2023-10-18 06:45
SHBrowserForFolder函数可以
使用BIF_BROWSEINCLUDEFILES标识
typedef struct _browseinfo {
HWND hwndOwner;
PCIDLIST_ABSOLUTE pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
ulFlags
Flags specifying the options for the dialog box. This member can include
zero or a combination of the following values.
BIF_BROWSEINCLUDEFILES
Version 4.71
. The
browse dialog box will display files as well as folders.
热心网友
时间:2023-10-18 06:46
二合一的话,不是很好弄。
方法和思路很多,举个栗子吧:
重写CFileDialog的回调函数,回调函数中重写IDOK按钮的消息响应,如果选择的是文件夹,则返回文件夹路径。
这应该是最简单的实现方法,不过里面有一个问题,就是对CFileDialog的Get函数会有问题。如果要更合理的实现,只能重载CFileDialog实现更好。