Класс CFileDialog для выбора файла



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

     Описание параметров, задаваемых при объявлении объекта класса CFileDialog:

 

CFileDialog (BOOL Dlg, LPCTSTR DefExt=NULL, LPCTSTR FileName = NULL, DWORD Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR Filter = NULL);

 

Параметры:

DlgTRUE, для создания диалога открытия файла с заголовком «Открыть», или FALSE для конструирования диалога сохранения файлов с заголовком «Сохранить как»;

DefExt – расширение файла по умолчанию. Если этот параметр принимает значение NULL, то расширение к введенному пользователем имени файла не будет добавлено автоматически;

FileName – имя файла по умолчанию, которое будет помещено в поле набора имени файла. Если этот параметр имеет значение NULL, то поле для ввода имени файла будет пустым при загрузке окна выбора файла;

Flags – комбинация одного или более флагов, которые позволяют изменить содержание конструируемого диалога открытия или сохранения файлов:

OFN_HIDEREADONLY – запрещает отображение файлов с атрибутом «только для чтения»;

OFN_OVERWRITEPROMPT – обеспечивает появление подсказки с вопросом о необходимости перезаписи файла, если файл с указанным пользователем именем уже существует в выбранной директории;

Filter – серия из пар строк, которая определяет фильтры для выбора разных типов файлов, отображаемых в диалоге.

         

Пример использования объекта класса CFileDialog.

 

char Filter []= "TextFile (*.txt),(*.doc) | *.txt; *.doc | All (*.*) | *.*||";

//определили фильтр для открытия файлов

 

CFileDialog fd(TRUE, ".txt", "ReadMe", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Filter);

// объявление объекта класса CFileDialog для открытия файла

fd.DoModal();

// инициализация вызова диалога открытия файла

CFile f (fd.GetPathName(), CFile::modeWrite | CFile::modeCreate );

// открытие файла, выбранного пользователем, на запись

UpdateData(1);

// обмен данными между элементами EditBox и связанными с ними переменными

f.Write(m_1, m_1.GetLength() ); // запись в файл

f.Close(); // закрытие файла

Методы преобразования типов данных.

Преобразование данных из строкового в числовой тип может быть осуществлено с помощью одной из функций, описание которых содержится в библиотеке stdlib.h:

double atof( const char *string );

int atoi( const char *string );

Параметр этих функций string – это символьная строка, содержащая число в виде массива символов, а возвращаемое значение – число в формате double или int для функций atof() и atoi() соответственно.

 

 

Пример использования методов преобразования данных из строчного типа данных в числовой.

char s[] = "-2309.12"; // символьная строка, содержащая число

double x; // переменная вещественного типа

x = atof( s ); // преобразуем строку в вещественное число

 

Для конвертирования данных из числовых типов в текстовую строку возможно применять метод Format() класса CString, параметры которого идентичны параметрам функции вывода данных printf().

         

Пример использования методов преобразования данных из числового типа данных  в строчный.

int k =123;

CString str;

str.Format("%i", k);

Пример выполнения лабораторной работы.

Задание: разработать программу, которая:

· записывает в файл символьные строки;

· считывает их из файла и выводит в элемент управления EditBox построчно.

 

1) В среде Microsoft Developer Studio (Visual C++)создаем проект на основе диалога. Для этого в пункте меню File->New выбираем подпункт Projects (рис. 1). 

Рисунок 1 – Пункт меню File->New

  Далее выбираем тип приложения на основе диалога (рис. 2) и нажимаем на кнопку «Finish».

 

Рисунок 2 – Выбор типа нового проекта

 

     После выполнения указанных действий в проекте автоматически будут созданы файлы в выбранной директории (списки ресурсов (а) и файлов (б) проекта изображены на рис. 3).

      

а)                                                   б)

Рисунок 3 – Созданные ресурсы (а) и файлы (б) проекта

 

 

2)После генерации всех файлов вам будет показана заготовка будущей программы (рис. 4) . Рядом будет отображена панель инструмента для создания интерфейса пользователя с программой. необходимо разместить необходимые элементы управления в окне приложения, при необходимости удалив уже имеющиеся по умолчанию кнопки и текстовый элемент.

 

3) Размещаем в окне приложения элемент управления EditBox для вывода данных из файла и кнопку для вызова создаваемой функции для работы с файлами. Модифицируем надписи на кнопках в пункте «Properties», вызываемом нажатием правой кнопки мыши на поле элемента управления. Удаляем лишние элементы управления. Полученный в результате интерфейс пользователя представлен на рис. 5.

 

Рисунок 4 – Заготовка создаваемого приложения и

панель инструментов с элементами управления «Controls»

 

Рисунок 5 – Интерфейс пользователя

 

4) Для возможности вывода в элемент EditBox многострочного текста и добавления полосы вертикальной прокрутки изменяем стили этого элемента управления, кликнув провой кнопкой мыши по полю EditBox и выбрав пункт “Properties” (рис. 6).

Рисунок 6 – Стили элемента EditBox

 

5) Создаем заголовки функции для работы с файлами, вызываемой по нажатию на кнопку «Жми!», расположенную в окне создаваемого приложения. Для этого вызываем мастер Class Wizard, выбрав соответствующий пункт меню при нажатии правой кнопкой мыши по полю окна приложения. Во вкладке Message Maps находим уникальный идентификатор кнопки диалога приложения и дважды нажимаем левой клавишей мыши по сообщению BN_CLICKED, которое отвечает за одинарное нажатие на кнопку диалога с идентификатором IDC_BUTTON1 (рисунок 7). В появившемся новом окне будет показано имя функции, которая будет выполняться при нажатии на эту кнопку диалога, согласитесь с предложенным именем, нажав кнопку ОК, или измените его на другое.

 

Рисунок 7 – Объявление функции, вызываемой

по нажатию на кнопку в окне приложения

 

6) Для создания переменной для элемента управления EditBox, перейдите во вторую вкладку «Member Variables» мастера Class Wizard. Кликните дважды по уникальному идентификатору элемента управления EditBox и укажите имя создаваемой переменной и ее тип в появившемся диалоге (рис. 8, 9).

Рисунок 8 – Добавление переменной

Рисунок 9 – Результат добавления переменной

 

7) Для редактирования программного кода функции, вызываемой по нажатию на кнопку, кликнем дважды по изображению кнопки в окне создаваемого приложения или в первой вкладке окна мастера Class Wizard необходимо дважды нажать левой клавишей мыши на название функции в нижней части окна, в данном случае OnButton1 (рис. 7).

Перед вами появится текст файла с заголовком функции следующего вида:

 

void CLara3Dlg::OnButton1()

{

 // TODO: Add your control notification handler code here = добавьте здесь свой код

}

 

  Согласно заданию добавляем программный код в тело функции, вызываемой по нажатию кнопки работы с файлами. Эта функция расположена в файле с именем «имя_проектаDlg.cpp», т.е. в данном примере в файле с именем «lara3Dlg.cpp» (рис. 10).

 

void CLara3Dlg::OnButton1()

{

CString Text = "string1\nstring2\nstring3";

 

CFileDialog DlgSaveAs(FALSE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCSTR)" Text Files (*.txt) |*.txt||");

// отображение стандартной панели выбора файла SaveAs

if(DlgSaveAs.DoModal()==IDOK)

{    

  CStdioFile File1(DlgSaveAs.GetPathName(),CFile::modeCreate|CFile::modeWrite);

  // создание объекта и открытие файла для записи

  File1.WriteString(Text);// запись в файл строки

  File1.Close();

}

 

CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL,OFN_HIDEREADONLY,(LPCSTR)" Text Files (*.txt) |*.txt||");

if(DlgOpen.DoModal()==IDOK)

  {

  // создание объекта и открытие файла для записи

  CStdioFile File2(DlgOpen.GetPathName(),CFile::modeRead);

  if (File2!=NULL)

  {CString s;

  while (File2.ReadString(s)) //считывание строки из файла

          {m_str+=s; // добавление считанной строки к содержимому переменной, связанной с элементом EditBox

          m_str+=CString("\r\n"); // добавление перехода на новую строку

          }

  m_str+=CString("\r\n");// добавление перехода на новую строку после вывода всего содержимого файла

  File2.Close();

  UpdateData(0);// обновление данных в элементах EditBox

  }

  }

}

 

Рисунок 10 – Программный код функции, вызываемой при нажатии на кнопку работы с файлами

 

8) Работа программы.

  После запуска программы пользователь нажимает на кнопку «Жми!» и в новом окне, отображаемом с помощью объекта класса CFileDialog, выбирает файл для записи данных в файл, далее пользователю будет предложено выбрать файл для считывания данных из файла (рис. 11).

 

Рисунок 11 – Диалог открытия файла

 

     Результаты, выводимые программой в элемент управления EditBox, при однократном и многократном выполнении программного кода функции, вызываемой при нажатии на кнопку «Жми!», приведены на рисунках 12 и 13 соответственно. Если выводимый текст по высоте превышает размер элемента управления EditBox, то будет активизирован элемент вертикальной прокрутки scrollbar (рис. 13).

Рисунок 12 – Результат работы программы после однократного вызова функции работы с файлами

 

Рисунок 13 – Результат работы программы после многократного вызова функции работы с файлами

 

Задание.

· Считать из файла n чисел, где n задает пользователь в элементе управления EditBox, расположенном в окне разрабатываемой программы. Если количество элементов массива в файле меньше, чем n, то необходимо вывести сообщение с помощью функции AfxMessageBox(), о том, что будут обработаны все элементы файла, и отобразить их количество.        

· Осуществить вывод элементов считанного массива в элемент управления EditBox, в свойствах которого необходимо задать отображение элемента scrollbar (полосы прокрутки) по вертикали и возможность вывода многострочного текста.

· Осуществить обработку данных из считанного массива согласно полученному варианту задания. Записать полученный результат в новый файл.

· Для открытия и сохранения файла нужно использовать объект класса CFileDialog, а для чтения и записи данных в файл – объекты класса CFile или CStdioFile.

· Если исходный массив чисел создан в текстовом файле, например, в текстовом редакторе «Блокнот», после считывания данных потребуется использовать методы преобразования символьных строк в числовой тип с помощью функций библиотеки stdlib.h. Для удобства первой записью в файле с массивом чисел может быть расположено число, обозначающее количество чисел в массиве в этом файле. Следовательно в файле будет записано на одно число больше, чем размерность массива.

 

Варианты заданий.

1) Определить, упорядочен ли числовой массив по возрастанию.

2) Найти максимальный элемент массива среди четных элементов.

3) Найти нечетные элементы, значения которых кратны 7.

4) Найти сумму элементов массива, значения которых принадлежат диапазону[50,100].

5) Найти среднее арифметическое отрицательных элементов массива.

6) Найти количество четных элементов массива.

7) Определить, упорядочен ли числовой массив по убыванию.

8) Найти нечетные элементы массива, расположенные на позициях с нечетными индексами.

Контрольные вопросы.

1) Класс CFile и его элементы.

2) Класс CFileDialog и его элементы.

3) Класс CStdioFile и его элементы.

4) Класс CString и его элементы.

5) Функции перевода символьных данных в числовой тип данных и, наоборот, чисел в строку с помощью функций библиотеки stdlib.h и методов класса CString.


Дата добавления: 2018-04-05; просмотров: 1480; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!