【发布时间】:2010-12-21 03:48:53
【问题描述】:
我使用以下函数..而不是 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); 如果(检查==真){ dlg.SetDlgItemTextW(IDC_EDIT1,szPath); }
}
BOOL BrowseForFolder(HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath) { 浏览信息 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
= 浏览回调程序; bi.lParam = (LPARAM) szCurrent;pidl = SHBrowseForFolder(&bi);
如果 (NULL != pidl) { retval = SHGetPathFromIDList(pidl, szPath); CoTaskMemFree(pidl); } 别的 { retval = 假; }
如果(!retval){ szPath[0] = TEXT('\0'); }
CoUninitialize();返回 retval;
} 静态整数回调 BrowseCallbackProc(HWND hwnd,UINT uMsg、LPARAM lParam、LPARAM lpData) { // 如果 BFFM_INITIALIZED 消息是 收到 // 设置开始的路径 路径。
开关(uMsg){案例 BFFM_INITIALIZED: { if (NULL != lpData) { SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); } } }返回 0; // 函数
【问题讨论】: