Я использую следующую функцию .. вместо CFolderDialog .. чтобы получить путь к папке ... проверьте мой код ниже .... У меня появляется ошибка времени выполнения, когда я пытаюсь напечатать путь к папке в поле для редактирования ..
недействительным
CSelfExtractorUIDlg :: OnBnClickedButton1 ()
{
CDialog dlg;
HWND hwnd = NULL; LPCTSTR szCurrent =
(LPCTSTR) таНос (25 * SizeOf (TCHAR));
szCurrent = NULL; LPTSTR szPath =
(LPTSTR) таНос (25 * SizeOf (TCHAR)); BOOL
проверить =
BrowseForFolder (HWND, szCurrent, szPath);
if (отметьте == 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 ("Пожалуйста,
выберите папку. "); 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'); }
CoUninitialize (); обратный возврат;
} 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; // Функция