Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Открыть каталог или фаил

550
18 декабря 2002 года
matwey
82 / / 03.12.2002
Подскажите как из программы, например при нажатии кнопки...
Вызвасть стандартное Windowsкое окно по открытию фаила или каталога....
Ну и естественно получить на блидечке путь к фаилу....
380
18 декабря 2002 года
Arestov
285 / / 20.09.2000
см. MSDN:

1. открытие файла: GetOpenFileName
2. выбор папки: SHBrowseForFolder
550
20 декабря 2002 года
matwey
82 / / 03.12.2002
Цитата:
Originally posted by Arestov
см. MSDN:

1. открытие файла: GetOpenFileName
2. выбор папки: SHBrowseForFolder



А можно маленький примерчик, меня такая большая структура сбила с толку....

380
20 декабря 2002 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by matwey


А можно маленький примерчик, меня такая большая структура сбила с толку....



без MFC, выбор файла, для сохранения:

char *Browse_forSaveFile(HWND owner, char *info, char *filter, char *file, char *initial)
{
static OPENFILENAME ofn;
char szFileTitle[MAX_PATH];
static char szFile[MAX_PATH];

szFileTitle[0] = 0;
szFile[0] = 0;
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = owner;
ofn.lpstrFilter = filter;
ofn.nFilterIndex = 1;
if (file) strcpy(szFile, file);
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof(szFileTitle);
ofn.lpstrInitialDir = initial;
ofn.lpstrTitle = info;
ofn.lpstrDefExt = "jpg";
ofn.Flags = OFN_PATHMUSTEXIST |
OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;

if (!GetSaveFileName(&ofn)) return NULL;

return ((char *)ofn.lpstrFile);
}

использование простое:

char *pszFile = Browse_forSaveFile(hWnd,
"Куда сохранить",
"Изображения JPEG (*.jpg,*.jpeg)\0*.jpg;*.jpeg\0",
NULL, NULL);


для открытия почти всё тоже самое, тока будет GetOpenFileName() и OFN_OVERWRITEPROMPT не нужен.

в MFC всё проще, (это пример из MSDN):
void CChildFrame::OnFileOpen()
{
// szFilters is a text string that includes two file name filters:
// "*.my" for "MyType Files" and "*.*' for "All Files."
char CChildFrame::szFilters[]=
"MyType Files (*.my)|*.my|All Files (*.*)|*.*||";

// Create an Open dialog; the default file name extension is ".my".
CFileDialog fileDlg (TRUE, "my", "*.my",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);

// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if( fileDlg.DoModal ()==IDOK )
{
CString pathName = fileDlg.GetPathName();

// Implement opening and reading file in here.
...
//Change the window's title to the opened file's title.
CString fileName = fileDlg.GetFileTitle ();

SetWindowText(fileName);
}
}

Выбор папки:

CoInitialize();
....
BROWSEINFO bi={0}; // всё инициализиреум нулями
char szBuffer[MAX_PATH];

LPMALLOC pMalloc = NULL;

if (FAILED(SHGetMalloc(&pMalloc))) // это интерфейс для освобождения памяти, возвращаемой SHBrowseForFolder
retrun;


bi.hwndOwner = hWnd; // окно родитель
//bi.pidlRoot; // корневая папка (откуда смотрим, если NULL то это Рабочий Стол)
bi.pszDisplayName = szBuffer;
bi.lpszTitle = "заголовок над деревом папок";
bi.ulFlags = BIF_USENEWUI; // разные флаги, позволяет указать какие объёкты показывать (принтеры, компы и пр.)
//bi.lpfn; // адрес управляющей ф-ции (для "интеллектуального выбора", тебе это не надо) см. BrowseCallbackProc
//bi.lParam; // параметр этой ф-ции
//bi.iImage; // индекс изображения, которое ассоциировано с выбранным элементом

LPITEMIDLIST pItemIDL = SHBrowseForFolder(&bi);

if (!pItemIDL)
{
pMalloc->Release();
return; // пользователь нажал "отмена" или какая-то ошибка
};

char szPathBuffer[MAX_PATH];
if (!SHGetPathFromIDList(pItemIDL, szPathBuffer))
{
pMalloc->Release();
return; // ошибка
}

pMalloc->Free(pItemIDL);

pMalloc->Release();

// теперь у нас в szPathBuffer путь к выбранному объекту

удачи!

550
20 декабря 2002 года
matwey
82 / / 03.12.2002
Спасибо
380
20 декабря 2002 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by matwey
Спасибо



да незашта, :)
кстати CoInitialize() нада вызвать адин рас ф начали праграммы

426
21 декабря 2002 года
Krivonos
112 / / 20.01.2000
CoInitialize() даже можно и опустить - все равно работает (почему-то).
А если используешь - не забудь в конце вызвать CoUninitialize
2.5K
09 января 2003 года
Alex(GIE)
10 / / 08.01.2003
Цитата:
Originally posted by Krivonos
CoInitialize() даже можно и опустить - все равно работает (почему-то).
А если используешь - не забудь в конце вызвать CoUninitialize



Конечно если все это писать под API то этот способ конечно хорош. Но если вдруг это MFC - проект то есть чудесный класс CFileDialog
первый параметр 1- открытие 0- сохранение (BOOL -переменная или наоборот, непомню). Остальные перегружены (но можно конечно использовать свои данные чтобы задать маску и т.д.)
А также в дереве MFC - рядом можно найти хорошие классы для работы с выбором цвета, шрифта, и может что еще.

Поклонников АPI прошу не ругаться.

550
09 января 2003 года
matwey
82 / / 03.12.2002
Цитата:
Originally posted by Alex(GIE)


Конечно если все это писать под API то этот способ конечно хорош. Но если вдруг это MFC - проект то есть чудесный класс CFileDialog
первый параметр 1- открытие 0- сохранение (BOOL -переменная или наоборот, непомню). Остальные перегружены (но можно конечно использовать свои данные чтобы задать маску и т.д.)
А также в дереве MFC - рядом можно найти хорошие классы для работы с выбором цвета, шрифта, и может что еще.

Поклонников АPI прошу не ругаться.



Угу...

472
24 июня 2005 года
Vovka
139 / / 10.02.2005
А как насчет предварительной истановки каталога?
Я имею ввиду
//bi.pidlRoot; // корневая папка (откуда смотрим, если NULL то это Рабочий Стол)
Как назначить допустим "C:\\Windows"?
27K
09 июля 2008 года
tonchitos
9 / / 08.05.2007
а если у меня так, кнопочко броуз, которой вызывается вот диалог выбора папки и все пучком и есть текстовое поле в которое юзер тоже может ввести путь...есть ли готовая ф-ия проверки правильности пути...типа - существует ли такой путь вообще...
27K
09 июля 2008 года
tonchitos
9 / / 08.05.2007
и как можно узнать текущий каталог документа...
или только гетпатнейм и отрубать все от последнего слеша?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог