使用目录选择对话框时,如何让其弹出后自动打开指定目录
2008-04-23 10:41
696 查看
使用目录选择对话框时,如何让其弹出后自动打开指定目录?
是的当用目录选择对话框时,用如下的结构打开。
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
LPCITEMIDLIST pidlRoot; 这个就是 默认为桌面。
还有可以通过这种方式实现,如下:
LPMALLOC pMalloc;
if ( SUCCEEDED( SHGetSpecialFolderLocation (NULL, CSIDL_DRIVES, &pidl)))
{
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST;
sei.lpIDList = pidl;
sei.lpVerb = "open";
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.nShow = BIF_RETURNONLYFSDIRS;
ShellExecuteEx(&sei);
if (SUCCEEDED( SHGetMalloc (&pMalloc)))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
}
其中://CSIDL_DRIVES是我的电脑
参数有好些,
CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_DESKTOP Windows 桌面Desktop
CSIDL_DESKTOPDIRECTORY Desktop的目录
CSIDL_DRIVES 我的电脑
CSIDL_FONTS 字体目录
CSIDL_NETHOOD 网上邻居
CSIDL_NETWORK 网上邻居虚拟目录
CSIDL_PERSONAL 我的文档
CSIDL_PRINTERS 打印机
CSIDL_PROGRAMS 程序组
CSIDL_RECENT 最近打开的文档
CSIDL_SENDTO “发送到”菜单项
CSIDL_STARTMENU 任务条启动菜单项
CSIDL_STARTUP 启动目录
CSIDL_TEMPLATES 文档模板
还有的看 MSDN吧。
现在像论坛上的朋友,他要实现的是要打开 如:f:,f://site等这样的目录。
很明显这样的字符串是不被支持的,所以必须要转成 LPCITEMIDLIST 这种结构的才支持。
但微软好像没有类似的函数实现这样的功能。于是就写了一个如下:
//文件目录转成LPITEMIDLIST
LPITEMIDLIST CTestBrowseDlg::ParsePidlFromPath(LPCSTR path)
{
OLECHAR szOleChar[MAX_PATH];
LPSHELLFOLDER IpsfDeskTop;
LPITEMIDLIST lpifq;
ULONG ulEaten, ulAttribs;
HRESULT hres;
SHGetDesktopFolder(&IpsfDeskTop);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,path,-1,szOleChar,sizeof(szOleChar));
hres = IpsfDeskTop ->ParseDisplayName(NULL, NULL, szOleChar, &ulEaten, &lpifq, &ulAttribs);
hres=IpsfDeskTop->Release( );
if(FAILED(hres))
return NULL;
return lpifq;
}
如这样写:
方法1:
LPITEMIDLIST pidl;
LPMALLOC pMalloc;
pidl = ParsePidlFromPath("F://site");//请先确定f:下有这个文件夹
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST;
sei.lpIDList = pidl;
sei.lpVerb = "open";
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.nShow = BIF_RETURNONLYFSDIRS;
ShellExecuteEx(&sei);
if (SUCCEEDED( SHGetMalloc (&pMalloc)))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
就可以打开F:/site
方法2:
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.pidlRoot = ParsePidlFromPath("F://");
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="S浏览文件夹";
bi.ulFlags=BIF_RETURNONLYFSDIRS;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
就能打开f:
是的当用目录选择对话框时,用如下的结构打开。
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
LPCITEMIDLIST pidlRoot; 这个就是 默认为桌面。
还有可以通过这种方式实现,如下:
LPMALLOC pMalloc;
if ( SUCCEEDED( SHGetSpecialFolderLocation (NULL, CSIDL_DRIVES, &pidl)))
{
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST;
sei.lpIDList = pidl;
sei.lpVerb = "open";
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.nShow = BIF_RETURNONLYFSDIRS;
ShellExecuteEx(&sei);
if (SUCCEEDED( SHGetMalloc (&pMalloc)))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
}
其中://CSIDL_DRIVES是我的电脑
参数有好些,
CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_DESKTOP Windows 桌面Desktop
CSIDL_DESKTOPDIRECTORY Desktop的目录
CSIDL_DRIVES 我的电脑
CSIDL_FONTS 字体目录
CSIDL_NETHOOD 网上邻居
CSIDL_NETWORK 网上邻居虚拟目录
CSIDL_PERSONAL 我的文档
CSIDL_PRINTERS 打印机
CSIDL_PROGRAMS 程序组
CSIDL_RECENT 最近打开的文档
CSIDL_SENDTO “发送到”菜单项
CSIDL_STARTMENU 任务条启动菜单项
CSIDL_STARTUP 启动目录
CSIDL_TEMPLATES 文档模板
还有的看 MSDN吧。
现在像论坛上的朋友,他要实现的是要打开 如:f:,f://site等这样的目录。
很明显这样的字符串是不被支持的,所以必须要转成 LPCITEMIDLIST 这种结构的才支持。
但微软好像没有类似的函数实现这样的功能。于是就写了一个如下:
//文件目录转成LPITEMIDLIST
LPITEMIDLIST CTestBrowseDlg::ParsePidlFromPath(LPCSTR path)
{
OLECHAR szOleChar[MAX_PATH];
LPSHELLFOLDER IpsfDeskTop;
LPITEMIDLIST lpifq;
ULONG ulEaten, ulAttribs;
HRESULT hres;
SHGetDesktopFolder(&IpsfDeskTop);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,path,-1,szOleChar,sizeof(szOleChar));
hres = IpsfDeskTop ->ParseDisplayName(NULL, NULL, szOleChar, &ulEaten, &lpifq, &ulAttribs);
hres=IpsfDeskTop->Release( );
if(FAILED(hres))
return NULL;
return lpifq;
}
如这样写:
方法1:
LPITEMIDLIST pidl;
LPMALLOC pMalloc;
pidl = ParsePidlFromPath("F://site");//请先确定f:下有这个文件夹
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST;
sei.lpIDList = pidl;
sei.lpVerb = "open";
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.nShow = BIF_RETURNONLYFSDIRS;
ShellExecuteEx(&sei);
if (SUCCEEDED( SHGetMalloc (&pMalloc)))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
就可以打开F:/site
方法2:
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.pidlRoot = ParsePidlFromPath("F://");
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="S浏览文件夹";
bi.ulFlags=BIF_RETURNONLYFSDIRS;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
就能打开f:
相关文章推荐
- 使用vc打开目录选择对话框
- 如何实现打开网页自动弹出QQ对话框
- Flex Builder 3 如何弹出“打开文件对话框”,限制选择文件类型
- 元旦快乐,阖家团圆,幸福安康.C#重载示例(有问重载该如何选择?在C#中可很方便地在智能感知弹出中选择不同参数列表进行使用;不像C/C++那样,要记住编译器自动选择最佳匹配参数列表的概念)
- 关于创建Excel表格问题(保存至指定文件/弹出直接打开还是下载,并可以选择保存路径的对话框)
- MFC弹出目录选择对话框以及指定弹出的目录
- 如何在VB 中直接打开并选择目录,而不使用麻烦的多个控件?
- vs生成的文件如何自动拷贝到指定目录
- 上传文件如何在打开对话框中只显示指定后缀的文件
- 使用ShellExcecute打开指定目录并选中指定文件的方法
- c#winform选择文件,文件夹,打开指定目录方法
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- 如何在ajax中使用弹出对话框
- 收藏 使用webbrowser控件时,如何屏蔽网站弹出的对话框
- 打开网页自动弹出QQ对话框的实现办法
- 如何在使用pdfFactory Pro生成PDF时自动创建目录书签
- CFile类使用如何创建文件打开对话框
- 如何使用Service的Context弹出Dialog对话框,即全局性对话框
- 打开选择文件对话框时指定初始选择路径
- 如何使用DOC 命令 打开磁盘目录和文件