C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 37. Стандартный диалог для открытия/сохранения файла / Уроки MFC / Visual C++

Visual C++. MFC
Урок 37. Стандартный диалог для открытия/сохранения файла

На этом занятии мы с вами посмотрим, как можно использовать в ваших программах стандартные диалоги для открытия и сохранения файла. Эти диалоги, наряду с далогами для выбора цвета, для поиска и замены, для выбора шрифта являются стандартными диалогами Windows. Они уже существуют в недрах операционной системы, причем их внешний вид зависит от версии Windows (например, в одних версиях Windows их размер можно менять, а в других - нет).

Для диалогов, предназначенных для открытия и сохранения файла, предназначен один и тот же класс - CFileDialog. Сейчас мы с вами и посмотрим, как с ним можно работать.

Запустите Visual C++ и создайте новый проект типа MFC AppWizard (EXE). Для определенности задайте ему имя CFileDialog. На первом шаге мастера выберите тип проекта, основанный на диалоге. В последующих шагах мастера все оставьте без изменений, только на шаге 2 уберите галочку ActiveX Controls (они нам не нужны, так что не будем усложнять себе код).

После создания проекта перейдите на вкладку ResourceView и добавьте к нашему проекту меню с одним пунктом (добавляем меню верхнего уровня Options и его подменю FileOpen):

Меню

Имя идентификатора для меню можно оставить без изменений (IDR_MENU1).

Наше меню еще не подсоединено к форме. Для его подсоединения выберете идентификатор меню (IDR_MENU1) в combobox'е menu в окне свойств нашего диалогового окна:

Добавление меню к форме

Теперь добавьте обработчик для добавленного пункта меню FileOpen (с помощью ClassWizard'а).

Приступаем к написанию кода. В созданный обработчик добавьте следующий код:

void CCFileDialogDlg::OnOptionsFileopen() 
{
    // TODO: Add your command handler code here
    CFileDialog dlg(TRUE);
    dlg.DoModal();
}

В написанном коде пояснений требует разве что конструктор. Он, как вы видите вызывается с параметром TRUE. Это означает, что будет создан стандартный диалог для открытия файлов. Если же в качестве параметра указать FALSE, то создастся стандартный диалог для сохранения файла (Save As...).

Программу можно запустить - при выборе нашего пункта меню будет показан диалог для открытия файла.

Теперь посмотрим, как можно изменять свойства диалогового окна. За это отвечает свойство m_ofn. Давайте, для примера, создадим диалоговое окно с заголовком "Открытие 123-файлов", с фильтрами для показа 123- и всех файлов и с начальной директорией c:\tmp. Кроме того, после закрытия диалогового окна мы покажем в messagebox'ах имя выбранного файла (с путем и без).

    ...
    CFileDialog dlg(TRUE);
    //Создаем фильтр
    dlg.m_ofn.lpstrFilter="123-файл\0*.123\0Все файлы\0*.*\0\0";
    //Делаем активным фильтр "Все файлы|*.*"
    dlg.m_ofn.nFilterIndex=2;
    //Задаем начальную директорию
    dlg.m_ofn.lpstrInitialDir="c:\\tmp";
    //Задаем заголовок диалогового окна
    dlg.m_ofn.lpstrTitle="Открытие 123-файлов";
    //Показывваем диалог
    dlg.DoModal();
    //Показываем имя открытого файла без пути
    MessageBox(dlg.m_ofn.lpstrFileTitle);
    //Показываем имя открытого файла с полным путем
    MessageBox(dlg.m_ofn.lpstrFile);
    ...

Назначение параметров ясно из комментариев. Обратите внимание на то, как задается фильтр. Он делится на пары строк - описание фильтра и расширения файлов, каждая такая строка заканчвается на нуль-символ (\0), в конце же этого свойства мы должны поставить два нуль-символа. Отметьте также, что нумерация для задания начального фильтра (подсвойство nFilterIndex) начинается с единицы.

После запуска программы наш стандартный диалог окно будет выглядеть приблизительно так:

Диалог для открытия файлов

Диалог для сохранения файлов работает точно также. Как уже говорилось, для его создания необходимо в конструкторе указать параметр FALSE.