社区
界面
帖子详情
目录选择框如何记录上次选择的路径?
Freshyy
2005-09-11 09:35:33
路径太长,每次选择很麻烦,如何记录上次选择的路径?
...全文
304
6
打赏
收藏
目录选择框如何记录上次选择的路径?
路径太长,每次选择很麻烦,如何记录上次选择的路径?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dasiu
2005-09-12
打赏
举报
回复
1)通过注册表保存操作路径;
2)通过以上类对象打开上一次操作的路径
dasiu
2005-09-12
打赏
举报
回复
给你一个好的代码类吧
// BrowseDir.h: interface for the CBrowseDir class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BROWSEDIR_H__34F5431E_2750_457A_A5E2_6DB131771DF8__INCLUDED_)
#define AFX_BROWSEDIR_H__34F5431E_2750_457A_A5E2_6DB131771DF8__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CBrowseDir
{
public:
struct struct_browsedir
{
HWND hOwnerWnd;
BOOL bIncludeSubDir;
char *lpszInitDir;
char *lpszTitle;
char szDisplayName[255];
char szPath[255];
WNDPROC proc;
DWORD uFlag;
} ;
private:
struct_browsedir m_dir;
public:
CBrowseDir( CWnd * phParentWnd,BOOL bIncludeSubDir=NULL,
LPSTR lpszInitDir=NULL,LPSTR lpszTitle=NULL,
DWORD uFlag=BIF_RETURNONLYFSDIRS)
{
m_dir.szPath[0]=0;
m_dir.szDisplayName[0]=0;
m_dir.hOwnerWnd =phParentWnd->m_hWnd;
m_dir.lpszInitDir=lpszInitDir;
m_dir.bIncludeSubDir=bIncludeSubDir;
m_dir.uFlag=uFlag;
m_dir.lpszTitle=lpszTitle;
};
~CBrowseDir()
{
};
public:
LPSTR GetPathName(){return m_dir.szPath;}
LPSTR GetDisplayName(){return m_dir.szDisplayName;}
BOOL IsIncludeSubDir(){return m_dir.bIncludeSubDir;}
int DoModal();
public:
static LRESULT CALLBACK Browse_WndProc(HWND hWnd,UINT uMsg,
WPARAM wParam,LPARAM lParam);
static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,
LPARAM lParam,LPARAM lpData);
};
#endif // !defined(AFX_BROWSEDIR_H__34F5431E_2750_457A_A5E2_6DB131771DF8__INCLUDED_)
// BrowseDir.cpp: implementation of the CBrowseDir class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BrowseDir.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
int CBrowseDir::DoModal()
{
CWaitCursor wait;
BROWSEINFO bi;
RtlZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=m_dir.hOwnerWnd;
bi.ulFlags=m_dir.uFlag;
bi.pszDisplayName = m_dir.szDisplayName;
bi.lpszTitle=m_dir.lpszTitle;
if (m_dir.lpszInitDir || m_dir.bIncludeSubDir)
{
bi.lParam=(LPARAM)&m_dir;//lParam传给回调函数中的lpData
bi.lpfn=BrowseCallbackProc;
}
//调用浏览目录
ITEMIDLIST *pIDList = SHBrowseForFolder(&bi);
//确定选择的路径
if(pIDList)
{
SHGetPathFromIDList(pIDList, m_dir.szPath);
LPMALLOC pMalloc=NULL;
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
pMalloc->Free(pIDList);
pMalloc->Release();
return IDOK;
}
}
return IDCANCEL;
}
//////////////////////////////////////////////////////////////////////
LRESULT CALLBACK CBrowseDir::Browse_WndProc(HWND hWnd,UINT uMsg,
WPARAM wParam,LPARAM lParam)
{
CBrowseDir::struct_browsedir * lpDir;
lpDir=(CBrowseDir::struct_browsedir *)GetWindowLong(hWnd,GWL_USERDATA);
//窗口快要摧毁了,
//赶紧看看有没有选中"包含子文件夹"
if (uMsg==WM_DESTROY )
{
lpDir->bIncludeSubDir=SendDlgItemMessage(hWnd,1000,BM_GETCHECK,0,0);
}
return ::CallWindowProc(lpDir->proc,hWnd,uMsg,wParam,lParam);
}
int CALLBACK CBrowseDir::BrowseCallbackProc(HWND hwnd,UINT uMsg,
LPARAM lParam,LPARAM lpData)
{
if (uMsg==BFFM_INITIALIZED)
{
CBrowseDir::struct_browsedir * lpDir;
lpDir=(CBrowseDir::struct_browsedir*)lpData;//看DoModal()
//设置初始目录
if (lpDir->lpszInitDir)
SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)lpDir->lpszInitDir);
//是否 支持包含子目录
if (lpDir->bIncludeSubDir)
{
//创建一个Check按钮,ID为1000
CreateWindowEx(0,"button","包含子文件夹",
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
5,5,100,20,hwnd,(HMENU)1000,::GetModuleHandle(0),0);
//用默认的GUI字体
SendDlgItemMessage(hwnd,1000,WM_SETFONT ,
(WPARAM)GetStockObject(DEFAULT_GUI_FONT),TRUE );
//由于默认的回调函数不能处理标准的消息
//所以必须改变窗体的回调函数
lpDir->proc=(WNDPROC)SetWindowLong(hwnd,GWL_WNDPROC,(LONG)Browse_WndProc);
//OOP时代据说不兴用全局变量...
SetWindowLong(hwnd,GWL_USERDATA,(LONG)lpDir);
}
}
return TRUE;
}
Freshyy
2005-09-11
打赏
举报
回复
不过试了好像不行?
Freshyy
2005-09-11
打赏
举报
回复
bool Tools::SelectFolder(HWND hWndOwner, CString csTitle, CString &csOutFolderPath, UINT uFlags)
{
BROWSEINFO bInfo;
TCHAR pathName[MAX_PATH];
LPITEMIDLIST pIDList;
LPITEMIDLIST lpItemIDList;
if ( NOERROR != ::SHGetSpecialFolderLocation( NULL, CSIDL_RECENT, &lpItemIDList))
{
return false;
}
bInfo.hwndOwner = hWndOwner;
bInfo.pidlRoot = NULL;
bInfo.pszDisplayName = pathName;
bInfo.lpszTitle = csTitle;
bInfo.ulFlags = uFlags;
bInfo.pidlRoot = lpItemIDList;
bInfo.lpfn = NULL;
bInfo.lParam = 0;
bInfo.iImage = 0;
pIDList = ::SHBrowseForFolder( &bInfo );
TCHAR buff[ _MAX_PATH] = {0};
if ( NULL != pIDList )
{
::SHGetPathFromIDList( pIDList, buff );
csOutFolderPath = buff;
LPMALLOC pMalloc;
if ( NOERROR == ::SHGetMalloc( &pMalloc ))
{
pMalloc->Free( pIDList );
pMalloc->Release();
}
}
return ( pIDList != NULL);
}
我能通过bInfo.pidlRoot 来设置上次的路径吗?
winehero
2005-09-11
打赏
举报
回复
ini/注册表/数据表等等都可以,依具体情况而定
smartcwj
2005-09-11
打赏
举报
回复
可以在选完路径后传递参数时生成一个ini配置文件,然后每次打开文件时先读取ini文件就行了
利用preference 和 property 让文件
选择
框
记录
上次
路径
结构 preference里面
记录
了property文件的
路径
property里面
记录
了各种文件操作
路径
的标识 文件打开
框
打开时,fileChooser.setCurrentDirectory(new File(getCurrentDirectoryPath()));取出相应的属性值,有的话予以设定 //写入properties信息 public s
SHBrowseForFolder打开文件夹时,记住上一次打开的
路径
在win32桌面开发时,经常需要打开
选择
路径
选择
对话
框
,拿本地录像功能来说,比如第一次
选择
了c:\record
目录
,则第二次,打开
路径
选择
对话
框
时,希望直接定位到上一次
选择
的
路径
,如下所示: 直接定位到c:\record。 大致代码如下: // BrowserDirectoryTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <Windows.h> #include <Shlo
Qt使用上一次打开的
路径
在Qt中使用 QFileDialog::getOpenFileName 和 QFileDialog::getOpenFileName 的时候默认是打开某一个
路径
, 如果要多次
选择
某个
路径
下的多个文件, 就需要使用
上次
打开的
路径
. 实现方法如下所示: QDir dir; QFileDialog::Options options; options
JS实现文件夹
目录
的
选择
function browseFolder(path) { try { var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //
选择
框
提示信息 var Shell = new ActiveXObject("Shell.Application"); var Folder = Shell....
【MFC】
选择
文件夹时,记忆上一次
路径
代码 CString s_save_path;//存放
选择
的
目录
CMutex g_mtx; //
选择
文件夹对话
框
回调函数 int CALLBACK BrowseCallBackFun(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { switch (uMsg) { case BFFM_INITIALIZED: //
选择
文件夹...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章