Забудьте о CFolderdialog ... вместо этого .. я использую другой, чтобы получить путь к папке ... проверьте мой код ниже .... я получаю ошибку во время выполнения, когда я пытаюсь напечатать имя пути к папке в редактировании коробка ..
void CSelfExtractorUIDlg :: OnBnClickedButton1 ()
{
CDialog dlg;
HWND hwnd = NULL;
LPCTSTR szCurrent = (LPCTSTR)malloc(25*sizeof(TCHAR));
szCurrent = NULL;
LPTSTR szPath = (LPTSTR)malloc(25*sizeof(TCHAR));
BOOL check = BrowseForFolder(hwnd,szCurrent,szPath);
if( check == TRUE)
{
dlg.SetDlgItemTextW(IDC_EDIT1,szPath);
}
}
BOOL BrowseForFolder (HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath)
{
BROWSEINFO bi = {0};
LPITEMIDLIST pidl;
TCHAR szDisplay [256];
BOOL retval;
//CoInitialize();
bi.hwndOwner = hwnd;
bi.pszDisplayName = szDisplay;
bi.lpszTitle = TEXT("Please choose a folder.");
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);
}
else
{
retval = FALSE;
}
if (!retval)
{
szPath[0] = TEXT('\0');
}
CoUninitialize();
return retval;
}
static int CALLBACK BrowseCallbackProc (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
// Если получено сообщение BFFM_INITIALIZED
// установить путь к начальному пути.
переключатель (мсг)
{
case BFFM_INITIALIZED:
{
if (NULL! = lpData)
{
SendMessage (hwnd, BFFM_SETSELECTION, TRUE, lpData);
}
}
}
return 0; // The function should always return 0.
}