Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Узнать у пользователя название папки, используя


Автор: Royan 6.3.2006, 04:11
Задача очень проста. Аналогично тому как с помощью GetOpenFileName() узнается название файл(а/ов) мне нужно узнать название директории. Я уверен, что можно как - то обернуть GetOpenFileName(), чтобы реагировать на нажатие кнопки "Open", когда даже ни один файл не выбран, но я не знаю ни как это сделать, ни тем более как потом узнать до какой диры добрался пользователь (структура, то будет, скорее всего, не заполнена). Есть еще диалоговое окно "Обзор папок" или "Browse Folder", и если я не ошибаюсь его вызывает функция SHBrowseForFolder(). Но в msdn'е сказано, но там требуется такая туча плясок с бубном вокруг COM'а что подобная грошовая операция не стоит того (я пишу на чистом С++/STL/Win32).

Возможно ли мне помочь?

Автор: takedo 6.3.2006, 08:05
Вроде бы при выборе папок меняется текущая директория GetCurrentDir, попробуй так. Но всегда ли это будет работать, сказать не могу.

Автор: Romikgy 6.3.2006, 10:27
Цитата(Royan @ 6.3.2006, 03:11 Найти цитируемый пост)
его вызывает функция SHBrowseForFolder().

ДА и работает очень хорошо

Автор: Earnest 6.3.2006, 10:54
Цитата(Royan @ 6.3.2006, 04:11 Найти цитируемый пост)
SHBrowseForFolder(). Но в msdn'е сказано, но там требуется такая туча плясок с бубном вокруг COM'а что подобная грошовая операция не стоит того

Какие пляски? CoInitializeEx вызвать?
Насчет грошевой операции - ну попробуй написать сам... на чистом API... или как минимум подпробно продумать, что нужно сделать...
Я думаю, тогда любые пляски с бубнами будешь с радостью исполнять, лишь бы готовую стандартно работающую функцию использовать. smile smile smile

Автор: Romikgy 6.3.2006, 11:16
Код

void Directory(char * x)
{
BROWSEINFO BrowseInfo;
ITEMIDLIST *lpItemID;
char DisplayName[MAX_PATH], TempPath[MAX_PATH];
ZeroMemory((void*)&BrowseInfo,sizeof(BrowseInfo));
BrowseInfo.hwndOwner = NULL;
 BrowseInfo.pszDisplayName := "Display";

 BrowseInfo.lpszTitle = "Please specify a directory";
 BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS;
 BrowseInfo.lpfn =NULL;
lpItemID = SHBrowseForFolder(&BrowseInfo);
if (lpItemID) 
{
SHGetPathFromIDList(lpItemID, TempPath);
strcpy(x,TempPath);
}
}

Чтот типа такого, но не проверял

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)