Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Рекомендации по написанию программы. Задание 1. Разработка программы редактирования файлов текстового формата.

Задание 1. Разработка программы редактирования файлов текстового формата.

 

Исходные данные:

  1. Программа является оконным Windows32 приложением.
  2. Программа написана на языке Си++ в среде VS 6, VS.NET, VS2005 или VS2008.
  3. При написании программы используются только функции и структуры Win API32. Никаких других технологий или «надстроек» не должно быть использовано.

 

Требования к внешнему виду программы:

 

  1. Внешний вид приложения представляет собой главное окно, в котором присутствует большое поле для редактирования текста, поле, отображающее полный путь и название редактируемого файла, кнопки «Открыть», «Сохранить», «Сохранить как…».

Размер окна по вертикали и горизонтали может меняться пользователем, но он не может быть меньше размера 400 на 200 пикселей.

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

 

  1. Программа содержит меню, в котором в удобной для разработчика форме представлены след. команды (в скобках указаны Hotkey комбинации клавиатуры - ускорители):

- открыть файл (Ctrl+O)

- записать файл (Ctrl+S)

- записать файл как… (Ctrl+W)

- выйти из программы (Alt+F4)

- копировать выделенный текст в буфер (Ctrl+C)

- вырезать выделенный текст и поместить в буфер (Ctrl+X)

- вставить в указанное место (заменить выделенный текст) текстом из буфера (Ctrl+V)

- отменить последнюю операцию по вставке/замене (Ctrl+Z)

- вывод информации о программе и авторах

 

  1. Программа содержит Toolbar с элементами – кнопками, повторяющими по функциональности элементы меню.

 

  1. Размер поля редактирования определяется текущим размером окна. В случае изменения горизонтальных и вертикальных размеров окна размер поля редактирования также изменяется программой автоматически.

 

  1. При выходе из программы имя текущего отрытого (просматриваемого) файла сохраняются в реестре.

При старте программы информация об активном файле берется из реестра (если есть) и файл открывается для редактирования.

 

Рекомендации по написанию программы.

  1. Начальные действия.

Запустите Visual C++.

Menu -> File -> New -> Projects -> Win32 Application

Задайте Имя проекта и его расположение.

Выберите A Typical “Hello, World! ” Application.

Для VS.NET или VS2005

Menu -> File -> New -> Projects -> Win32 Project

Задайте Имя проекта.

Проверьте, что в закладке Application Settings НЕ стоит галочка в пункте Empty Project

На закладке FileView в папке Source Files вы найдете три файла:

xxx.cpp

xxx.rc

StdAfx.cpp

Файл xxx.cpp – это файл в котором представлен начальный код, сгенерированный для вас автоматически.

Файл xxx.rc – это файл с ресурсами проекта (их редактирование осуществляется на закладке ResourceView)

Файл StdAfx.cpp как и файл StdAfx.h создается и изменяется средой автоматически и у вас нет необходимости его менять

На закладке FileView в папке Header Files вы найдете три файла:

xxx.h

resource.h

StdAfx.cpp

Файл xxx.h – это файл в котором представлены прототипы функций и объявления глобальных данных; начальное содержимое этого файла также генерируется для вас автоматически.

Файл resource.h – это файл с константами, установленными для ваших ресурсов, которые необходимы для доступа к ресурсам из кода вашей программы (обычно этот файл изменяется средой автоматически и у вас нет необходимости его менять)

В процессе разработки программы рекомендуется использовать навыки построения проектов, полученные в пред. семестре. Т.е. при создании нового класса или набора связанных функций рекомендуется создавать пару файлов yyy.cpp и yyy.h и включать их в проект. Таким образом вы значительно улучшите «читаемость» кода программы и тем самым облегчите себе весь процесс разработки программы.

При таком подходе при включении файла yyy.cpp в проект разместите в верхней самой первой строке файла след. инструкцию:

#include " stdafx.h"

и при построении проекта запустите Rebuild All.

 

В функции InitInstance добавьте вызов функции InitCommonControls (посмотрите информацию о ее прототипе в MSDN), которая инициализирует библиотеку ComCtrl, т.к. у вас могут использоваться ее элементы. Так как по умолчанию библиотека Common Controls не подключается, необходимо сделать два дополнительных действия.

- в верху файла вставить след. строку:

#include “commctrl.h”

- в свойствах проекта в подпункте Linker (можно прямо в закладке Command Line) добавить файл

comctl32.lib

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

 

  1. Работа с файлами.

Открытие, закрытие, чтение и запись файла можно осуществлять с использованием набора функций fopen, fclose, fread, fwrite, можно open, close, _read, _write, или функциями API.

 

  1. Отображение Элементов.

Именем редактируемого файла может быть обычный статический элемент, который создается с помощью CreateWindowEx с типом " STATIC" и с атрибутом SS_SIMPLE, его содержимое устанавливается посылкой сообщения WM_SETTEXT.

Тело Элемента редактирования текста отображается в окне Edit (создается CreateWindowEx с типом “EDIT” с атрибутом ES_MULTILINE). Установка текста – посылка сообщения WM_SETTEXT.

Изменение размеров для окон Edit (при изменении размеров окна) осуществляется функцией SetWindowPos.

Кнопки создаются CreateWindowEx с типом “BUTTON”. Если вы хотите отобразить на кнопке картинку, то можно создать ее с атрибутом BS_BITMAP и BS_FLAT. Для загрузки картинки в BMP формате используйте LoadImage, для освобождения ресурса (после использования) DeleteObject.

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

Перемещение всех контролов (если надо) осуществляется функцией SetWindowPos.

 

  1. Меню.

Структура меню задается в редакторе ресурсов.

Активная клавиша для навигации внутри меню задается путем размещения символа & перед соответствующей буквой. В меню это будет выглядеть как подчеркивание данной буквы.

Каждому элементу меню сопоставляется некоторый идентификатор (константа, автоматически будет помещаться resource.h). Этот идентификатор формируется автоматически, но вы можете задать любое вам удобное имя константы.

Во время работы программы, если пользователь выбирает некоторый элемент меню, функции обработки сообщений окна-хозяина будет автоматически послано сообщение WM_COMMAND с кодом-константой элемента меню. Таким образом, для задания обработки необходимых команд меню вам требуется добавить соответствующие секции в процедуре обработки сообщений. В качестве примера рекомендуется посмотреть обработку сообщений меню, которое автоматически генерируется при формировании приложения “Hello, World! ”.

 

  1. Toolbar.

Toolbar – стандартизованное средство Windows, поэтому его создание достаточно просто.

Легче всего воспользоваться функцией CreateToolbarEx для его создания. Вам также понадобится заполнить структуру TBBUTTON, указав там константы соответствующих элементов меню (т.к. в вашем случае все элементы Toolbar будут иметь соответствующий элемент меню) и в ресурсах нарисовать кнопки как элемент Toolbar в ресурсах.

В таком случае никаких дополнительных обработчиков сообщений от Toolbar не требуется.

Однако, если вы хотите создать flat Toolbar, то создавать его следует с атрибутом TBSTYLE_FLAT. Кроме того, вы можете добавить текст-подсказку для каждой кнопки. Для этого необходимо создавать Toolbar с атрибутом TBSTYLE_TOOLTIPS. При этом вам также понадобиться добавить обработчику сообщения WM_NOTIFY, подтип TTN_NEEDTEXT. Там необходимо установить поле lpszText в структуре LPTOOLTIPTEXT (указатель на которую передается в параметре lParam) в желаемый текст. Индекс кнопки передается в поле hdr.idFrom той же структуры.

 

  1. Работа с реестром.

Для создания ключа в реестре используйте функцию RegCreateKeyEx. Здесь и далее ВСЕГДА используйте ТОЛЬКО ветку HKEY_CURRENT_USER (см. документацию MSDN).

Для определения существования ключа и получения его описателя используйте функцию RegOpenKeyEx.

Для сохранения параметров в реестре используйте функцию RegSetValueEx.

Для чтения параметров – RegQueryValueEx.

 

  1. Редактирование текста.

Редактирование текста в окнах типа Edit осуществляется автоматически. Однако, для того, чтобы операции по копированию частей текста можно было осуществить через меню и Toolbar, требуется добавить соответствующие обработчики (константы определяются в меню). Окна Edit полностью поддерживают все операции путем обработки сообщений WM_CUT, WM_COPY, WM_PASTE, которые вы должны посылать им. В последнем случае вам понадобится проверить буфер обмена на наличие в нем текста. Используйте для этого функцию IsClipboardFormatAvailable с параметром CF_TEXT.

Кроме того, при отображении информации в окне Edit переводом строки считается сочетание CR (13) и NL (10). При чтении файла в текстовом режиме (режим открытия файла содержит флаг “t” в функции fopen) символы CR, NL заменяются при чтении одним NL. Таким образом при чтении и записи необходимо производить преобразование строк. Это удобно сделать путем создания соответствующего класса. Если же вы открываете файл в двоичном режиме (режим открытия файла содержит флаг “b” в функции fopen) символы CR, NL так и читаются и транслировать текст при размещении в EDIT контроле не надо.

Для того, чтобы работали ускорители, необходимо направлять сообщения на соответствие ускорителям в главное окно приложения, а не в текущее (по умолчанию в цикле обработки сообщений стоит именно текущее).

 

 

  1. Для выбора файла при открытии или сохранении (сохранить как…) файла рекомендуется использовать стандартный диалог выбора файла в каталоге. Для этого воспользуйтесь функцией API GetOpenFileName и, соответственно структуры OPENFILENAME.
<== предыдущая лекция | следующая лекция ==>
Декабря – 21 декабря 2014 года | Задание 1. Разработка программы редактирования файлов специализированного формата.
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал