http://tikitak.narod.ru ---- Главная страница сайта
Шаг 15 - Стандартный диалог открытия файлов
Создание проекта
Дополняем Step1. Нам необходимо создать пункт меню Open в меню File с идентификаторм ID_OPEN
Создаем код
Реакция на событие
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
.............
ON_COMMAND(ID_OPEN,OnOpen)
..........
END_MESSAGE_MAP()
Описание функции реакции
class CMainWnd : public CFrameWnd
{
public:
..........
void OnOpen();
............
};
И реализация
void CMainWnd::OnOpen()
{
CFileDialog fileDialog(TRUE,NULL,"*.cpp");
int result = fileDialog.DoModal();
if (result==IDOK)
{
AfxMessageBox(fileDialog.GetPathName());
}
}
Описание
В MFC Есть стандартный класс для открытия и сохранения файлов CFileDialog
Смотрите OnOpen обьявляем класс , первый параметр простой TRUE - открываем, FALSE сохраняем.
Следующий параметр нам сейчас не нужен, он есть ниже. И расширения для открытия.
DoModal вам знакома, если она возврашает код кнопки OK то получаем имя файла функцией с названием, которое даже переводить не хочется.
Эксперимет 1
CFileDialog fileDialog(FALSE,NULL,"*.cpp");
Результат диалог сохранения файла
Эксперимент 2
void CMainWnd::OnOpen()
{
CFileDialog fileDialog(TRUE,NULL,"*.*",OFN_ALLOWMULTISELECT);
int result = fileDialog.DoModal();
if (result==IDOK)
{
POSITION ps=fileDialog.GetStartPosition();
while (ps) AfxMessageBox(fileDialog.GetNextPathName(ps));
}
}
Результат выбор нескольких файлов !
После расширения можно указывать параметры окна диалога, вот я и указал, выбирай несколько файлов. А вот дальше мы должны получить позицию в переменную типа POSITION, эта переменная передается как указатель в функцию GetNextPathName, а она выдает строку по этой позиции , и заодно уменьшает позицию. Когда файлов нет позиция станет 0.
Эсперимент 3
CFileDialog fileDialog(TRUE,NULL,"*.mak;*.rc");
Фильтр на несколько файлов!
Как видите, через запятую можно передавать несколько расширений. Это не MFC придумало естественно. В Windows функция открытия файлов уже есть и эта возможность взята из Win32 описания.
Экперимент 4 - Фильтр по другому
CFileDialog fileDialog(TRUE,NULL,"*.mak",NULL,
"File Mak (*.mak)|*.mak|Resouce Files (*.res)|*.res|");
Внизу появились выборы типов
А за типом окна можно указать и фильтр. Расширения для открытия ограничены скобками |*.mak|
И ещё один эксперимет
CFileDialog fileDialog(FALSE,"obj","*.obj");
Добавление расширения для сохранения файлов
Как видите теперь установленна 2-я переменная. Это расширенение которое будет добавляеться в конец файла выдаваемого при открытии. Если вы обратили внимание то при эксперименте 1 не было расширения.
Шпаргалка
Создайте класс и настройте параметры
CFileDialog fileDialog(TRUE,NULL,"*.cpp");
Запустите окно диалога
int result = fileDialog.DoModal();
Получите имя файла
if (result==IDOK)
{
AfxMessageBox(fileDialog.GetPathName());
........
}
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|