![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Рекомендации по написанию программы. Задание 1. Разработка программы редактирования файлов текстового формата.
Задание 1. Разработка программы редактирования файлов текстового формата.
Исходные данные:
Требования к внешнему виду программы:
Размер окна по вертикали и горизонтали может меняться пользователем, но он не может быть меньше размера 400 на 200 пикселей. Позицию и размеры окна на момент выхода из программы необходимо сохранять в реестре. При старте программы их необходимо читать из реестра (если есть) и отображать окно в соответствующей позиции и с соответствующими размерами.
- открыть файл (Ctrl+O) - записать файл (Ctrl+S) - записать файл как… (Ctrl+W) - выйти из программы (Alt+F4) - копировать выделенный текст в буфер (Ctrl+C) - вырезать выделенный текст и поместить в буфер (Ctrl+X) - вставить в указанное место (заменить выделенный текст) текстом из буфера (Ctrl+V) - отменить последнюю операцию по вставке/замене (Ctrl+Z) - вывод информации о программе и авторах
При старте программы информация об активном файле берется из реестра (если есть) и файл открывается для редактирования.
Рекомендации по написанию программы.
Запустите 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 для того, чтобы компилятор мог их видеть.
Открытие, закрытие, чтение и запись файла можно осуществлять с использованием набора функций fopen, fclose, fread, fwrite, можно open, close, _read, _write, или функциями API.
Именем редактируемого файла может быть обычный статический элемент, который создается с помощью 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.
Структура меню задается в редакторе ресурсов. Активная клавиша для навигации внутри меню задается путем размещения символа & перед соответствующей буквой. В меню это будет выглядеть как подчеркивание данной буквы. Каждому элементу меню сопоставляется некоторый идентификатор (константа, автоматически будет помещаться resource.h). Этот идентификатор формируется автоматически, но вы можете задать любое вам удобное имя константы. Во время работы программы, если пользователь выбирает некоторый элемент меню, функции обработки сообщений окна-хозяина будет автоматически послано сообщение WM_COMMAND с кодом-константой элемента меню. Таким образом, для задания обработки необходимых команд меню вам требуется добавить соответствующие секции в процедуре обработки сообщений. В качестве примера рекомендуется посмотреть обработку сообщений меню, которое автоматически генерируется при формировании приложения “Hello, World! ”.
Toolbar – стандартизованное средство Windows, поэтому его создание достаточно просто. Легче всего воспользоваться функцией CreateToolbarEx для его создания. Вам также понадобится заполнить структуру TBBUTTON, указав там константы соответствующих элементов меню (т.к. в вашем случае все элементы Toolbar будут иметь соответствующий элемент меню) и в ресурсах нарисовать кнопки как элемент Toolbar в ресурсах. В таком случае никаких дополнительных обработчиков сообщений от Toolbar не требуется. Однако, если вы хотите создать flat Toolbar, то создавать его следует с атрибутом TBSTYLE_FLAT. Кроме того, вы можете добавить текст-подсказку для каждой кнопки. Для этого необходимо создавать Toolbar с атрибутом TBSTYLE_TOOLTIPS. При этом вам также понадобиться добавить обработчику сообщения WM_NOTIFY, подтип TTN_NEEDTEXT. Там необходимо установить поле lpszText в структуре LPTOOLTIPTEXT (указатель на которую передается в параметре lParam) в желаемый текст. Индекс кнопки передается в поле hdr.idFrom той же структуры.
Для создания ключа в реестре используйте функцию RegCreateKeyEx. Здесь и далее ВСЕГДА используйте ТОЛЬКО ветку HKEY_CURRENT_USER (см. документацию MSDN). Для определения существования ключа и получения его описателя используйте функцию RegOpenKeyEx. Для сохранения параметров в реестре используйте функцию RegSetValueEx. Для чтения параметров – RegQueryValueEx.
Редактирование текста в окнах типа 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 контроле не надо. Для того, чтобы работали ускорители, необходимо направлять сообщения на соответствие ускорителям в главное окно приложения, а не в текущее (по умолчанию в цикле обработки сообщений стоит именно текущее).
|