Страница 1 из 2

Диалоговое окно "Выбор папки" ???

Добавлено: 03 окт 2004, 02:51
sand
Есть ли проще реализация диалогового окна "Выбор папки", чем через Shell ?????

Добавлено: 04 окт 2004, 11:36
Andy
SHBrowseForFolder самый простой способ.

Добавлено: 04 окт 2004, 14:05
sand
Ну это да...
А без Шелла есть????????

Добавлено: 04 окт 2004, 14:40
Romeo
Проще, чем через Shell не получится :)

Добавлено: 04 окт 2004, 17:41
sand
У меня программа с MFC.
Я так понимаю, что код типа
LPBROWSEINFO br;
SHBrowseForFolder(br);

Ничего путного не сделает...
Примерчик можно махнуть?

Добавлено: 04 окт 2004, 21:33
Romeo

Код: Выделить всё

#include <shlobj.h>

...

BROWSEINFO br;
TCHAR strDisplayName[MAX_PATH];

ZeroMemory(&br, sizeof(br));

br.pszDisplayName = strDisplayName;
br.lpszTitle = _T("Please select some file system folder. It is very needed for me");
br.ulFlags = BIF_RETURNONLYFSDIRS;

LPITEMIDLIST lpItemIDList = SHBrowseForFolder(&br);

if (lpItemIDList != NULL)
{
      TCHAR strResultPath[MAX_PATH];
      SHGetPathFromIDList(lpItemIDList, strResultPath);

      IMallocPtr spMalloc;
      SHGetMalloc(&spMalloc);
      spMalloc->Free(lpItemIDList);

      // В этом месте мы имеем в strResultPath выбранный путь
}

Добавлено: 05 окт 2004, 00:45
sand
F:\Work\dialog1\dialog1Dlg.cpp(175) : error C2065: 'IMallocPtr' : undeclared identifier

Добавлено: 05 окт 2004, 12:02
Romeo
#include <comdef.h>

Господи, ну подправь уже сам. Это не работающий код, я его писал прямо в окошко Oper'ы, естественно в последней встроенного С++ компилятора нет :)

Добавлено: 07 окт 2004, 00:28
sand
А что это за IMallocPtr такой?
Где достать такую зверюгу? (уж явно не в comdef.h)

Добавлено: 07 окт 2004, 12:04
Romeo
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ComDef.h

P.S. IMallocPtr - это не зверь. Это враппер IMalloc интерфейса, который является шеловским интерфейсом, предназначенным для менеджмента памяти при работе с шеловскими объектами. В данном случае он нужен для того, чтобы очистить память, выделенную шеловской функцией SHBrowseForFolder под pidl, соответствующий выбранной папке.