0

我正在使用以下函数..而不是 CFolderDialog.. 来获取文件夹路径...检查下面的代码..当我尝试在编辑框中打印文件夹路径名时出现运行时错误..

无效 CSelfExtractorUIDlg::OnBnClickedButton1() {

CDialog dlg;

HWND hwnd = NULL;LPCTSTR szCurrent = (LPCTSTR)malloc(25*sizeof(TCHAR)); szCurrent = NULL;LPTSTR szPath = (LPTSTR)malloc(25*sizeof(TCHAR)); 布尔检查 = BrowseForFolder(hwnd,szCurrent,szPath); 如果(检查 == TRUE){ dlg.SetDlgItemTextW(IDC_EDIT1,szPath);}

}

BOOL BrowseForFolder(HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath) { BROWSEINFO bi = { 0 }; LPITEMIDLIST pidl; TCHAR szDisplay[256]; 布尔值;

//CoInitialize();

bi.hwndOwner = hwnd; bi.pszDisplayName = szDisplay; bi.lpszTitle = TEXT("请选择一个文件夹。"); bi.ulFlags
= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;bi.lpfn
= BrowseCallbackProc; bi.lParam = (LPARAM) szCurrent;

pidl = SHBrowseForFolder(&bi);

if (NULL != pidl) { retval = SHGetPathFromIDList(pidl, szPath); CoTaskMemFree(pidl); } 其他 { retval = FALSE; }

if (!retval) { szPath[0] = TEXT('\0'); }

联合初始化();返回 retval;

} static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData) { // 如果收到 BFFM_INITIALIZED 消息 // 设置路径为起始路径。
switch (uMsg) { case BFFM_INITIALIZED: { if (NULL != lpData) { SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); } } }

返回0;// 功能

4

1 回答 1

0

25 个字符对于完整路径长度来说似乎有点短,我会使用 MAX_PATH。

于 2009-11-28T04:33:02.343 回答