首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么实现可新建文件夹的选择目录对话框

2012-04-01 
如何实现可新建文件夹的选择目录对话框和SelectDirectory函数的界面一样,只是左下角多了个新建文件夹按

如何实现可新建文件夹的选择目录对话框
和SelectDirectory函数的界面一样,只是左下角多了个"新建文件夹"按钮,不要说用带TSelectDirOpts参数的那个SelectDirectory函数,界面太丑。

据说有SHBrowseForFolder这个API可以实现,但帮助里说[Now Supported on Windows NT]

[解决办法]
Now Supported on Windows NT
又不是
No Supported on Windows NT

呵呵,所以直接用就可以了。

C/C++ code
#include <shlobj.h>bool __fastcall CrnBrowserDir(HANDLE hWin, LPSTR lpCaption, LPSTR lpDir, LPSTR lpDispName){    BROWSEINFO bi;    LPITEMIDLIST pidl;    LPMALLOC pShellMalloc;    bool bRet = false;    if(SHGetMalloc(&pShellMalloc) == NO_ERROR)    {        memset(&bi, 0x00, sizeof(bi));        bi.hwndOwner = hWin; // Owner window        bi.pidlRoot = 0; // root folder        bi.pszDisplayName = lpDispName; // return display name        bi.lpszTitle = lpCaption; // label caption        bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; // config flags        bi.lpfn = 0; // callback function        pidl = SHBrowseForFolder(&bi);        if(pidl)        {            if(SHGetPathFromIDList(pidl, lpDir))                bRet = true;            pShellMalloc->Free(pidl);        }        pShellMalloc->Release();    }    return bRet;}//---------------------------------------// 调用代码:void __fastcall TForm1::Button1Click(TObject *Sender){    char lpDir[MAX_PATH];    char lpDispName[MAX_PATH];    bool bRet = CrnBrowserDir(Handle, "请选择一个文件夹:", lpDir, lpDispName);    if(bRet)        ShowMessage(String("选择的文件夹是: ") + String(lpDir) + String("\r\n")                + String("显示名称是: ") + String(lpDispName));    else        ShowMessage("没有选择文件夹!");} 

热点排行