Я хочу при нажатии на стандартную кнопку Open из Toolbar'a получать ссылку на выбранный файл.
MSDN мне рекоммендует написать собственную функцию-реакцию на константу ID_FILE_OPEN. Спасибо. говорю я ему. Еще хотелось бы знать, что именно туда надо писать!
В том же самом МСДН я нашел диалог, который называется CFileDialog. Тут можно все задавать с помощью FLAGS ( только не понятно как этот FLAGS устроен — это массив или что?) и прочих параметров в конструкторе или с помощью разнообразных методов. Потом говориться, что нужно сделать DoModal. На этом месте все ломается...
В любом случае это не позволяло мне получить ссылку на файл.
Да — еще мне надо ограничить расширения. Это можно сделать в том же CFileDialog, а если в нем не получается, то как?
Заранее спасибо!
31.03.03 00:10: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, $ergi0, Вы писали:
E>что подразумевается под ссылкой на файл?
Это не имеет значения. Все, что угодно — FILE*, CFile — имя файла в конце концов!
Главное — вернуть ЧТО-ТО, по чему можно установить, на что пал выбор пользователя!
Здравствуйте, Турилин Александр Сергеевич, Вы писали:
ТАС>Я хочу при нажатии на стандартную кнопку Open из Toolbar'a получать ссылку на выбранный файл. ТАС>Да — еще мне надо ограничить расширения. Это можно сделать в том же CFileDialog, а если в нем не получается, то как?
std::string GetFileName()
{
CFileDialog dlg(FALSE); // FALSE - диалог сохранения файла, TRUE - открытия
dlg.m_ofn.lpstrDefExt = "dat";
dlg.m_ofn.lpstrFilter = "Dat-файлы (*.dat)\0*.dat\0Все файлы (*.*)\0*.*\0\0"; // фильтры по рсширениямchar cur_dir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, cur_dir);
dlg.m_ofn.lpstrInitialDir = cur_dir; // начальная директорияif (dlg.DoModal() == IDOK) // показываем диалогreturn dlg.m_ofn.lpstrFile; // пользователь нажал OK - возвращаем имя файлаreturn""; // пользователь нажал не OK
}
Вся тонкая настройка производится через структуру OPENFILENAME. В CFileDialog есть поле m_ofn. Это — та самая структура.
Делается так: создаем экземпляр класса CFileDialog, настраиваем m_ofn, вызываем DoModal(). Если DoModal() вернет IDOK, то берем имя файла из поля lpstrFile.
Собственно, это в приведенном выше примере и демонстрируется.
Здравствуйте, Турилин Александр Сергеевич, Вы писали:
ТАС>Здравствуйте!
ТАС>Я хочу при нажатии на стандартную кнопку Open из Toolbar'a получать ссылку на выбранный файл. ТАС>MSDN мне рекоммендует написать собственную функцию-реакцию на константу ID_FILE_OPEN. Спасибо. говорю я ему. Еще хотелось бы знать, что именно туда надо писать! ТАС>В том же самом МСДН я нашел диалог, который называется CFileDialog. Тут можно все задавать с помощью FLAGS ( только не понятно как этот FLAGS устроен — это массив или что?) и прочих параметров в конструкторе или с помощью разнообразных методов. Потом говориться, что нужно сделать DoModal. На этом месте все ломается... ТАС>В любом случае это не позволяло мне получить ссылку на файл.
ТАС>Да — еще мне надо ограничить расширения. Это можно сделать в том же CFileDialog, а если в нем не получается, то как?
ТАС>Заранее спасибо!
Если я правильно понял, то используется либо MDI или SDI интерфейс, в этом случае в классе документе необходимо переопределить виртуальную функцию
BOOL CDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code herereturn TRUE;
}
Она вызывается после удачного закрытия окна "Open file", и её параметр есть имя файла.
Re[2]: Как работать с файловым диалогом в VC++ 6.0?
Здравствуйте, Игнат, Вы писали:
И>Здравствуйте, Турилин Александр Сергеевич, Вы писали:
ТАС>>Здравствуйте!
ТАС>>Я хочу при нажатии на стандартную кнопку Open из Toolbar'a получать ссылку на выбранный файл. ТАС>>MSDN мне рекоммендует написать собственную функцию-реакцию на константу ID_FILE_OPEN. Спасибо. говорю я ему. Еще хотелось бы знать, что именно туда надо писать! ТАС>>В том же самом МСДН я нашел диалог, который называется CFileDialog. Тут можно все задавать с помощью FLAGS ( только не понятно как этот FLAGS устроен — это массив или что?) и прочих параметров в конструкторе или с помощью разнообразных методов. Потом говориться, что нужно сделать DoModal. На этом месте все ломается... ТАС>>В любом случае это не позволяло мне получить ссылку на файл.
ТАС>>Да — еще мне надо ограничить расширения. Это можно сделать в том же CFileDialog, а если в нем не получается, то как?
ТАС>>Заранее спасибо!
И>Если я правильно понял, то используется либо MDI или SDI интерфейс, в этом случае в классе документе необходимо переопределить виртуальную функцию И>
И>BOOL CDoc::OnOpenDocument(LPCTSTR lpszPathName)
И>{
И> if (!CDocument::OnOpenDocument(lpszPathName))
И> return FALSE;
И>
И> // TODO: Add your specialized creation code here
И> return TRUE;
И>}
И>
И>Она вызывается после удачного закрытия окна "Open file", и её параметр есть имя файла.
И>
Наверно ты немного неправильно понял...
Надо переопределить ф-цию OnFileOpen() она м.б и не виртуальной, и обрабатываться на ID_FILE_OPEN
Там вызываешь диалог и читаешь документ...
Re[3]: Как работать с файловым диалогом в VC++ 6.0?