char szDir[MAX_PATH]; LPMALLOC pMalloc = NULL; BROWSEINFO bi; ITEMIDLIST *pidl; bi.hwndOwner = this->m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = szDir; bi.lpszTitle = "请选择目录"; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; pidl = SHBrowseForFolder(&bi); if(pidl == NULL) return; if(!SHGetPathFromIDList(pidl, szDir)) return; if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc) { pMalloc->Free(pidl); pMalloc->Release(); } 如何从当前目录的文件夹浏览 点击这里查看逐句中英文对照机器翻译 查看机器翻译免责声明 不再更新的 KB 内容免责声明 查看本文应用于的产品 本页概要 更多信息 示例代码 展开全部 | 关闭全部 概要榛樿鎯呭喌涓嬶,SHBrowseForFolder API 使用户可以在浏览外壳的命名空间,并选取一个文件夹在桌面上启动。 通常,您可能更愿意您的应用程序启动文...榛樿鎯呭喌涓嬶,SHBrowseForFolder API 使用户可以在浏览外壳的命名空间,并选取一个文件夹在桌面上启动。 通常,您可能更愿意您的应用程序启动文件夹,用户可能希望,如当前的工作目录的浏览对话框。 若要设置浏览对话框的初始选定区域,BROWSEINFO 结构必须包含一个回调函数。 回调函数调用与消息 BFFM_INITIALIZED 时, 它又可以发送到所需的路径设置对话框选择 BFFM_SETSELECTION 消息。 回到顶端 更多信息下面是一些示例代码,将显示与当前选定的目录浏览对话框的。 它还会在对话框的状态窗口中显示当前所选文件夹的路径。 示例代码 #define STRICT #inc...下面是一些示例代码,将显示与当前选定的目录浏览对话框的。 它还会在对话框的状态窗口中显示当前所选文件夹的路径。 回到顶端 示例代码 #define STRICT #include <windows.h> #include <shlobj.h> INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) { TCHAR szDir[MAX_PATH]; switch(uMsg) { case BFFM_INITIALIZED: if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir)) { // WParam is TRUE since you are passing a path. // It would be FALSE if you were passing a pidl. SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir); } break; case BFFM_SELCHANGED: // Set the status window to the currently selected path. if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir)) { SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); } break; } return 0; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { BROWSEINFO bi; TCHAR szDir[MAX_PATH]; LPITEMIDLIST pidl; LPMALLOC pMalloc; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { ZeroMemory(&bi,sizeof(bi)); bi.hwndOwner = NULL; bi.pszDisplayName = 0; bi.pidlRoot = 0; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; bi.lpfn = BrowseCallbackProc; pidl = SHBrowseForFolder(&bi); if (pidl) { // // Other code omited // pMalloc->lpVtbl->Free(pMalloc,pidl); } pMalloc->lpVtbl->Release(pMalloc); } } return 0; } |
|