www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  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
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz