ПРОГРАММИРОВАНИЕ ДЛЯ WINDOWS НА BORLAND C 1. Введение Цель данного пособия - облегчить усвоение программирования для Windows на BORLAND C и способствовать распространению библиотеки OWL Object Windows Library, которая хорошо продумана и использование которой явно вырисовывает достоинства объектно-ориентированного программирования - инкапсуляции, наследования и полиморфизма.
Пособие привязано к лекционному курсу Технология программирования, требуя знаний изложенных на лекциях основ объектно-ориентированного программирования на C и предназначено как руководство к лабораторным работам по этому лекционному курсу. Пособие ориентировано на пошаговую разработку за компьютером несложных Windows-приложений, в процессе которой осуществляется их исследование путем сравнения различных вариантов
реализации, изменения параметров членов-функций и значений членов-данных используемых классов. В создаваемых Windows-приложениях используется очень незначительная, но базовая часть OWL библиотеки, активное усвоение которой способствует снятию барьера, и, как надеются авторы, вызовет удовольствие от первого знакомства с завоевавшей мир Windows. 1. Ввод, редактирование и запуск Windows-приложения
Чтобы ввести исходный текст программы, откомпилировать и увидеть на экране окно Windows-приложения, необходимо выполнить следующие действия 1 Сделайте двойной щелчок левой клавиши мыши или нажатие ENTER на пиктограмме Borland C. Появится окно компилятора BC2 Щелчок левой клавиши мыши на элементе меню Project или переход в строку меню путем нажатия
F10, поиск и высвечивание элемента Project с помощью клавиш и . Раскрыть Project с помощью клавиши ENTER. 3 Щелчок мышью на команде New project или выбрать данный пункт меню с помощью клавиш и и нажать ENTER. В дальнейшем для краткости будем говорить, что нужно выполнить команду ProjectNew project команду New project из меню Project.
Таким образом, будет выполнена команда создания нового проекта и на экране появится следующий диалог. 4 Щелчок мышью на кнопке Browse для просмотра каталога. 5 Воспользовавшись линейкой прокрутки, найти имя требуемого каталога и сделать на нем двойной щелчок левой клавиши мыши. 6 В поле File Name ввести имя проекта с расширением .ide, затем нажать ENTER. 7 Нажмите кнопку Advanced и снимите флажки rc и def в появившемся диалоге
Advanced Options, затем нажмите OK. 8 В диалоге создания проекта нажмите кнопку OK. 9 Сделайте двойной щелчок левой кнопкой мыши на имени файла с расширением cpp в окне созданного проекта, в результате чего откроется окно для редактирования текста программы. 10 Введите исходный текст программы. 11 Для компиляции и выполнения нажмите Ctrl-F12 Если получены сообщения об ошибках, то исправьте их и проведите компиляцию заново.
Если ошибки отсутствуют, то на экране появится окно Вашего Windows-приложения. Осуществите диалог с приложением, используя мышь. 2. Основные приемы редактирования текста в интегрированной среде BORLAND C 1. Копирование и удаление части текста в окне редактирования Для копирования текста из одной его части в другую выполняются следующие действия 1
Выделить копируемый текст а Подвести курсор к началу копируемого текста. б Нажать и удерживать клавишу Shift. в Используя клавиши управления курсором, выделить текст. г Отпустить Shift. 2 Занести выделенный текст в буфер обмена Clipboard путем одновременного нажатия Ctrl и Ins или выполнения команды EditCopy. 3 Перевести курсор к месту вставки текста.
4 Перенести текст из буфера в редактор путем одновременного нажатия Shift и Ins или выполнения EditPaste. 2. Копирование содержимого ранее созданного cpp-файла в окно редактирования Для копирования выполните следующие действия 1 Выполните команду FileOpen. 2 В появившемся диалоговом окне выберите требуемый файл и нажмите OK. Откроется окно с содержимым указанного файла. 3
С помощью вышеописанных действий выделите требуемый фрагмент текста или выполните EditSelect All для выделения всего текста в окне редактирования. 4 Выполните EditCopy или нажмите Ctrl-Ins для копирования выделенного текста в буфер обмена. 5 Если открытый файл больше не нужен, закройте окно. Это делается двойным щелчком левой кнопки мыши на кнопке системного меню окна.
Можно сделать один щелчок мыши и в появившемся меню выбрать Close. 6 Выполните EditPaste или нажмите Shift-Ins для вставки текста из буфера в окно редактирования. 2. Создание простейшего приложения Для усвоения работы с компилятором BORLAND C создадим несколько вариантов простейшего Windows-приложения, которое создает окно с заголовком.
Заголовок окна содержит надпись Hello, Windows или Hello, Hello . Окно также содержит кнопки минимизации и максимизации, а также системное меню приложения. 1. Application и функцией OwlMain. В данном варианте программы объект класса
TApplication создается внутри функции OwlMain. 1. Исходный текст приложения include owlapplicat.h int OwlMainint, char TApplication appHello, Windows return app.Run 2. Пояснения к программе Заголовочный файл owlapplicat.h содержит описание класса TApplication см. Раздел 10.2 app - объект класса TApplication.
При создании этого объекта используется неявный вызов конструктора, устанавливающего текст заголовка прикладного окна Hello, Windows . app.Run - вызов члена-функции класса TApplication для объекта app. Функция TApplicationRun запускает приложение. 3. Задание 1 Создать и выполнить приложение, убедившись в правильности функционирования кнопок максимизации и минимизации окна. 2 Передвинуть окно в другое место экрана.
3 Плавно изменить высоту и ширину окна с помощью мыши. 4 Закрыть приложение. 5 Изменить исходный текст приложения, заменив заголовок окна на Hello, Hello . Убедиться в появлении окна с новым заголовком. 2.1.4. Немного английского an application - приложение to run - выполняться a window - окно Windows - название системы Windows OWL - Object Windows
Library - библиотека классов Windows to include - включать main - основной, главный to return - возвращать, возвращаться 2.2. Динамическое создание объекта класса TApplication В этом варианте приложения объект класса TApplication динамически создается в свободной области памяти. 2.2.1. Исходный текст приложения include owlapplicat.h int
OwlMainint, char TApplication app appnew TApplication Hello Windows return app- Run 2.2.2. Пояснения к программе app - указатель на объект типа TApplication. Оператор new выделяет участок в свободной области памяти под объект класса TApplication. При этом неявный вызов конструктора инициализирует объект приложения и устанавливает текст заголовка в Hello, Windows . 2.2.3. Задание Создать и выполнить приложение.
2.3. Кратчайший вариант Windows-приложения 2.3.1. Исходный текст приложения include owlapplicat.h int OwlMainint, char return TApplication Hello Windows .Run 2.3.2. Задание Создать приложение и убедиться в его работоспособности. 3. Использование класса TFrameWindow для создания главного окна
Класс TFrameWindow является производным от TWindow и обеспечивает функционирование главного окна приложения. 3.1. Создание объекта главного окна В нижеследующем приложении член-функция InitMainWindow класса TApplication с помощью оператора new и конструктора TFrameWindow создает объект - главное окно приложения. Адрес объекта помещается в переменную MainWindow объекта приложения.
3.1.1. Исходный текст программы include owlapplicat.h include owlframewin.h class TMyApp public TApplication public TMyAppTApplicationHello Windows void InitMainWindow MainWindownew TFrameWindow0,Hello, hello int OwlMainint, char return TMyApp.Run 3.1.2. Пояснения к программе Включаемый заголовочный файл owlframewin.h содержит описание класса
TFrameWindow см. раздел 10.3 Поскольку в данном варианте приложения мы хотим создать свое собственное главное окно в обход стандартных методов класса TApplication, мы должны переопределить виртуальную функцию InitMainWindow класса TApplication. Для этого мы выводим новый, уже наш, класс TMyApp, как производный от класса TApplication и описываем в нем виртуальную функцию InitMainWindow. Тело конструктора TMyApp пустое, т.е
Работа этого конструктора сводится только к вызову конструктора базового класса TApplication, содержащего единственный параметр - текст заголовка главного окна приложения см. раздел 10.2.2. Тело функции InitMainWindow класса TMyApp содержит оператор new, который совместно с конструктором TFrameWindow создает экземпляр объекта-окна с новым заголовком Hello, Hello . Адрес объекта присваивается переменной
MainWindow см. раздел 10.2.1 унаследованной от TApplication. 3.1.3. Задание 1 Создать и выполнить приложение. Обратите внимание Вместо заголовка Hello, Windows , заданного конструктором TMyApp, окно имеет заголовок Hello, Hello . Это результат работы переопределенной виртуальной функции TMyAppInitMainWindow, которая была вызвана после конструктора и изменила текст заголовка на
Hello, Hello . 2 Измените тексты заголовков, используемые конструкторами TMyApp и TFrameWindow. 3 Измените статус доступа к членам класса TMyApp на protected или private. Убедитесь, что появятся сообщения об ошибках компиляции, так как в функции OwlMain производится обращение к теперь уже недоступному конструктору TMyApp. 4 Опишите конструктор TMyApp вне класса, не забыв добавить при его описании оператор привязки
к классу TMyApp. Убедитесь в работоспособности приложения. 5 Опишите член-функцию InitMainWindow вне класса. Проверьте работоспособность приложения. 3.2. Изменение положения главного окна на экране Класс TFrameWindow наследует из класса TWindow см. раздел 10.4. член-данное Attr см. раздел 10.4.1 Attr - это структура, содержащая различные атрибуты окна, такие как стиль окна,
позиция на экране, размер и т.д. 3.2.1. Варианты функции InitMainWindow, использующие Attr Вариант A void InitMainWindow MainWindownew TFrameWindow0, Hello, hello MainWindow- Attr.X5 MainWindow- Attr.Y15 MainWindow- Attr.W200 MainWindow- Attr.H100 Вариант B void InitMainWindow
MainWindownew TFrameWindow0, Hello, hello MainWindow- Attr.XGetSystemMetricsSMCXSCREEN8 MainWindow- Attr.YGetSystemMetricsSMCYSCREEN8 MainWindow- Attr.WMainWindow- Attr.X6 MainWindow- Attr.HMainWindow- Attr.Y6 3.2.2. Пояснение к вариантам использования функции InitMainWindow
Указатель MainWindow указывает на главное окно приложения, созданное оператором new и конструктором TFrameWindow. Указатель используется для ссылки на элементы структуры Attr главного окна приложения. X,Y задают положение левого верхнего угла окна на экране. W и H задают ширину и высоту окна в пикселах. Функция GetSystemMetrics возвращает значения различных характеристик системы, таких как высота
SMCYSCREEN и ширина SMCXSCREEN экрана. 3.2.3. Задание 1 Создать приложение с вариантом A функции InitMainWindow. Проверьте работоспособность приложения. 2 Создать приложение с вариантом A написания функции инициализации, но с другими значениями элементов X,Y,W,H структуры Attr. 3 Создать приложение с вариантом
B написания функции InitMainWindow. Убедиться, что окно размещается в центре экрана. 3.3. Немного английского Attr - Attribute - атрибут, свойство признак. GetSystemMetrics - to Get System Metrics - получить системные характеристики. a screen - экран a frame - рамка a frame window - обрамляющее окно InitMainWindow - Initialization of Main Window - инициализация главного окна. to create - создавать to show - показать 4.
Программирование с таблицами отклика Одним из ключевых моментов работы Windows-приложения является тот факт, что работа программы управляется событиями. Примером событий в Windows является выбор пункта меню или нажатие на кнопку в окне программы. Система сохраняет информацию о произошедшем событии в системной очереди сообщений, а затем передает сообщение о нем работающей программе. При написании
Windows-приложения необходимо обеспечить обработку сообщений, поступающих в программу. Если же этого не сделать, то любые действия пользователя над окном программы будут проигнорированы и Вы не сможете работать с меню и т.д. Пусть, например, в окне программы была нажата левая кнопка мыши. В этом случае программа получит сообщение WMLBUTTONDOWN. Все сообщения Windows, передаваемые программе, представляют собой целочисленные константы с именами,
начинающимися с WM Windows Message, т.е. сообщение Windows. В программах, написанных с применением OWL, механизм получения информации о произошедших в системе событиях скрыт от программиста и обеспечивается функциями класса TApplication. Программисту требуется только описать свои функции, которые будут автоматически вызываться в ответ на пришедшее в программу сообщение. Для того, чтобы создать класс, функции которого будут откликаться
на пришедшие из системы сообщения, необходимо 1 Определить таблицу отклика для класса. Для этого в определение класса вставляется строка DECLARERESPONSETABLE имя класса имя класса заменяется на имя того класса, для которого определяется таблица отклика. DECLARERESPONSETABLE - это макрос OWL, который вводит в Ваш класс некоторые дополнительные элементы, позволяющие системе автоматически
вызывать функции-члены класса в ответ на пришедшее сообщение. Таблица отклика содержит имена сообщений Windows и адреса функций, вызываемых при получении соответствующих сообщений. 2 После объявления класса в текст программы вставляется другой макрос DEFINERESPONSETABLEn имя класса ,класс,класс имя класса - все то же имя класса, для которого Вы строите таблицу отклика. Через запятую Вы должны перечислить имена базовых классов, от которых производится
наследование. Число n следует заменить на число базовых классов, которые тоже содержат таблицы отклика. Сразу же за текстом макроса необходимо поместить элементы таблицы реакции, разделенные запятыми. Так, если Вы хотите обрабатывать сообщения о нажатиях правой и левой клавиш мыши в окне Вашего приложения, то в таблицу помещаются следующие элементы EVWMLBUTTONDOWN, EVWMRBUTTONDOWN, которые говорят OWL о том, что
Вы хотите обрабатывать сообщения о нажатиях левой и правой клавиш соответственно. Скажем EVWMLBUTTONDOWN расшифровывается, как Event событие, Windows Message Left Button Down. После описания всех элементов таблицы реакции запишите строку ENDRESPONSETABLE 3 Определите в Вашем классе функции, которые будут получать управление, если в системе произойдет желаемое событие. В нашем примере - это две функции void
EvLButtonDownUINT,TPoint, void EvRButtonDownUINT,TPoint Первый аргумент определяет клавиши-модификаторы, которые были нажаты на клавиатуре одновременно с нажатием одной из кнопок мыши. Второй аргумент определяет координаты точки окна, в которой было произведено нажатие. В тело этих функций можно вставить код, реализующий некоторые действия при получении соответствующих сообщений Windows. При написании функций отклика необходимо помнить следующее 1
Функция отклика вызывается OWL автоматически и только тогда, когда произойдет заданное событие. К примеру, функция EvLButtonDown вызывается только тогда, когда пользователь нажмет левую кнопку мыши внутри окна приложения. 2 В приложении может быть несколько классов, имеющих свои таблицы реакции. Класс реагирует только на предназначенные для него сообщения системы. 3 Имена и параметры функций, отвечающих на системные сообщения, предопределены.
Это означает, что на каждое сообщение отвечает строго определенная функция с определенным именем. То есть, если Вы хотите обрабатывать нажатия левой кнопки мыши, то в классе необходимо определить функцию с именем EvLButtonDown. 4.1. Отклик на нажатие левой и правой клавиш мыши Нижеследующее Windows-приложение создает прикладное окно и ожидает нажатия правой или левой кнопки мыши. При нажатии любой из этих клавиш внутри окна появляется панель сообщения, указывающая, какая клавиша
была нажата. После нажатия на кнопку OK панель исчезает, а приложение будет ждать нового нажатия на клавиши мыши. 4.1.1 Исходнный текст приложения. include owlapplicat.h include owlframewin.h class TMyWindow public TFrameWindow public TMyWindowchar titleTFrameWindow0,title protected void EvLButtonDownUINT,TPoint void EvRButtonDownUINT,TPoint DECLARERESPONSETABLETMyWindow DEFINERESPONSETABLE1TMyWindow,
TFrameWind ow EVWMLBUTTONDOWN, EVWMRBUTTONDOWN, ENDRESPONSETABLE void TMyWindowEvLButtonDownUINT,TPoint MessageBoxYou have pressed the LEFT mouse button,Message dispatched,MBOK MBICONINFORMATION void TMyWindowEvRButtonDownUINT,TPoint MessageBoxYou have pressed the RIGHT mouse button,Message dispatched,MBOKMBICONINFORMATION class
TMyApp public TApplication public TMyAppTApplication void InitMainWindow EnableCtl3d MainWindownew TMyWindowClick Me int OwlMainint, char TMyApp app return app.Run 4.1.2. Пояснения к программе Класс TMyWin описывает прикладное окно, как главное окно приложения и поэтому порождается от класса TFrameWindow. Кроме описания конструктора класс содержит объявления стандартных
функций отклика EvLButtonDown и EvRButtonDown, а так же объявление таблицы отклика для класса. Вслед за описанием класса располагается описание таблицы отклика на сообщения от левой и правой клавиш мыши. Функции отклика описаны вне класса. Тело каждой из этих функций содержит единственный вызов функции MessageBox, которую TMyWin наследует от TFrameWindow. Аргументы функции MessageBox задают текст сообщения, заголовок панели и стиль окна сообщения.
Стили MBOK и MBICONINFORMATION дают нам диалоговую панель с кнопкой OK и пиктограммой Information Тело функции TMyAppInitMainWindow содержит вызов функции EnableCtl3d, которая разрешает приложению использовать трехмерные диалоги. Вы можете закомментировать вызов этой функции и сравнить полученные результаты. 4.1.3. Задание 1 Создать и выполнить приложение. Поэкспериментировать с приложением, нажимая кнопки
мыши в его окне. 2 Измените аргументы в вызовах функции MessageBox. Убедитесь в изменении внешнего вида панели сообщения. 3 Закомментируйте строку EVVMRBUTTONDOWN в таблице элементов отклика. Объясните изменившееся поведение приложения. 4.1.4. Немного английского a button - кнопка down - вниз left - влево, левый right - правый an event - событие
a message - сообщение a response - ответ a table - таблица to declare - объявить to define - описать a box - блок, панель 5. Вывод графики в Windows Вывод текстовой или графической информации в Windows связан с контекстом устройства DC. Рабочая зона окна связывается с контекстом устройства TClientDC. Перед выводом информации мы должны создать контекст устройства, передав ему идентификатор окна и выбрать в нем набор необходимых графических объектов, таких как перо
TPen, кистьTBrush и т. д. Необходимо также позаботиться о цвете выводимых объектов. Созданный контекст позволяет нам рисовать только внутри рабочей области окна, не затрагивая при этом ни другие окна, ни границы самого окна. Наличие в системе такого класса, как TDC, делает доступными более 150 функций, связанных с выводом оконной графики. Эти функции позволяют использовать различные объекты-инструменты перо, кисть, шрифт и т. д выводить
текст и рисовать различные фигуры. 5.1. Вывод координат точки нажатия левой клавиши мыши Нижеследующее приложение откликается на щелчки левой кнопки мыши, выводя в рабочей зоне окна координаты указателя мыши в голубом цвете. 5.1.1. Исходный текст программы include owlapplicat.h include owlframewin.h include owldc.h class TMyWindow public TFrameWindow public TMyWindowchar titleTFrameWindow0,title protected void
EvLButtonDownUINT,TPoint DECLARERESPONSETABLETMyWindow DEFINERESPONSETABLE1TMyWindow,TFrameWind ow EVWMLBUTTONDOWN, ENDRESPONSETABLE void TMyWindowEvLButtonDownUINT,TPoint point TClientDC dcHWindow TColor forecolorTColorLtCyan dc.SetTextColorforecolor char buf20 wsprintfbuf,d,d,point.x,point.y dc.
TextOutpoint.x,point.y,buf class TMyApp public TApplication public TMyAppTApplication void InitMainWindow MainWindownew TMyWindowUse the left mouse button int OwlMainint, char TMyApp app return app.Run 5.1.2. Пояснение к программе Заголовочный файл owldc.h содержит описание сласса
TDC и его производных классов. Класс TMyWin порождается от TFrameWindow и описывает главное окно приложения. Кроме описания конструктора класс содержит объявление функции отклика EvLButtonDown на сообщение, поступающее при нажатии левой клавиши мыши, описание которой представляет наибольший интерес. При описании EvLButtonDown указано имя только второго параметра, так как нам необходимо знать только координаты указателя мыши в момент нажатия ее левой кнопки.
В начале тела функции создается объект контекста рабочей области главного окна приложения Client area DC. В дальнейшем объект используется для ссылки на функцию установки цвета текста SetTextColor и функцию вывода текста в окно TextOut. Данные функции являются членами класса TClientDC и унаследованы им от класса TDC см. раздел 10.5.1. Объект forecolor класса TColor используется для установки цвета шрифта в контексте
окна. Функция wsprintf преобразует целочисленные значения координат x,y в их символьное представление в строке str. Полученная строка выводится в окно функцией TextOut в позиции указателя мыши на экране. Класс TMyApp описывает класс приложения, из которого в функции OwlMain создается объект app. В классе описана функция InitMainWindow, создающая главное окно приложения на базе класса
TMyWin. 5.1.3. Задание 1 Создать и выполнить приложение. Поэкспериментировать с приложением, передвигая курсор мыши в рабочей зоне окна и нажимая на ее левую клавишу. 2 Переписать текст программы, используя для вывода текста другие цвета, например Black, Gray, LtCyan, LtGray, TtGreen, LtMagenta, LtRed, LtYellow, White. 3 Измените текст приложения, формируя цвет текста, как совокупность случайных значений
его компонент - красного, зеленого и голубого. Для этого замените TColor forecolorTColorLtBlue на TColor forecolorrandom255, random255, random255. Для использования random в начало программы вставьте include stdlib.h 5.1.4. Немного английского TDC - Type Device Context - тип контекста устройства a device - устройство a color - цвет to set - устанавливать SetTextColor - to Set a
Text Color - установить цвет текста a point - точка 6. Обновление содержимого окна Большим достижением Windows являются перекрывающиеся окна. Работая с системой, Вы можете увидеть на экране несколько окон, наложенных друг на друга. Вы можете выбрать одно из таких окон и сдвинуть его в сторону. В результате на экране появится содержимое окон заднего плана.
Но не следует полагать, что Windows сохраняет массив пикселов каждого из окон, чтобы отображать их на экране, наоборот, она поручает приложениям самим восстанавливать свои окна. Если содержимое окна нуждается в восстановлении, Windows посылает приложению-владельцу окна сообщение WMPAINT. Если приложение имеет функцию отклика на это сообщение, то функция будет активизирована и перерисует окно, восстановив его внешний вид. Итак, корректное
Windows-приложение должно осуществлять вывод в окно приложения только через виртуальную функцию Paint, вызываемую при приходе WMPAINT. Вы можете легко убедиться в сказанном, запустив приложение, представленное в разделе 5.1.1. Поместите над окном данного приложения любое другое прикладное окно и удалите его - рабочая область окна не восстановится. Так и должно быть, поскольку это приложение не имеет функции Paint. Обратите внимание Сама функция Paint не является функцией отклика на сообщение и для нее не надо
включать макрос сообщения в таблицу откликов. Paint необходимо только переопределить в классе, производном от TWindow или TFrameWindow. 6.1. Рисование в окне с помощью Paint Нижеследующее приложение выдает в рабочую зону окна голубой прямоугольник с вписанным в него зеленым эллипсом. Вывод осуществляет функция Paint. 6.1.1. Исходный текст приложения include owlapplicat.h include owlframewin.h include owldc.h class
TMyWin public TFrameWindow public TPoint pn,pk TMyWin TFrameWindow0,The Paint function pn.x100 pn.y50 pk.x300 pk.y200 void PaintTDC,BOOL,TRect void TMyWinPaintTDC dc,BOOL,TRect TColor colorTColorLtBlue TPen pen1color dc.SelectObjectpen1 dc.Rectanglepn,pk TPen pen2TColorLtGreen dc.SelectObjectpen2 dc.
Ellipsepn,pk class TMyApp public TApplication public TMyAppTApplication void InitMainWindow MainWindownew TMyWin int OwlMainint, char TMyApp app return app.Run 6.1.2. Пояснения к программе Класс TMyWin описывает главное окно приложения. Члены-данные pn и pk - объекты класса TPoint - предназначены для хранения координат левого верхнего
и правого нижнего углов прямоугольника. Конструктор TMyWin, конструируя окно приложения, инициализирует значения pn и pk. Объявление класса также содержит прототип функции Paint. Операторы, расположенные в теле Paint, используют контекст устройства dc, передаваемый ей при вызове. 6.1.3. Задание 1 Создать и выполнить приложение.
Проверить его работу, изменяя размеры прикладного окна. 2 Изменить функционирование Paint, поместив в ее тело операторы pk.x25 pk.y15 Поэкспериментируйте с приложением и объясните поведение прикладного окна. 6.1.4. Немного английского to paint - красить, перекрашивать, рисовать a rectangle - прямоугольник an ellipse - эллипс to select - выбирать SelectObject - to
Select an Object - выбрать объект 7. Создание меню Окна почти каждого приложения содержат строку меню, выбрав которое, мы получаем список команд. Любую из этих команд можно выполнить, сделав щелчок на ней левой клавишей мыши. При этом Windows посылает соответствующее сообщение приложению. Если приложение имеет соответствующую функцию отклика, то оно сможет отреагировать на команду меню.
В описании таблицы отклика необходимо для каждой команды меню вставить макрос вида EVCOMMANDMENUITEMID, имя функции , где MENUITEMID - константный идентификатор пункта меню, имя функции - имя функции отклика, которая будет активизироваться при выборе пункта меню с заданным идентификатором. В отличие от функций реакции на системные сообщения, функция отклика на команду меню может иметь любое имя. Обратите внимание. Для разработки данного приложения необходимо создать файл ресурсов с расширением
.rc, в котором будет храниться описание ресурса меню программы, и файл с расширением .rh, в котором будут сохранены константные идентификаторы пунктов меню. Нет необходимости создавать данные файлы вручную. Для этого мы воспользуемся программой Resource Workshop. 7.1. Создание ресурсов программы с помощью Resource
Workshop 1. Запустите компилятор. Для этого активизируйте пиктограмму Borland C . 2. Выполните команду ProjectNew project. 3. Как было описано ранее, выберите имя и путь к создаваемому проекту. 4. Выберите Advanced в диалоге New project. Затем в появившейся панели снимите флажок def и установите флажок rc. Завершите создание проекта нажатием OK. 5.
В результате Ваших действий должно появиться окно проекта, содержащее два файла один с расширением .cpp, другой - с расширением .rc, являющийся файлом ресурсов создаваемого проекта. 6. Теперь можно приступить к созданию ресурсов нашего приложения, а именно, меню. В результате проделанной работы Вы должны будете получить меню Size и два его пункта - Large и Small. Они понадобятся нам в программе, которая будет выводить геометрические
фигуры разных размеров по желанию пользователя. 7. В окне проекта выберите файл с расширением .rc. В отличие от cpp-файлов, файлы с расширением .rc редактируются не в текстовом редакторе, а в специализированном редакторе ресурсов Resource Workshop. В его окне Вы сможете увидеть содержимое Вашего rc-файла, но в данный момент он пустой. 8. Первое, что необходимо сделать - это добавить в проект
ресурсов файл с расширением .rh resource header, т. е. заголовок ресурсов. Это необходимо для того, чтобы в своей программе Вы могли ссылаться на созданные ресурсы через rh-файл так же, как Вы ссылаетесь на библиотечные функции компилятора, описанные в файлах с расширением .h. Для подключения файла выполните FileAdd to project. В появившейся диалоговой панели в поле File type выберите
RH, H header, а в поле File name введите имя своего header-файла в описании данной лабораторной работы было использовано имя lab3c.rh, которое фигурирует в приведенных ниже листингах. Если Вы введете имя, отличное от него, то Вы должны будете учитывать это при включении файла в свою программу. Ответьте Yes на вопрос о необходимости создания файла. 9. Теперь можно приступить к созданию меню нашего приложения.
Для этого выполните следующее 1 Выполните команду ResourceNew из меню редактора ресурсов. 2 В списке возможных типов ресурсов панели New resource выберите MENU. Убедитесь, что поле Place identifiers in указывает на файл с расширением .rh. Поле Place resource in должно всегда указывать на Ваш rc-файл. Нажмите OK и Workshop приступит к созданию меню.
3 После проделанных шагов Вы должны увидеть следующее Появившееся окно представляет собой редактор меню. В заголовке Вы видите название созданного меню MENU1. В правом верхнем углу окна располагается поле TEST MENU, которое позволяет проверить работу создаваемого меню.
Строка созданного меню содержит название раздела меню Pop-up что означает всплывающий. При щелчке мышью на данном имени появляются пункты меню. 4 Нам нужно получить пункт меню с именем Size. Для этого щелкните мышью по имени Pop-up в поле тестирования меню, либо на том же имени в описании меню в правом нижнем углу окна. Далее, перейдите в поле Item text и переименуйте пункт меню из
Pop-up в Size. Нажмите Enter и убедитесь, что поле тестирования отобразило переименованный пункт меню. 5 Нам требуется создать команду меню Small. Для этого в поле тестирования или в окне описания меню выберите пункт Item. В поле тестирования это делается выбором пункта Size и выбором в появившемся меню поля Item. 6 Убедитесь, что поле Item text действительно содержит текст Item. Перейдите в это поле и измените текст на
Small. Проверьте, что в создаваемом меню отображается пункт Small. 7 В поле Item Id редактора меню введите имя константного идентификатора, который будет передаваться программе при выборе пункта меню Small. Пусть это будет CMSIZESMALL CM означает Command, команда. 8 Создадим теперь пункт меню Large. Для начала проверьте, что в окне описания меню выделен пункт меню
Small, т. к. создаваемый нами новый пункт меню должен появиться под ним. Затем выполните команду меню редактора MenuNew menu item. Результатом работы команды будет новый пункт меню, который будет расположен под командой Small. С помощью описанных выше действий дайте пункту меню имя Large и впишите идентификатор команды CMSIZELARGE.
Обратите внимание Необходимо выбирать New menu item, а не New menu pop-up, который создает не команду, а пункт меню, который сам содержит свои команды и при активизации открывает вложенное в него меню. 9 Проверьте, что показывает поле тестирования созданного Вами меню. На этом создание меню программы завершено. Закройте Workshop и ответьте Yes на предложение программы сохранить результат
Вашей работы. Необходимо также отметить, что в header-файл, имя которого Вы указали в начале построения проекта, будут помещены имена константных идентификаторов пунктов меню CMSIZESMALL и CMSIZELARGE, а также идентификатор меню MENU1, на которые Вы будете ссылаться при написании программы. 7.2. Программирование с использованием меню Нижеследующее приложение использует команды
Small и Large для управления выводом на экран фигур разного размера. Прежде, чем приводить текст программы покажем, что же мы получили в результате манипуляций над Resource Workshop. 7.2.1. Листинг rh-файла lab3с.rh produced by Borland Resource Workshop define MENU1 1 define CMSIZESMALL 102 define CMSIZELARGE 101 7.2.2. Листинг rc-файла LAB3С.RC produced by
Borland Resource Workshop include lab3с.rh MENU1 MENU POPUP Size MENUITEM Small, CMSIZESMALL MENUITEM Large, CMSIZELARGE Вообще rc-файл содержит в себе текстовое описание ресурсов и, как может показаться, легче написать его с помощью текстового редактора. Это верно только для простых файлов ресурсов. Для написания же больших программ лучше воспользоваться возможностями
Resource Workshop. 7.2.3. Исходный текст приложения include owlapplicat.h include owlframewin.h include owldc.h pragma hdrstop include lab3а.rh class TMyWin public TFrameWindow public TPoint pn,pk TMyWin TFrameWindow0,The Paint function pn.x100 pn.y50 pk.x300 pk.y200 protected void PaintTDC,BOOL,TRect void CmLarge void CmSmall DECLARERESPONSETABLETMyWin
DEFINERESPONSETABLE1TMyWin,TFrameWindow EVCOMMANDCMSIZELARGE,CmLarge, EVCOMMANDCMSIZESMALL,CmSmall, ENDRESPONSETABLE void TMyWinPaintTDC dc,BOOL,TRect TColor colorTColorLtBlue TPen pen1color dc.SelectObjectpen1 dc.Rectanglepn,pk TPen pen2TColorLtGreen dc.SelectObjectpen2 dc.Ellipsepn,pk void
TMyWinCmLarge pk.x500 pk.y400 Invalidate void TMyWinCmSmall pk.x150 pk.y100 Invalidate class TMyApp public TApplication public TMyAppTApplication void InitMainWindow MainWindownew TMyWin MainWindow- AssignMenuMENU1 int OwlMainint, char TMyApp app return app.Run 7.2.4. Пояснения к программе
Класс TMyWin содержит объявление членов-функций Paint, CmLarge, CmSmall. Описание таблицы реакции показывает, что в ответ на выбор команды меню Small с идентификатором CMSIZESMALL будет вызываться функция CmSmall. Аналогично для команды Large. При ее выборе будет вызвана CmLarge. Еще раз подчеркнем, что для команд меню нет стандартных функций отклика, как это было с системными
сообщениями Windows, т. е. в макросе Вы можете указать имя любой функции отклика, главное, чтобы она не принимала и не возвращала значений. Описание функции Paint целиком совпадает с ее текстом в предыдущем разделе. Функции отклика на сообщения меню изменяют координаты правого нижнего угла прямоугольника и вызывают инкапсулированную в TFrameWindow функцию Invalidate, которая заставляет
Windows обновить окно приложения. Вызов данной функции говорит системе, что окно требует обновления и та посылает приложению сообщение WMPAINT. 7.3. Задание 1 Создать и выполнить приложение. 2 Удалите вызов функции Invalidate в одной из функций отклика. Объясните изменения в логике работы приложения. 3 Создайте дополнительное меню Color с командами Black и
Red, которые должны изменять цвет выводимых на экране фигур. 8. Управляющие компоненты Windows Рассмотрим несколько управляющих компонент Windows, облегчающих диалог с приложением. Первый компонент - это линейка прокрутки. Она может быть расположена в окне приложения и представляет собой вертикальную или горизонтальную полосу с ползунком. Ползунок можно передвинуть, зацепив его указателем мыши и перетащив вдоль полосы прокрутки.
Линейка создается как объект класса TScrollBar в конструкторе окна приложения. Конструктору TScrollBar передаются координаты и размеры создаваемой линейки, а так же тип линейки - горизонтальная или вертикальная. Покажем, как использовать в приложении вертикальную линейку прокрутки. Во время перемещения ползунка вертикальная линейка генерирует уведомляющие сообщения WMVSCROLL. Вы можете перехватить и обработать эти сообщения, объявив в классе-владельце такой линейки
функцию отклика EvVScroll и дополнив таблицу отклика класса макросом EVWMVSCROLL. Функция будет вызываться при изменении положения ползунка на линейке. При создании линейки присвойте адрес сконструированного объекта указателю. В результате Вы получите доступ к разнообразному набору функций объекта. К примеру, появится возможность позиционировать ползунок из программы, получать позицию ползунка и
изменять масштаб линейки по умолчанию позиция ползунка на линейке изменяется от 0 до 100. Все сказанное выше справедливо и для горизонтальной линейки прокрутки, но для реакции на ее сообщения требуется функция EvHScroll и макрос EVWMHSCROLL. Теперь уделим внимание другому компоненту визуального интерфейса Windows - кнопке. Кнопка может быть расположена в окне приложения и представляет собой прямоугольник с надписью. Кнопка реагирует на щелчки мышью выдачей уведомляющего сообщения.
Она создается в конструкторе окна приложения, как объект класса TButton. Конструктору TButton передается адрес объекта-окна, в котором Вы хотите разместить кнопку, текст надписи на кнопке, ее координаты и размер. Конструктору также передается константный идентификатор кнопки. Данный идентификатор совпадает с идентификатором уведомляющего сообщения, генерируемого кнопкой при
нажатии. Реакция на нажатия кнопки реализуется аналогично реакции на выбор команды меню Вы описываете функцию реакции имя функции произвольное на нажатия кнопки и помещаете в таблицу реакции макрос EVCOMMANDBUTTONID,UserName с идентификатором кнопки и именем функции отклика. Приложение может иметь несколько кнопок с различными идентификаторами и для каждой кнопки нужно создать свою функцию отклика и добавить элемент в таблицу реакций.
Если Вы хотите реагировать только на нажатия кнопки, никак не изменяя ее характеристик, то присваивать указателю адрес созданного объекта-кнопки не требуется. 8.1. Изменение размера выводимой графики с помощью линейки прокрутки В нижеследующем приложении в прикладном окне выдается голубой прямоугольник с вписанным в него эллипсом. В окне создается вертикальная линейка прокрутки. Перемещая ползунок линейки, можно плавно изменять
размеры выводимых геометрических фигур в некотором фиксированном диапазоне. 8.1.1. Исходный текст программы include owlapplicat.h include owlframewin.h include owldc.h include owlscrollba.h class TMyWin public TFrameWindow public TPoint pn,pk TScrollBar sb TMyWin TFrameWindow0,The Paint function sbnew TScrollBarthis,1,350,100,20,125,FALSE pn.x100 pn.y40 pk.x300 pk.ypn.y protected
void PaintTDC,BOOL,TRect void EvVScrollUINT, UINT, HWND DECLARERESPONSETABLETMyWin DEFINERESPONSETABLE1TMyWin,TFrameWindow EVWMVSCROLL, ENDRESPONSETABLE void TMyWinPaintTDC dc,BOOL,TRect TColor colorTColorLtBlue TPen pen1color dc.SelectObjectpen1 dc.Rectanglepn,pk TPen pen2TColorLtGreen dc.
SelectObjectpen2 dc.Ellipsepn,pk void TMyWinEvVScrollUINT scrollcode, UINT thumbPos, HWND hwnd TFrameWindowEvVScrollscrollcode,thumbPos ,hwnd InvalidateRectTRectpn,pk pk.ypn.ysb- GetPosition2 UpdateWindow class TMyApp public TApplication public TMyAppTApplication void InitMainWindow MainWindownew TMyWin int OwlMainint, char
TMyApp app return app.Run 8.1.2. Пояснения к программе Заголовочный файл owlscrollba.h содержит описание класса TScrollBar и его членов-функций. Описание класса TMyWin содержит объявления точек объектов класса TPoint для левого верхнего и правого нижнего углов прямоугольника. В классе дополнительно объявлен объект класса TScrollBar, представляющий собой вертикальную линейку
прокрутки. TMyWin содержит также функцию отклика EvVScroll на сообщения от линейки прокрутки и переопределенную функцию Paint. В теле конструктора TMyWin создается линейка прокрутки и задаются начальные значения координат двух углов прямоугольника. Описание таблицы реакций содержит элемент EVWMVSCROLL. Функция EvVScroll вызывает одноименную функцию базового класса для обеспечения полной обработки поступающих от скроллера сообщений. Затем функция требует перерисовать часть рабочей зоны окна для вывода
геометрических фигур с измененными размерами. Для получения положения ползунка на линейке прокрутки используется функция GetPosition, которая возвращает число в диапазоне от 0 до 100. Вызов функции UpdateWindow вызывает немедленное обновление окна приложения, посылая окну WMPAINT в обход системной очереди сообщений. 8.1.3. Задание 1 Создать исследовать работу приложения. 2
Изменить вертикальную линейку прокрутки на горизонтальную. 3 Исследовать работу приложения, закомментировав вызов UpdateWindow в теле EvVScroll. 4 Исследовать работу приложения, удалив вызов функции InvalidateRect. 5 Измените таблицу реакции, удалив в ней EVWMVSCROLL. Объясните поведение приложения. 8.2. Изменение цвета выводимой графики с помощью кнопок
В приводимом здесь тексте Windows-приложения цвет выводимых на экран геометрических фигур изменяется при нажатии одной из двух кнопок, размещенных в окне приложения. 8.2.1. Исходный текст программы. include owlapplicat.h include owlframewin.h include owlbutton.h include owldc.h define CMBUTTON1 100 define CMBUTTON2 200 class TMyWin public TFrameWindow public TPoint pn,pk int nColor
TMyWin TFrameWindow0,The Paint function new TButtonthis,CMBUTTON1,Palette 1,350,50,80,30 new TButtonthis,CMBUTTON2,Palette 2,350,100,80,30 pn.x100 pn.y50 pk.x300 pk.y200 nColor1 void PaintTDC,BOOL,TRect void CmButton1 nColor1 Invalidate UpdateWindow void CmButton2 nColor2 Invalidate UpdateWindow DECLARERESPONSETABLETMyWin
DEFINERESPONSETABLE1TMyWin,TFrameWindow EVCOMMANDCMBUTTON1,CmButton1, EVCOMMANDCMBUTTON2,CmButton2, ENDRESPONSETABLE void TMyWinPaintTDC dc,BOOL,TRect TColor colornColor1 TColorLtBlue TColorLtYellow TPen pen1color dc.SelectObjectpen1 dc.Rectanglepn,pk TPen pen2nColor1 TColorBlack TColorLtRed dc.
SelectObjectpen2 dc.Ellipsepn,pk class TMyApp public TApplication public TMyAppTApplication void InitMainWindow MainWindownew TMyWin int OwlMainint, char TMyApp app return app.Run 8.2.2. Пояснения к программе Заголовочный файл owlbutton.h содержит описание класса TButton и его членов. В начало программы помещены директивы define
CMBUTTON1 100 define CMBUTTON2 200, определяющие константные идентификаторы сообщений, которые будут посылаться программе кнопками в ответ на щелчки мышью. CMBUTTON1 генерируется первой кнопкой, CMBUTTON2 - второй. Можно выбрать другие имена сообщений, отличные от CMBUTTONn и значения констант, отличные от приведенных в программе, но для того, чтобы программа правильно
реагировала на сообщения кнопок, необходимо правильно заполнить таблицу реакций, передав в качестве аргументов макросам таблицы имена констант и имена функций отклика. Конструктор прикладного окна создает с помощью оператора new две кнопки, передавая им в качестве аргументов идентификатор окна, идентификатор уведомляющего сообщения, которое будет генерировать кнопка, текст надписи на кнопке и координаты размещения кнопки в окне приложения.
Обратите внимание на то, что адреса созданных объектов-кнопок не присваиваются указателям. Этого не требуется делать потому, что в программе нет необходимости ссылаться на эти объекты. Функции отклика на сообщения кнопок CmButton1 и CmButton2 изменяют признак цвета геометрических фигур и объявляют о необходимости перерисовки окна приложения. Таблица отклика конструируется так же, как это делалось при использовании меню.
Она содержит идентификаторы уведомляющих сообщений, приходящих от кнопок и имена функций класса прикладного окна, отвечающих за обработку данных сообщений. 8.2.3. Задание. 1 Создать приложение и исследовать его работу. 2 Изменить аргументы конструктора текст кнопки, координаты, размер и т. д. TButton одной из кнопок. 3 Исследуйте работу приложения, закомментировав вызов
Invalidate в одной из функций отклика. 9. Ввод и редактирование текста Данная тема будет посвящена панелям ввода и редактирования - одной из популярнейших компонент Windows. Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста. Панель редактирования создается, как объект класса TEdit и может быть размещена в любом прикладном окне.
Данная панель представляет собой стандартный текстовый редактор Windows, в котором доступны все операции редактирования текста - вставка и замена текста, удаление символов и работа с буфером обмена Windows. Различают два типа панелей редактирования - однострочная и многострочная. Создание панелей редактирования и размещение их в окне приложения осуществляются аналогично созданию кнопок и полос прокрутки. Объект создается из класса
TEdit. Конструктору объекта передается идентификатор окна, в котором будет размещена панель, константный идентификатор панели, текст, который будет помещен в редактор и координаты панели в окне приложения. Дополнительно конструктору передается стиль панели редактирования TRUE, если создается многострочная панель, FALSE, если панель - однострочная см раздел 10.7. 9.1. Пример использования однострочного текстового редактора для ввода и редактирования текста
Приведенное в этом разделе приложение создает однострочный текстовый редактор и выводит копии этой строки в окне приложения. 9.1.1. Исходный текст приложения include owlapplicat.h include owlframewin.h include owledit.h include owlbutton.h include owldc.h define IDONELINER 150 define CMBUTTON 160 define TEXTLEN 10 class TMyWin public TFrameWindow TEdit oneLiner char txtTEXTLEN public
TMyWin TFrameWindow0,the TEdit object - oneLinernew TEditthis,IDONELINER,Input one line,10,10,100,30,TEXTLEN,FALSE - new TButtonthis,CMBUTTON,Update,10,100,70,25 - txt00 protected void CmButton void PaintTDC,BOOL,TRect DECLARERESPONSETABLETMyWin DEFINERESPONSETABLE1TMyWin,TFrameWindow EVCOMMANDCMBUTTON,
CmButton, ENDRESPONSETABLE void TMyWinCmButton oneLiner- GetLinetxt,TEXTLEN,0 Invalidate UpdateWindow void TMyWinPaintTDC dc,BOOL,TRect - for int i1i 2i - dc.TextOut150,50i20,txt class TMyApppublic TApplication public TMyApp TApplication void InitMainWindow MainWindownew
TMyWin - int OwlMainint,char return TMyApp.Run 9.1.2. Пояснения к программе Заголовочный файл owledit.h содержит описание класса TEdit и его членов-функций. Класс TMyWin описывает прикладное окно. В классе определен указатель на объект TEdit, используемый для ссылки на член-функции элемента редактирования. Конструктор TMyWin создает однострочную панель редактирования.
Первый аргумент конструктора TEdit равен this. Это привязывает панель редактирования к прикладному окну. Конструктору также передается текст, который будет изначально размещен в панели редактирования. Дополнительно в окне приложения размещается кнопка, при нажатии которой текст из буфера редактора переписывается в строку с именем txt. Для этого вызывается GetLine. Первый параметр функции - указатель на строку, в которую требуется переписать текст строки из редактора,
второй аргумент - длина переписываемой строки, третий аргумент - номер копируемой из элемента редактирования строки. Функция отклика на нажатия кнопки объявляет о необходимости перерисовки главного окна. Это приводит к тому, что Paint выводит текст, скопированный в txt в окно приложения. После запуска приложения Вы можете изменить текст в элементе редактирования, а затем нажать на кнопку. В результате все изменения в редакторе будут отображены в окне приложения.
9.1.3. Задание 1 Создайте и исследуйте приложение. 2 Поместите в окно приложения еще одну панель редактирования. После нажатия на кнопку приложение должно выводить в свое окно строки из первой и второй панели редактирования. 9.2. Использование многострочного текстового редактора для ввода и редактирования текста. Нижеприведенное Windows-приложение использует многострочную панель редактирования текста.
9.2.1. Исходный текст программы include owlapplicat.h include owlframewin.h include owledit.h include owlbutton.h include owldc.h define IDMULTILINER 150 define CMBUTTON 160 class TMyWin public TFrameWindow TEdit multiLiner char txt public TMyWin TFrameWindow0,the TEdit object - multiLinernew TEditthis,IDMULTILINER,Input lines,10,10,200,100,0,TRUE - new
TButtonthis,CMBUTTON,Update,10,130,70,25 protected void CmButton void PaintTDC,BOOL,TRect DECLARERESPONSETABLETMyWin DEFINERESPONSETABLE1TMyWin,TFrameWindow EVCOMMANDCMBUTTON,CmButton, ENDRESPONSETABLE void TMyWinCmButton Invalidate UpdateWindow void TMyWinPaintTDC dc,BOOL,TRect - for int i1i multiLiner-
GetNumLinesi int lineLength multiLiner- GetLineLengthi-1 - txt new charlineLength - multiLiner- GetLinetxt,lineLength,i-1 - dc.TextOut250,50i20,txt - delete txt - class TMyApppublic TApplication public TMyApp TApplication void InitMainWindow MainWindownew TMyWin - int OwlMainint,char return TMyApp.Run 9.2.2. Задание 1 Сравните листинги программ, приводимые в 9.2.1 и в 9.1.1, уделив особое
внимание на различия в конструировании однострочной и многострочной панелей редактирования. 2 Создайте и выполните приложение. 3 Создайте элемент меню прикладного окна, вызывающий однострочный или многострочный элемент редактирования. 9.3. Немного английского to edit - редактировать GetLine - to get a line - получить строку GetLineLength - to get a line length - получить длину строки 10. Приложение. Классы библиотеки OWL. 10.1. Иерархия классов библиотеки
OWL, используемых в пособии 10.2. Класс TApplication Производный от класса TModule. Используется для порождения класса для объекта-приложения Windows. Класс TApplication содержит 7 членов-данных и 35 членов-функций, из которых в данном пособии используются 10.2.1. Член-данное TFrameWindow MainWindow public Указатель на главное окно приложения. 10.2.2. Член-функции virtual void
InitApplication protected Выполняет любую инициализацию, необходимую только для первого экземпляра приложения. По умолчанию InitApplication ниего не выполняет. virtual void InitInstance protected Выпоняется для каждого экземпляра приложения. InitInstance вызывает InitMainWindow, а затем создает и высвечивает на экране главное окно путем вызова соответственно TWindowCreate и TWindowShow. virtual int
Run public Инициализирует экземпляр приложения, вызывая InitApplication для первого экземпляра и InitInstance для всех остальных. Если инициализация прошла успешно, Run вызывает MessageLoop и запускает приложение. virtual void InitMainWindow protected По умолчанию InitMainWindow создает обобщенный объект - главное окно с именем приложения в качестве заголовка. Для создания требуемого главного окна необходимо переопределить
InitMainWindow, не забыв сделать ссылку в MainWindow на созданное главное окно класса TFrameWindow. TAplication const farname0 public Этот конструктор создает объект класса TApplication. name - указатель на имя приложения. Этот конструктор используется в теле функции OwlMain. 10.3. Класс TFrameWindow Производный от TWindow. Управляет поведением главного окна посредством управления клавиатурой и обработкой команд меню.
Класс TFrameWindow содержит 4 член-данных и 25 член-функций, из которых в данном пособии используются 10.3.1. Член-функции virtual BOOL AssignMenuTResId menuId public Устанавливает Attr.Menu равным аргументу menuId и удаляет предыдущее меню окна void SetupWindow protected Вызывает TWindowSetupWindow для создания окон в списке потомков. SetupWindow выполняет начальную подготовку пользовательского окна, если оно существует, связывает меню
рамки с ресурсом меню. TFrameWindowTWindow parent, const char far title0, TWindow clientWnd0, BOOL shrinkToClientFALSE, TModule module0 public Создает объект-окно с окном предком, на которое указыывает parent. Устанавливает позиции и поля размеров структуры Attr равными стандартным значениям. title - имя заголовка создаваемого окна. 10.4. Класс TWindow Производный от классов
TEventHandler и TStreamableBase. Обеспечивает специфическое поведение окон. Класс TWindow содержит 12 член-данных и 175 член-функций, из котрых в данном пособии используются 10.4.1. Член-данные TWindowAttr Attr public Сохраняет структуру TWindowAttr, содержащую атрибуты создания окна. TWindow parent public Указывает на интерфейсный объект, служащий окном-предком для данного интерфейсного объекта. char far
title public Указываетна заголовок окна. 10.4.2. Член-функции TWindowTWindow parent, const char far title0, TModule module0 public Конструктор класса TWindow. Добавляет this к списку окон-потомков parent, если this не 0. Также устанавливает заголовок окна title и инициализирует атрибуты создания окна. virtual BOOL CanClose public Возвращает TRUE, если ассоциированный интерфейсный элемент может быть закрыт.
Иначе возвращает FALSE. inline TApplicacionGetApplication public Получает указатель на объект TApplication, связанный с this. int MessageBoxconst fartext, const char far caption0, UINT typeMBOK public Создет и выводит окно сообщений, содержащее сообщение text, заголовок caption и пиктограммы или кнопки type. Тип type может содержать комбинации констант
MBXXX IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY, IDYES. virtual void PaintTDC dc, BOOL erase, TRect rect - public Вызывается базовыми классами при реагированииотклике на сообщение WMPAINT. Paint вызывается с помощью EvPaint и автоматически запрашивается системой Windows для повторного вывода содержимого окна. dc является контекстом отображения рисования, передаваемым
функциям рисования тек ста и графического вывода. Заданная ссылка на структуру TRect представляет собой ограничивающий прямоугольник области, требующей перерисовки. erase показывает, нужно ли стирать фон. 10.5. Класс TDC Является корневым классом для вспомогательных классов контекстов устройств GDI. Класс TDC содержит 8 член-данных и 149 член-функций, из которых в данном пособии используются 10.5.1. Член-функции inline BOOL Ellipseint x1, int y1, int x2, int y2 public inline
BOOL Ellipseconst TPoint p1, const TPoint p2 Рисует и заполняет эллипс в данном контексте, используя выбранные объекты - перо и кисть. Центр эллипса - центр ограничивающего прямоугольника. Возвращает TRUE, если вызов успешный, иначе - FALSE. inline BOOL Rectangleint x1, int y1, int x2, int y2 public inline BOOL Rectangleconst TPoint point, const TSize size inline
BOOL Rectangleconst TRect rect Рисует и заполняет прямоугольник заданного размера в данном контексте с использованием текущего пера и кисти. Возвращает TRUE при успешном завершении и FALSE в противном случае. void SelectObjectconst TPen pen public Выбирает заданное перо в заданном контексте устройства. Выбранный ранее объект сохраняется в соответствующем элементе данных. inline virtual
TColor SetTextColorTColor color public Устанавливает текущий цвет текста в данном контексте в заданное значение color. Цвет текста определяет цвет, используемый в TDCTextOut. inline virtual BOOL TextOutint x, int y, const char far string, int count-1 public inline virtual BOOL TextOutconst TPoint point, const char far string, int count-1 Рисует до count символов заданной, заканчивающейся нулем, строки string в данном контексте устройства.
Если count-1по умолчнию, рисуется вся строка. Аргументы x,y задают логические координаты опорной точки, которая используется для выравнивания первого символа. 10.6. Класс TScrollBar Объекты типа TScrollBar представляют самостоятельные вертикальные и горизонтальные линейки прокрутки. Большинство член-функций TScrollBar управляют позицией и диапазоном перемещения бегунка линейки прокрутки. Класс TScrollBar содержит 2 член-данных и 18 член-функций, из которых в даном пособии
используются 10.6.1. Член-функции TScrollBarTWindow parent, int id, int x, int y, int w, int h, BOOL isHScrollBar, TModule module0 public Создает и инициализирует объект типа TScrollBar в заданном окне с идентификатором id, в позиции x,y и размерами w,h. Если isHScrollBar равен TRUE, то создается горизонтальная линейка прокрутки, иначе - вертикальная. inline virtual int GetPosition public Возвращает текущую позицию бегунка линейки прокрутки. inline virtual
void SetRangeint min, int max public Устанавливает линейку прокрутки в диапазоне от min до max. 10.7. Класс TEdit Класс TEdit используется при создании объекта панель редактирования. TEdit является производным от класса TStatic, который в свою очередь порожден от класса TControl. Существует две разновидности панели редактирования - однострочная и многострочная. Являясь интерфейсным элементом, панель редактирования позволяет ввести текст и редактировать его.
Член-функции класса TEdit обрабатывают текст панели редактирования. Класс TEdit содержит 1 член-данное и 52 член-функции, из которых в данном пособии используются TEditTWindow parent, int id, const char far text, int x, int y, int w, int h, UINT textlen, BOOL multilineFALSE, TModule module0 public Конструирует панель редактирования в окне parent, задавая идентификатор панели id, местоположение x,
y и размеры панели w,h, длину вводимого текста textlen. Аргумент multiline задает вид панели редактированияоднострочная или многострочная. BOOL GetLinechar far str, int strSize, int lineNumber - public Получает текстовую строку с номером lineNumber из панели редактирования и возвращает ее в строке str, заканчивающейся нулем. strSize задает количество получаемых символов. int
GetLineLengthint lineNumber public Возвращает количество символов в строке, заданной номером lineNumber. inline int GetNumLines public Возвращает количество строк, введенных в многострочную панель редактирования. Возвращает нуль, если текст отсутствует.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |