如何打开选择路径对话框?现在就用一些代码来说明,如下。
TCHAR szPath[MAX_PATH];
BROWSEINFO br;
ITEMIDLIST* pItem;
br.hwndOwner = this->GetSafeHwnd();
br.pidlRoot = 0;
br.pszDisplayName = 0;
br.lpszTitle = "选择路径";
br.ulFlags = BIF_STATUSTEXT;
br.lpfn = 0;
br.iImage = 0;
br.lParam = 0;
pItem = SHBrowseForFolder(&br);
if(pItem != NULL)
{
if(SHGetPathFromIDList(pItem,szPath) == TRUE)
{
CString strDir = szPath;
}
}
使用这段代码就可以打开选择路径的对话框,但是在这个打开的选择窗口中,每次打开时的默认路径都时系统的根目录,如何设置它的默认打开路径呢?
分步骤说明:
一 首先要写一个CALLBACK函数,如下
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
switch(uMsg)
{
case BFFM_INITIALIZED: //初始化消息
//::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)"C://Program Files"); //传递默认打开路径 (方法一)
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData); //传递默认打开路径 (方法二,前提是lpData提前设置好)
break;
case BFFM_SELCHANGED: //选择路径变化,
{
char curr[MAX_PATH];
SHGetPathFromIDList((LPCITEMIDLIST)lParam,curr);
::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)curr);
}
break;
default:
break;
}
return 0;
}
二 前面所写的BROWSEINFO 的参数要重新设置成如下格式
TCHAR szDefaultDir[MAX_PATH];
CString strDef(_T("C://WINDOWS//"));
memcpy(szDefaultDir,strDef.GetBuffer(strDef.GetLength()),strDef.GetLength());
strDef.ReleaseBuffer();
TCHAR szPath[MAX_PATH];
BROWSEINFO br;
ITEMIDLIST* pItem;
br.hwndOwner = this->GetSafeHwnd();
br.pidlRoot = 0;
br.pszDisplayName = 0;
br.lpszTitle = "选择路径";
br.ulFlags = BIF_STATUSTEXT;
br.lpfn = BrowseCallbackProc ; //设置CALLBACK函数
br.iImage = 0;
br.lParam = long(&szDefaultDir); //设置默认路径
//**转者注: 在Unicode环境下,编译测试,此处的默认路径无法起作用
//** 需要手动转换成TChar/WChar
//** TChar strBuffer[MAX_PATH];
//** wcscpy(strBuffer, szDefaultDir);
pItem = SHBrowseForFolder(&br);
if(pItem != NULL)
{
if(SHGetPathFromIDList(pItem,szPath) == TRUE)
{
CString strDir = szPath;
}
}
OK,大功告成!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/reallyioio/archive/2008/09/18/2948755.aspx