Реферат: Borland C++ для Windows - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Borland C++ для Windows

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 335 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

ПРОГРАММИРОВАНИЕ ДЛЯ WINDOWS НА BORLAND C++ 1. Введение Цель данно го пособия - облегчить усвоение программирования для Windows на BORLAND C++ и способствовать распространению библиотеки OWL (Object Windows Library), которая хорошо продумана и использование которой явно вырисовывает достоинства объектно-ориентированного п рограммирования - инкапсуляции , наследования и полиморфизма. Пособие привязано к лекционному курсу “Технология программирования” , требуя знаний изложенных на лекциях основ объектно-ориентированного программирования на C++ и предназначено как руководство к лабораторным работам по этому лекционному курсу. Пособие ориентировано на пошаговую разработку за компьютером несложных Windows-приложений , в процессе которой осуществляется их исследование путем сравнения различных вариантов реализации , изменения параметр ов членов-функций и значений членов-данных используемых классов. В создаваемых Windows-приложениях используется очень незначительная , но базовая часть OWL библиотеки , активное усвоение которой способствует снятию барьера , и , как надеются авторы , вызовет уд овольствие от первого знакомства с завоевавшей мир Windows. 1.1. Ввод , редактирование и запуск Windows-приложения Чтобы ввести исходный текст программы , откомпилировать и увидеть на экране окно Windows-приложения , необходимо выполнить следующие действия : 1) Сделайте двойной щелчок левой клавиши мыши (или нажатие ENTE R) на пиктограмме Borland C++. Появится окно компилятора BC4. 2) Щелчок левой клавиши мыши на элементе меню Project (или переход в строку меню путем нажатия F10, поиск и высвечивание элемента Project с помощью клавиш и . Раскрыть Project с помощью клавиши ENTER). 3) Щелчок мышью на команде New project (или выбрать данный пункт меню с помощью клавиш и и нажать ENTER). В дальнейшем дл я краткости будем говорить , что нужно выполнить команду Project|New 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-F9. 12) Если получены сообщения об ошибках , то исправьте их и проведите компиляцию заново . Если ошибки отсутствуют , то на экране появится окно Вашего Windows-приложения . Осуществите диалог с приложением , используя мышь. 1.2. Основные приемы редактирования текс та в интегрированной среде BORLAND C++ 1.2.1. Копирование и удаление части текста в окне редактирования Для копирования текста из одной его части в другую выполняются следующие действия : 1) Выделить копируемый текст : а ) Подвести курсор к началу копируем ого текста. б ) Нажать и удерживать клавишу Shift. в ) Используя клавиши управления курсором , выделить текст. г ) Отпустить Shift. 2) Занести выделенный текст в буфер обмена (Clipboard) путем одновременного нажатия Ctrl и Ins или выполнения команды Edit|Co py. 3) Перевести курсор к месту вставки текста. 4) Перенести текст из буфера в редактор путем одновременного нажатия Shift и Ins или выполнения Edit|Paste. 1.2.2. Копирование содержимого ранее созданного cpp-файла в окно редактирования Для копирования в ыполните следующие действия : 1) Выполните команду File|Open. 2) В появившемся диалоговом окне выберите требуемый файл и нажмите OK. Откроется окно с содержимым указанного файла. 3) С помощью вышеописанных действий выделите требуемый фрагмент текста или вып олните Edit|Select All для выделения всего текста в окне редактирования. 4) Выполните Edit|Copy или нажмите Ctrl-Ins для копирования выделенного текста в буфер обмена. 5) Если открытый файл больше не нужен , закройте окно . Это делается двойным щелчком левой кнопки мыши на кнопке системного меню окна . Можно сделать один щелчок мыши и в появившемся меню выбрать Close. 6) Выполните Edit|Paste или нажмите Shift-Ins для вставки текста из буфера в окно редактирования. 2. Создание простейшего приложения Для усвое ния работы с компилятором BORLAND C++ создадим несколько вариантов простейшего Windows-приложения , которое создает окно с заголовком . Заголовок окна содержит надпись “ Hello, Windows !” или “ Hello, Hello !” . Окно также содержит кнопки минимизации и максими з ации , а также системное меню приложения. 2.1. Создание объекта приложения внутри функции OwlMain При написании программы будем работать с классом TApplication и фу нкцией OwlMain. В данном варианте программы объект класса TApplication создается внутри функции OwlMain. 2.1.1. Исходный текст приложения #include int OwlMain(int, char* []) TApplication app("Hello, Windows !"); return app.Run(); 2.1.2. Пояснения к программе Заголовочный файл owl\ applicat.h содержит описание класса TApplication (см . Раздел 10.2.). app - объект класса TApplication. При создании этого объекта используется неявный вызов конструктора , устанавливающего текст заголовка прикладного окна “ Hello, Windows !”. app.Run() - вызов члена-функции класса TApplication для объекта app. Функция TApplication::Run() запускает приложение. 2.1.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 int OwlMain(int, char* []) TApplication *app; app=new 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 int OwlMain(int, char* []) return TApplication(" Hello Windows !").Run(); 2.3.2. Задание Создать приложение и убедиться в его работоспособности. 3. Использование класса TFrameWindow для создания главного окна Класс TFrameWindow является производным от TWindow и обеспечивает функционирование главного окна приложения. 3.1. Создание объекта главного окна В нижеследующем приложении член-функция InitMainWindow класса TApplication с помощью оператора new и конструктора TFrameWindow создает объект - главное окно приложения . Адрес объекта помещается в переменную MainWindow объекта приложения . 3.1.1. Исходный текст программы #include #include class TMyApp: public TApplication public: TMyApp():TApplication("Hello Windows !") ; void InitMainWindow() MainWindow=new TFrameWindow(0,"Hello, hello!!"); ; int OwlMain(int, char* []) return TMyApp().Run(); 3.1.2. Пояснения к п рограмме Включаемый заголовочный файл owl\ framewin.h содержит описание класса TFrameWindow (см . раздел 10.3.). Поскольку в данном варианте приложения мы хотим создать свое собственное главное окно в обход стандартных методов класса TApplication, мы должны переопределить виртуальную функцию InitMainWindow класса TApplication. Для этого мы выводим новый , уже наш , класс TMyApp, как производный от класса TApplication и описываем в нем виртуальную функцию InitMainWindow. Тело конструктора TMyApp пустое , т.е . . Работа этого конструктора сводится только к вызову конструктора базового класса TApplication, содержащего единственный параметр - текст заголовка главного окна приложения (см . раздел 10.2.2). Тело функции InitMainWindow класса TMyApp содержит оператор ne w, который совместно с конструктором TFrameWindow создает экземпляр объекта-окна с новым заголовком “ Hello, Hello !” . Адрес объекта присваивается переменной MainWindow (см . раздел 10.2.1.), унаследованной от TApplication. 3.1.3. Задание 1) Создать и выпо лнить приложение . Обратите внимание ! Вместо заголовка “ Hello, Windows !” , заданного конструктором TMyApp, окно имеет заголовок “ Hello, Hello !” . Это результат работы переопределенной виртуальной функции TMyApp::InitMainWindow, которая была вызвана после к о нструктора и изменила текст заголовка на “ 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() MainWindow=new TFrameWindow(0," Hello, he llo!!"); MainWindow->Attr.X=5; MainWindow->Attr.Y=15; MainWindow->Attr.W=200; MainWindow->Attr.H=100; Вариант B: void InitMainWindow() MainWindow=new TFrameWindow(0," Hello, hello!!"); MainWindow->Attr.X=GetSystemMetrics(SM_CXSCREEN)/8 ; MainWindow->Attr.Y=GetSystemMetrics(SM_CYSCREEN)/8; MainWindow->Attr.W=MainWindow->Attr.X*6; MainWindow->Attr.H=MainWindow->Attr.Y*6; 3.2.2. Пояснение к вариантам использования функции InitMainWindow Указатель MainWindow указывает на главное окно приложения , созданное оператором new и конструктором TFrameWindow. Указатель используется для ссылки на элементы структуры Attr главного окна приложения. X,Y задают положение левого верхнего угла окна на экране. W и H задают ширину и высоту окна в пик селах. Функция GetSystemMetrics возвращает значения различных характеристик системы , таких как высота (SM_CYSCREEN) и ширина (SM_CXSCREEN) экрана. 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-приложения необходимо обеспечить обработку сообщений , поступающих в программу . Если же этого не сделать , то любые действия пользователя над окном программы будут проигнорированы и Вы не сможете работать с меню и т.д . Пусть , например , в окне программы была нажата левая кнопка м ыши . В этом случае программа получит сообщение WM_LBUTTONDOWN. Все сообщения Windows, передаваемые программе , представляют собой целочисленные константы с именами , начинающимися с WM_ (Windows Message, т.е . сообщение Windows). В программах , написанных с пр именением OWL, механизм получения информации о произошедших в системе событиях скрыт от программиста и обеспечивается функциями класса TApplication. Программисту требуется только описать свои функции , которые будут автоматически вызываться в ответ на приш е дшее в программу сообщение. Для того , чтобы создать класс , функции которого будут откликаться на пришедшие из системы сообщения , необходимо : 1) Определить таблицу отклика для класса . Для этого в определение класса вставляется строка DECLARE_RESPONSE_TABLE( <имя класса >); <имя класса > заменяется на имя того класса , для которого определяется таблица отклика . DECLARE_RESPONSE_TABLE - это макрос OWL, который вводит в Ваш класс некоторые дополнительные элементы , позволяющие системе автоматически вызывать функции- члены класса в ответ на пришедшее сообщение . Таблица отклика содержит имена сообщений Windows и адреса функций , вызываемых при получении соответствующих сообщений. 2) После объявления класса в текст программы вставляется другой макрос DEFINE_RESPONSE_TABLE n(<имя класса >[,класс ][,класс ]...); <имя класса > - все то же имя класса , для которого Вы строите таблицу отклика . Через запятую Вы должны перечислить имена базовых классов , от которых производится наследование . Число n следует заменить на число базовых кла ссов , которые тоже содержат таблицы отклика. Сразу же за текстом макроса необходимо поместить элементы таблицы реакции , разделенные запятыми . Так , если Вы хотите обрабатывать сообщения о нажатиях правой и левой клавиш мыши в окне Вашего приложения , то в та блицу помещаются следующие элементы : EV_WM_LBUTTONDOWN, EV_WM_RBUTTONDOWN, которые говорят OWL о том , что Вы хотите обрабатывать сообщения о нажатиях левой и правой клавиш соответственно . Скажем EV_WM_LBUTTONDOWN расшифровывается , как Event (событие ), Wind ows Message: Left Button Down. После описания всех элементов таблицы реакции запишите строку END_RESPONSE_TABLE; 3) Определите в Вашем классе функции , которые будут получать управление , если в системе произойдет желаемое событие . В нашем примере - это две функции void EvLButtonDown(UINT,TPoint&), void EvRButtonDown(UINT,TPoint&) Первый аргумент определяет клавиши-модификаторы , которые были нажаты на клавиатуре одновременно с нажатием одной из кнопок мыши . Второй аргумент определяет координаты точки окна , в которой было произведено нажатие . В тело этих функций можно вставить код , реализующий некоторые действия при получении соответствующих сообщений Windows. При написании функций отклика необходимо помнить следующее : 1) Функция отклика вызывается OWL автомат ически и только тогда , когда произойдет заданное событие . К примеру , функция EvLButtonDown вызывается только тогда , когда пользователь нажмет левую кнопку мыши внутри окна приложения. 2) В приложении может быть несколько классов , имеющих свои таблицы реакц ии . Класс реагирует только на предназначенные для него сообщения системы. 3) Имена и параметры функций , отвечающих на системные сообщения , предопределены . Это означает , что на каждое сообщение отвечает строго определенная функция с определенным именем . То есть , если Вы хотите обрабатывать нажатия левой кнопки мыши , то в классе необходимо определить функцию с именем EvLButtonDown. 4.1. Отклик на нажатие левой и правой клавиш мыши Нижеследующее Windows-приложение создает прикладное окно и ожидает нажатия п равой или левой кнопки мыши . При нажатии любой из этих клавиш внутри окна появляется панель сообщения , указывающая , какая клавиша была нажата . После нажатия на кнопку OK панель исчезает , а приложение будет ждать нового нажатия на клавиши мыши. 4.1.1 Исхо днный текст приложения. #include #include class TMyWindow : public TFrameWindow public: TMyWindow(char *title):TFrameWindow(0,title) protected: void EvLButtonDown(UINT,TPoint&); void EvRButtonDown(UINT,TPoi nt&); DECLARE_RESPONSE_TABLE(TMyWindow); ; DEFINE_RESPONSE_TABLE1(TMyWindow,TFrameWindow) EV_WM_LBUTTONDOWN, EV_WM_RBUTTONDOWN, END_RESPONSE_TABLE; void TMyWindow::EvLButtonDown(UINT,TPoint&) MessageBox("You have pressed the LEFT mouse button","Mes sage dispatched",MB_OK | MB_ICONINFORMATION); void TMyWindow::EvRButtonDown(UINT,TPoint&) MessageBox("You have pressed the RIGHT mouse button","Message dispatched",MB_OK|MB_ICONINFORMATION); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() EnableCtl3d(); MainWindow=new TMyWindow("Click Me!!!!!"); ; int OwlMain(int, char *[]) TMyApp app; return app.Run(); 4.1.2. Пояснения к программе Класс TMyWin описывает прикладное окн о , как главное окно приложения и поэтому порождается от класса TFrameWindow. Кроме описания конструктора класс содержит объявления стандартных функций отклика EvLButtonDown и EvRButtonDown, а так же объявление таблицы отклика для класса. Вслед за описанием класса располагается описание таблицы отклика на сообщения от левой и правой клавиш мыши. Функции отклика описаны вне класса . Тело каждой из этих функций содержит единственный вызов функции MessageBox, которую TMyWin наследует от TFrameWindow. Аргументы ф ункции MessageBox задают текст сообщения , заголовок панели и стиль окна сообщения . Стили MB_OK и MB_ICONINFORMATION дают нам диалоговую панель с кнопкой OK и пиктограммой “ Information” : Тело функции TMyApp::InitMainWindow содержит вызов функции EnableCtl3d(), которая разрешает приложению использовать трехмерные диалоги . Вы можете закомментировать вызов этой функции и сравнить полученные результаты. 4.1.3. Задание 1) Создать и выполнить приложение . Поэкспериментировать с приложением , нажимая кнопки мыши в его окне. 2) Измените аргументы в вызовах функции MessageBox. Убедитесь в изменении внешнего вида панели сообщения. 3) Закомментируйте строку EV_VM_RBUTTONDOWN в т аблице элементов отклика . Объясните изменившееся поведение приложения. 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 #include #include class TMyWindow : public TFrameWindow public: TMyWindow(char *title):TFrameWindow(0,title) protected: void EvLButtonDown(UINT,TPoint&); DECLARE_RESPONSE_TABLE(TMyWindow); ; DEFINE_RESPONSE_TABLE1(TMyWindow,TFrameWindow) EV_WM_LBUTTONDOWN, END_RESPONSE_TABLE; void TMyWindow::EvLButtonDown(UINT,TPoint &point) TClientDC dc(HWindow); T Color forecolor(TColor::LtCyan); dc.SetTextColor(forecolor); char buf[20]; wsprintf(buf,"[%d,%d]",point.x,point.y); dc.TextOut(point.x,point.y,buf); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() MainWindow=new TMyWindow("Use the left mouse button"); ; int OwlMain(int, char *[]) TMyApp app; return app.Run(); 5.1.2. Пояснение к программе Заголовочный файл owl\ dc.h содержит описание сласса TDC и его производных классов. Класс TMyWin п орождается от TFrameWindow и описывает главное окно приложения . Кроме описания конструктора класс содержит объявление функции отклика EvLButtonDown на сообщение , поступающее при нажатии левой клавиши мыши , описание которой представляет наибольший интерес. При описании EvLButtonDown указано имя только второго параметра , так как нам необходимо знать только координаты указателя мыши в момент нажатия ее левой кнопки. В начале тела функции создается объект контекста рабочей области главного окна приложения (Clie nt area DC). В дальнейшем объект используется для ссылки на функцию установки цвета текста SetTextColor и функцию вывода текста в окно TextOut. Данные функции являются членами класса TClientDC и унаследованы им от класса TDC (см . раздел 10.5.1). Объект for ecolor класса 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 forecolor(TColor::LtBlue) на TColor forecolor(random(255), random(255), random (255)). Для использования random в начало программы вставьте #include 5.1.4. Немного английского TDC - Type Device Context - тип контекста устройства a device - устройство a color - цвет to set - устанавливать SetTextColor - to Set a Text Col or - установить цвет текста a point - точка 6. Обновление содержимого окна Большим достижением Windows являются перекрывающиеся окна . Работая с системой , Вы можете увидеть на экране несколько окон , наложенных друг на друга . Вы можете выбрать одно из так их окон и сдвинуть его в сторону . В результате на экране появится содержимое окон заднего плана . Но не следует полагать , что Windows сохраняет массив пикселов каждого из окон , чтобы отображать их на экране , наоборот , она поручает приложениям самим восстан а вливать свои окна. Если содержимое окна нуждается в восстановлении , Windows посылает приложению-владельцу окна сообщение WM_PAINT. Если приложение имеет функцию отклика на это сообщение , то функция будет активизирована и перерисует окно , восстановив его вн ешний вид. Итак , корректное Windows-приложение должно осуществлять вывод в окно приложения только через виртуальную функцию Paint, вызываемую при приходе WM_PAINT. Вы можете легко убедиться в сказанном , запустив приложение , представленное в разделе 5.1.1. Поместите над окном данного приложения любое другое прикладное окно и удалите его - рабочая область окна не восстановится . Так и должно быть , поскольку это приложение не имеет функции Paint. Обратите внимание ! Сама функция Paint не является функцией отклик а на сообщение и для нее не надо включать макрос сообщения в таблицу откликов . Paint необходимо только переопределить в классе , производном от TWindow или TFrameWindow. 6.1. Рисование в окне с помощью Paint Нижеследующее приложение выдает в рабочую зону окна голубой прямоугольник с вписанным в него зеленым эллипсом . Вывод осуществляет функция Paint. 6.1.1. Исходный текст приложения #include #include #include class TMyWin : public TFrameWindow public: TP oint pn,pk; TMyWin() : TFrameWindow(0,"The Paint function") pn.x=100; pn.y=50; pk.x=300; pk.y=200; void Paint(TDC&,BOOL,TRect&); ; void TMyWin::Paint(TDC &dc,BOOL,TRect&) TColor color(TColor::LtBlue); TPen pen1(color); dc.SelectObject(pen1); dc.Rectangle(pn,pk); TPen pen2(TColor::LtGreen); dc.SelectObject(pen2); dc.Ellipse(pn,pk); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() MainWindow=new TMyWin(); ; int OwlMain(int, 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.x+=25; pk.y+=15; Поэкспериментируйте с приложением и объясните пов едение прикладного окна. 6.1.4. Немного английского to paint - красить , перекрашивать , рисовать a rectangle - прямоугольник an ellipse - эллипс to select - выбирать SelectObject - to Select an Object - выбрать объект 7. Создание меню Окна почти каждого приложения содержат строку меню , выбрав которое , мы получаем список команд . Любую из этих команд можно выполнить , сделав щелчок на ней левой клавишей мыши . При этом Windows посылает соответствующее сообщение приложению . Если приложение имеет соответствую щ ую функцию отклика , то оно сможет отреагировать на команду меню. В описании таблицы отклика необходимо для каждой команды меню вставить макрос вида EV_COMMAND(MENU_ITEM_ID,<имя функции >), где MENU_ITEM_ID - константный идентификатор пункта меню, <имя функц ии > - имя функции отклика , которая будет активизироваться при выборе пункта меню с заданным идентификатором . В отличие от функций реакции на системные сообщения , функция отклика на команду меню может иметь любое имя. Обратите внимание . Для разработки данно го приложения необходимо создать файл ресурсов с расширением .rc, в котором будет храниться описание ресурса меню программы , и файл с расширением .rh, в котором будут сохранены константные идентификаторы пунктов меню . Нет необходимости создавать данные фа й лы вручную . Для этого мы воспользуемся программой Resource Workshop. 7.1. Создание ресурсов программы с помощью Resource Workshop 1. Запустите компилятор . Для этого активизируйте пиктограмму Borland C ++. 2. Выполните команду Project|New 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. Для подключения файла выполните File|Add to project. В появившейся диалоговой панели в поле File type выберите RH, H header, а в поле File name введите имя своего header-файла (в описании данной лабораторной работы было использовано имя lab3c.rh, которое фигурирует в приведенных ниже листингах . Если Вы введете имя , отличное от него , то Вы должны будете учитывать э то при включении файла в свою программу ). Ответьте Yes на вопрос о необходимости создания файла. 9. Теперь можно приступить к созданию меню нашего приложения . Для эт ого выполните следующее : 1) Выполните команду Resource|New из меню редактора ресурсов. 2) В списке возможных типов ресурсов панели New resource выберите MENU. Убедит есь , что поле Place identifiers in указывает на файл с расширением .rh. Поле Place resource in должно всегда указывать на Ваш rc-файл . Нажмите OK и Workshop приступит к созданию меню. 3) После проделанных шагов Вы должны увидеть следующее : Появившееся окно представляет собой редактор меню . В заголовке Вы видите название созданного меню MENU_1. В правом верхнем углу окна располагается поле TEST MENU, которое позволяет проверить работу создаваемого меню . Строка созданного меню содержит название раздела меню Pop-up (что означает всплывающий ). При щелчке мышью на данном имени появляются пункты меню. 4) Нам нужно получить пункт меню с именем Size. Для этого щелкните мышью по имени Pop-up в поле тестирования меню , либо на том же имени в описании меню в правом нижнем углу окна . Далее , перейдите в поле Item text и переименуйте пункт меню из Pop-up в Size. Нажмите Enter и убедитесь , что поле тестирования отобразило переименова н ный пункт меню. 5) Нам требуется создать команду меню Small. Для этого в поле тестирования или в окне описания меню выберите пункт Item. В поле тестирования это делается выбором пункта Size и выбором в появившемся меню поля Item. 6) Убедитесь , что поле Ite m text действительно содержит текст “ Item” . Перейдите в это поле и измените текст на “ Small” . Проверьте , что в создаваемом меню отображается пункт Small. 7) В поле Item Id редактора меню введите имя константного идентификатора , который будет передаваться п рограмме при выборе пункта меню Small. Пусть это будет CM_SIZE_SMALL (CM означает Command, команда ). 8) Создадим теперь пункт меню Large. Для начала проверьте , что в окне описания меню выделен пункт меню Small, т . к . создаваемый нами новый пункт меню долже н появиться под ним . Затем выполните команду меню редактора Menu|New menu item. Результатом работы команды будет новый пункт меню , который будет расположен под командой Small. С помощью описанных выше действий дайте пункту меню имя Large и впишите идентиф и катор команды CM_SIZE_LARGE. Обратите внимание ! Необходимо выбирать New menu item, а не New menu pop-up, который создает не команду , а пункт меню , который сам содержит свои команды и при активизации открывает вложенное в него меню. 9) Проверьте , что показы вает поле тестирования созданного Вами меню. На этом создание меню программы завершено . Закройте Workshop и ответьте Yes на предложение программы сохранить результат Вашей работы. Необходимо также отметить , что в header-файл , имя которого Вы указали в нача ле построения проекта , будут помещены имена константных идентификаторов пунктов меню CM_SIZE_SMALL и CM_SIZE_LARGE, а также идентификатор меню MENU_1, на которые Вы будете ссылаться при написании программы. 7.2. Программирование с использованием меню Ниж еследующее приложение использует команды Small и Large для управления выводом на экран фигур разного размера. Прежде , чем приводить текст программы покажем , что же мы получили в результате манипуляций над Resource Workshop. 7.2.1. Листинг rh-файла /************************************************************************** lab3с .rh produced by Borland Resource Workshop ****************************************** ********************************/ #define MENU_1 1 #define CM_SIZE_SMALL 102 #define CM_SIZE_LARGE 101 7.2.2. Листинг rc-файла /************************************************************************** LAB3С .RC produced by Borland Resource Workshop **************************************************************************/ #include "lab3с .rh" MENU_1 MENU POPUP "Size" MENUITEM "Small", CM_SIZE_SMALL MENUITEM "Large", CM_SIZE_LARGE Вообще rc-файл содержит в себе текстовое описание рес урсов и , как может показаться , легче написать его с помощью текстового редактора . Это верно только для простых файлов ресурсов . Для написания же больших программ лучше воспользоваться возможностями Resource Workshop. 7.2.3. Исходный текст приложения #inc lude #include #include #pragma hdrstop #include "lab3а .rh" class TMyWin : public TFrameWindow public: TPoint pn,pk; TMyWin() : TFrameWindow(0,"The Paint function") pn.x=100; pn.y=50; pk.x=300; pk.y=200; protected: void Paint(TDC&,BOOL,TRect&); void CmLarge(); void CmSmall(); DECLARE_RESPONSE_TABLE(TMyWin); ; DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow) EV_COMMAND(CM_SIZE_LARGE,CmLarge), EV_COMMAND(CM_SIZE_SMALL,CmSmall), END_RESPONSE_ TABLE; void TMyWin::Paint(TDC &dc,BOOL,TRect&) TColor color(TColor::LtBlue); TPen pen1(color); dc.SelectObject(pen1); dc.Rectangle(pn,pk); TPen pen2(TColor::LtGreen); dc.SelectObject(pen2); dc.Ellipse(pn,pk); void TMyWin::CmLarge() pk.x=500; pk.y=400; Invalidate(); void TMyWin::CmSmall() pk.x=150; pk.y=100; Invalidate(); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() MainWindow=new TMyWin(); MainWindow->AssignMenu(MENU_1); ; int OwlMain(int, char *[]) TMyApp app; return app.Run(); 7.2.4. Пояснения к программе Класс TMyWin содержит объявление членов-функций Paint, CmLarge, CmSmall. Описание таблицы реакции показывает , что в отве т на выбор команды меню Small с идентификатором CM_SIZE_SMALL будет вызываться функция CmSmall. Аналогично для команды Large. При ее выборе будет вызвана CmLarge. Еще раз подчеркнем , что для команд меню нет стандартных функций отклика , как это было с сист е мными сообщениями Windows, т . е . в макросе Вы можете указать имя любой функции отклика , главное , чтобы она не принимала и не возвращала значений. Описание функции Paint целиком совпадает с ее текстом в предыдущем разделе. Функции отклика на сообщения меню изменяют координаты правого нижнего угла прямоугольника и вызывают инкапсулированную в TFrameWindow функцию Invalidate, которая заставляет Windows обновить окно приложения . Вызов данной функции говорит системе , что окно требует обновления и та посылает пр и ложению сообщение WM_PAINT. 7.3. Задание 1) Создать и выполнить приложение. 2) Удалите вызов функции Invalidate в одной из функций отклика . Объясните изменения в логике работы приложения. 3) Создайте дополнительное меню Color с командами Black и Red, ко торые должны изменять цвет выводимых на экране фигур. 8. Управляющие компоненты Windows Рассмотрим несколько управляющих компонент Windows, облегчающих диалог с приложением. Первый компонент - это линейка прокрутки . Она может быть расположена в окне при ложения и представляет собой вертикальную или горизонтальную полосу с ползунком . Ползунок можно передвинуть , зацепив его указателем мыши и перетащив вдоль полосы прокрутки. Линейка создается как объект класса TScrollBar в конструкторе окна приложения . Конструктору TScrollBar передаются координаты и размеры создаваемой линейки , а так же тип линейки - горизонтальная или вертикальная. Покажем , как использовать в приложени и вертикальную линейку прокрутки. Во время перемещения ползунка вертикальная линейка генерирует уведомляющие сообщения WM_VSCROLL. Вы можете перехватить и обработать эти сообщения , объявив в классе-владельце такой линейки функцию отклика EvVScroll и дополн ив таблицу отклика класса макросом EV_WM_VSCROLL. Функция будет вызываться при изменении положения ползунка на линейке. При создании линейки присвойте адрес сконструированного объекта указателю . В результате Вы получите доступ к разнообразному набору функц ий объекта . К примеру , появится возможность позиционировать ползунок из программы , получать позицию ползунка и изменять масштаб линейки ( по умолчанию позиция ползунка на линейке изменяется от 0 до 100). Все сказанное выше справедливо и для горизонтальной линейки прокрутки , но для реакции на ее сообщения требуется функция EvHScroll и макрос EV_WM_HSCROLL. Теперь уделим внимание другому компоненту визуального интерфейса Windows - кнопке. Кнопка может быть расположена в окне приложения и представляет собой пр ямоугольник с надписью . Кнопка реагирует на щелчки мышью выдачей уведомляющего сообщения . Она создается в конструкторе окна приложения , как объект класса TButton. Конструктору TButton передается адрес объекта-окна , в котором Вы хотите разместить кнопку , те кст надписи на кнопке , ее координаты и размер . Конструктору также передается константный идентификатор кнопки . Данный идентификатор совпадает с идентификатором уведомляющего сообщения , генерируемого кнопкой при нажатии. Реакция на нажатия кнопки реализуетс я аналогично реакции на выбор команды меню : Вы описываете функцию реакции (имя функции произвольное ) на нажатия кнопки и помещаете в таблицу реакции макрос EV_COMMAND(BUTTON_ID,UserName) с идентификатором кнопки и именем функции отклика. Приложение может и меть несколько кнопок с различными идентификаторами и для каждой кнопки нужно создать свою функцию отклика и добавить элемент в таблицу реакций. Если Вы хотите реагировать только на нажатия кнопки , никак не изменяя ее характеристик , то присваивать указател ю адрес созданного объекта-кнопки не требуется. 8.1. Изменение размера выводимой графики с помощью линейки прокрутки В нижеследующем приложении в прикладном окне выдается голубой прямоугольник с вписанным в него эллипсом . В окне создается вертикальная л инейка прокрутки . Перемещая ползунок линейки , можно плавно изменять размеры выводимых геометрических фигур в некотором фиксированном диапазоне. 8.1.1. Исходный текст программы #include #include #include #include class TMyWin : public TFrameWindow public: TPoint pn,pk; TScrollBar *sb; TMyWin() : TFrameWindow(0,"The Paint function") sb=new TScrollBar(this,1,350,100,20,125,FALSE); pn.x=100; pn.y=40; pk.x=300; pk.y=pn.y; pro tected: void Paint(TDC&,BOOL,TRect&); void EvVScroll(UINT, UINT, HWND); DECLARE_RESPONSE_TABLE(TMyWin); ; DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow) EV_WM_VSCROLL, END_RESPONSE_TABLE; void TMyWin::Paint(TDC &dc,BOOL,TRect&) TColor color(TColor::L tBlue); TPen pen1(color); dc.SelectObject(pen1); dc.Rectangle(pn,pk); TPen pen2(TColor::LtGreen); dc.SelectObject(pen2); dc.Ellipse(pn,pk); void TMyWin::EvVScroll(UINT scrollcode, UINT thumbPos, HWND hwnd) TFrameWindow::EvVScroll(scrollcode,thumbPos,hwnd); InvalidateRect(TRect(pn,pk)); pk.y=pn.y+sb->GetPosition()*2; UpdateWindow(); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() MainWindow=new TMyW in(); ; int OwlMain(int, char *[]) TMyApp app; return app.Run(); 8.1.2. Пояснения к программе Заголовочный файл owl\ scrollba.h содержит описание класса TScrollBar и его членов-функций . Описание класса TMyWin содержит объявления точек (объектов класса TPoint) для левого верхнего и правого нижнего углов прямоугольника . В классе дополнительно объявлен объект класса TScrollBar, представляющий собой вертикальную линейку прокрутки . TMyWin содержит также функцию отклика EvVScroll на сообщения от лине й ки прокрутки и переопределенную функцию Paint. В теле конструктора TMyWin создается линейка прокрутки и задаются начальные значения координат двух углов прямоугольника. Описание таблицы реакций содержит элемент EV_WM_VSCROLL. Функция EvVScroll вызывает одн оименную функцию базового класса для обеспечения полной обработки поступающих от скроллера сообщений . Затем функция требует перерисовать часть рабочей зоны окна для вывода геометрических фигур с измененными размерами . Для получения положения ползунка на л и нейке прокрутки используется функция GetPosition, которая возвращает число в диапазоне от 0 до 100. Вызов функции UpdateWindow вызывает немедленное обновление окна приложения , посылая окну WM_PAINT в обход системной очереди сообщений. 8.1.3. Задание 1) С оздать исследовать работу приложения. 2) Изменить вертикальную линейку прокрутки на горизонтальную. 3) Исследовать работу приложения , закомментировав вызов UpdateWindow в теле EvVScroll. 4) Исследовать работу приложения , удалив вызов функции InvalidateRect. 5) Измените таблицу реакции , удалив в ней EV_WM_VSCROLL. Объясните поведение приложения. 8.2. Изменение цвета выводимой графики с помощью кнопок В приводимом здесь тексте Windows-приложения цвет выводимых на экран геометрических фигур изменяется при на жатии одной из двух кнопок , размещенных в окне приложения. 8.2.1. Исходный текст программы. #include #include #include #include #define CM_BUTTON1 100 #define CM_BUTTON2 200 class TMyWin : public TFrameWindow public: TPoint pn,pk; int nColor; TMyWin() : TFrameWindow(0,"The Paint function") new TButton(this,CM_BUTTON1,"Palette 1",350,50,80,30); new TButton(this,CM_BUTTON2,"Palette 2",350,100,80,30); pn.x=100; pn.y= 50; pk.x=300; pk.y=200; nColor=1; void Paint(TDC&,BOOL,TRect&); void CmButton1() nColor=1; Invalidate(); UpdateWindow(); void CmButton2() nColor=2; Invalidate(); UpdateWindow(); DECLARE_RESPONSE_TABLE(TMyWin); ; DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow) EV_COMMAND(CM_BUTTON1,CmButton1), EV_COMMAND(CM_BUTTON2,CmButton2), END_RESPONSE_TABLE; void TMyWin::Paint(TDC &dc,BOOL,TRect&) TColor color(nColor==1 ? TColor::LtBlue : TColor::LtYellow); TPen pen1(color ); dc.SelectObject(pen1); dc.Rectangle(pn,pk); TPen pen2(nColor==1 ? TColor::Black : TColor::LtRed); dc.SelectObject(pen2); dc.Ellipse(pn,pk); class TMyApp : public TApplication public: TMyApp():TApplication() void InitMainWindow() Ma inWindow=new TMyWin(); ; int OwlMain(int, char *[]) TMyApp app; return app.Run(); 8.2.2. Пояснения к программе Заголовочный файл owl\ button.h содержит описание класса TButton и его членов. В начало программы помещены директивы #define CM_BUTTON1 100 #define CM_BUTTON2 200, определяющие константные идентификаторы сообщений , которые будут посылаться программе кнопками в ответ на щелчки мышью . CM_BUTTON1 генерируется первой кнопкой , CM_BUTTON2 - второй . Можно выбрать другие имена с ообщений , отличные от CM_BUTTONn и значения констант , отличные от приведенных в программе , но для того , чтобы программа правильно реагировала на сообщения кнопок , необходимо правильно заполнить таблицу реакций , передав в качестве аргументов макросам табли ц ы имена констант и имена функций отклика. Конструктор прикладного окна создает с помощью оператора new две кнопки , передавая им в качестве аргументов идентификатор окна , идентификатор уведомляющего сообщения , которое будет генерировать кнопка , текст надпис и на кнопке и координаты размещения кнопки в окне приложения. Обратите внимание на то , что адреса созданных объектов-кнопок не присваиваются указателям . Этого не требуется делать потому , что в программе нет необходимости ссылаться на эти объекты. Функции о тклика на сообщения кнопок CmButton1 и CmButton2 изменяют признак цвета геометрических фигур и объявляют о необходимости перерисовки окна приложения. Таблица отклика конструируется так же , как это делалось при использовании меню . Она содержит идентификатор ы уведомляющих сообщений , приходящих от кнопок и имена функций класса прикладного окна , отвечающих за обработку данных сообщений. 8.2.3. Задание. 1) Создать приложение и исследовать его работу. 2) Изменить аргументы конструктора (текст кнопки , координаты , размер и т . д .) TButton одной из кнопок. 3) Исследуйте работу приложения , закомментировав вызов Invalidate в одной из функций отклика. 9. Ввод и редактирование текста Данная тема будет посвящена панелям ввода и редактирования - одной из популярнейших к омпонент Windows. Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста. Панель редактирования создается , как объект класса TEdit и может быть размещена в любом пр икладном окне . Данная панель представляет собой стандартный текстовый редактор Windows, в котором доступны все операции редактирования текста - вставка и замена текста , удаление символов и работа с буфером обмена Windows. Различают два типа панелей редакти рования - однострочная и многострочная. Создание панелей редактирования и размещение их в окне приложения осуществляются аналогично созданию кнопок и полос прокрутки . Объект создается из класса TEdit. Конструктору объекта передается идентификатор окна , в к отором будет размещена панель , константный идентификатор панели , текст , который будет помещен в редактор и координаты панели в окне приложения . Дополнительно конструктору передается стиль панели редактирования : TRUE, если создается многострочная панель , F A LSE, если панель - однострочная (см раздел 10.7). 9.1. Пример использования однострочного текстового редактора для ввода и редактирования текста Приведенное в этом разделе приложение создает однострочный текстовый редактор и выводит копии этой строки в окне приложения. 9.1.1. Исходный текст приложения #include #include #include #include #include #define ID_ONELINER 150 #define CM_BUTTON 160 #define TEXTLEN 10 class TMyWin: public TFrameWindow TEdit *oneLiner; char txt[TEXTLEN]; public: TMyWin(): TFrameWindow(0,"the TEdit object") - oneLiner=new TEdit(this,ID_ONELINER,"Input one line",10,10,100,30,TEXTLEN,FALSE); - new TButton(this,CM_BUTTON,"Update",10,100,70,25); - txt[0]='\0'; protected: void CmButton(); void Paint(TDC&,BOOL,TRect&); DECLARE_RESPONSE_TABLE(TMyWin); ; DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow) EV_COMMAND(CM_BUTTON,CmButton), END_RESPONSE_TABLE; void TMyWin::CmButton() one Liner->GetLine(txt,TEXTLEN,0); Invalidate(); //UpdateWindow(); void TMyWin::Paint(TDC& dc,BOOL,TRect&) - for (int i=1;i<=2;i++) - dc.TextOut(150,50+i*20,txt); class TMyApp:public TApplication public: TMyApp(): TApplication() ; void InitMainWindow() - - MainWindow=new TMyWin(); - ; int OwlMain(int,char *[]) return TMyApp().Run(); 9.1.2. Пояснения к программе Заголовочный файл owl\ edit.h содержит описание класса TEdit и его членов-функций. Класс TMyWin о писывает прикладное окно . В классе определен указатель на объект TEdit, используемый для ссылки на член-функции элемента редактирования. Конструктор TMyWin создает однострочную панель редактирования . Первый аргумент конструктора TEdit равен this. Это привя зывает панель редактирования к прикладному окну . Конструктору также передается текст , который будет изначально размещен в панели редактирования. Дополнительно в окне приложения размещается кнопка , при нажатии которой текст из буфера редактора переписываетс я в строку с именем txt. Для этого вызывается GetLine. Первый параметр функции - указатель на строку , в которую требуется переписать текст строки из редактора , второй аргумент - длина переписываемой строки , третий аргумент - номер копируемой из элемента р е дактирования строки . Функция отклика на нажатия кнопки объявляет о необходимости перерисовки главного окна . Это приводит к тому , что Paint выводит текст , скопированный в txt в окно приложения . После запуска приложения Вы можете изменить текст в элементе р е дактирования , а затем нажать на кнопку . В результате все изменения в редакторе будут отображены в окне приложения. 9.1.3. Задание 1) Создайте и исследуйте приложение. 2) Поместите в окно приложения еще одну панель редактирования . После нажатия на кнопку приложение должно выводить в свое окно строки из первой и второй панели редактирования. 9.2. Использование многострочного текстового редактора для ввода и редактирования текста. Нижеприведенное Windows-приложение использует многострочную панель редактир ования текста. 9.2.1. Исходный текст программы #include #include #include #include #include #define ID_MULTILINER 150 #define CM_BUTTON 160 class TMyWin: public TFrameWindow TEdit *multiLiner; char *txt; public: TMyWin(): TFrameWindow(0,"the TEdit object") - multiLiner=new TEdit(this,ID_MULTILINER,"Input lines",10,10,200,100,0,TRUE); - new TButton(this,CM_BUTTON,"Update",10,130,70,25); protected: void CmButto n(); void Paint(TDC&,BOOL,TRect&); DECLARE_RESPONSE_TABLE(TMyWin); ; DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow) EV_COMMAND(CM_BUTTON,CmButton), END_RESPONSE_TABLE; void TMyWin::CmButton() Invalidate(); //UpdateWindow(); void TMyWin::Paint(TDC& dc,BOOL,TRect&) - for (int i=1;i<=multiLiner->GetNumLines();i++) - - int lineLength= multiLiner->GetLineLength(i-1); - txt= new char[lineLength]; - multiLiner->GetLine(txt,lineLength,i-1); - dc.TextOut(250,50+i*20 ,txt); - delete txt; - class TMyApp:public TApplication public: TMyApp(): TApplication() ; void InitMainWindow() - - MainWindow=new TMyWin(); - ; int OwlMain(int,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, а затем создает и высвечивает на экране главное окно путем вызова соответственно TWindow::Create и TWindow::Show. virtual int Run(); - - - public Инициализирует экземпляр приложения , вызывая InitA pplication для первого экземпляра и InitInstance для всех остальных . Если инициализация прошла успешно , Run вызывает MessageLoop и запускает приложение. virtual void InitMainWindow(); - - protected По умолчанию InitMainWindow создает обобщенный объект - главное окно с именем приложения в качестве заголовка . Для создания требуемого главного окна необходимо переопределить InitMainWindow, не забыв сделать ссылку в MainWindow на созданное главное окно (класса TFrameWindow). TAplication( const far*name=0); - - public Этот конструктор создает объект класса TApplication. name - указатель на имя приложения. Этот конструктор используется в теле функции OwlMain. 10.3. Класс TFrameWindow Производный от TWindow. Управляет поведением главного окна посредством уп равления клавиатурой и обработкой команд меню. Класс TFrameWindow содержит 4 член-данных и 25 член-функций , из которых в данном пособии используются : 10.3.1. Член-функции : virtual BOOL AssignMenu(TResId menuId); - - public Устанавливает Attr.Menu равным аргументу menuId и удаляет предыдущее меню окна void SetupWindow(); - - - protected Вызывает TWindow::SetupWindow() для создания окон в списке потомков . SetupWindow() выполняет начальную подготовку пользовательского окна , если оно существует , связывает м еню рамки с ресурсом меню. TFrameWindow(TWindow *parent, const char far *title=0, TWindow *clientWnd=0, BOOL shrinkToClient=FALSE, TModule *module=0); - - 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. Член-функции : TWindow(TWindow *parent, const char far *title=0, TModule *module=0); public Конструктор класса TWindow. Добавляет this к списку окон-потомков parent, если this не 0. Также устанавливает заголовок окна title и инициализирует атрибуты создания окна. virtual BOOL CanClose(); - - - public Возвращает TRUE, если ассоциированный интерфейсный элемент может быть закрыт . Ина че возвращает FALSE. inline TApplicacion*GetApplication(); - - public Получает указатель на объект TApplication, связанный с this. int MessageBox(const far*text, const char far* caption=0, UINT type=MB_OK); public Создет и выводит окно сообщений , содерж ащее сообщение text, заголовок caption и пиктограммы или кнопки type. Тип type может содержать комбинации констант MB_XXX: IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY, IDYES. virtual void Paint(TDC& dc, BOOL erase, TRect& rect); - public Вызывается базовыми классами при реагировании (отклике ) на сообщение WM_PAINT. Paint вызывается с помощью EvPaint и автоматически запрашивается системой Windows для повторного вывода содержимого окна. dc является контекстом отображения рисования , передаваемым функциям рисования тек ста и графического вывода. Заданная ссылка на структуру TRect представляет собой ограничивающий прямоугольник области , требующей перерисовки. erase показывает , нужно ли стирать фон. 10.5. Класс TDC Является корневым классом для вспомогател ьных классов контекстов устройств GDI. Класс TDC содержит 8 член-данных и 149 член-функций , из которых в данном пособии используются : 10.5.1. Член - функции : inline BOOL Ellipse(int x1, int y1, int x2, int y2); - - public inline BOOL Ellipse(const TPoint& p1, const TPoint& p2); Рисует и заполняет эллипс в данном контексте , используя выбранные объекты - перо и кисть . Центр эллипса - центр ограничивающего прямоугольника. Возвращает TRUE, если вызов успешный , иначе - FALSE. inline BOOL Rectangle(int x1, int y1, int x2, int y2); - - public inline BOOL Rectangle(const TPoint& point, const TSize& size); inline BOOL Rectangle(const TRect& rect); Рисует и заполняет прямоугольник заданного размера в данном контексте с использование м текущего пера и кисти . Возвращает TRUE при успешном завершении и FALSE в противном случае. void SelectObject(const TPen& pen); - - public Выбирает заданное перо в заданном контексте устройства . Выбранный ранее объект сохраняется в соответствующем эле менте данных. inline virtual TColor SetTextColor(TColor color); - - public Устанавливает текущий цвет текста в данном контексте в заданное значение color. Цвет текста определяет цвет , используемый в TDC::TextOut. inline virtual BOOL TextOut(int x, int y, const char far* string, int count=-1); public inline virtual BOOL TextOut(const 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. Член - функции : TScrollBar (TWindow* parent, int id, int x, int y, int w, int h, BOOL isHScrollBar, TModule* module=0); - - - public Создает и инициализирует объект типа TScrollBar в заданном окне с идентификатором id, в позиции x,y и размерами w,h. Если isHScrollBar равен TRUE, то создается горизонтальная линейка прокрутки , иначе - вертикальная. inline virtual int GetPosition(); - - public Возвращает текущую позицию бегунка линейки прокрутки. inline virtual void SetRange(int min, int max); - - public Устанавливает линейку про крутки в диапазоне от min до max. 10.7. Класс TEdit Класс TEdit используется при создании объекта “панель редактирования” . TEdit является производным от класса TStatic, который в свою очередь порожден от класса TControl. Существует две разновидности пане ли редактирования - однострочная и многострочная . Являясь интерфейсным элементом , панель редактирования позволяет ввести текст и редактировать его. Член-функции класса TEdit обрабатывают текст панели редактирования . Класс TEdit содержит 1 член-данное и 52 член-функции , из которых в данном пособии используются : TEdit(TWindow *parent, int id, const char far *text, int x, int y, int w, int h, UINT textlen, BOOL multiline=FALSE, TModule *module=0); - - public Конструирует панель редактирования в окне parent, задавая идентификатор панели id, местоположение x,y и размеры панели w,h, длину вводимого текста textlen. Аргумент multiline задает вид панели редактирования (однострочная или многострочная ). BOOL GetLine(char far* str, int strSize, int lineNumber); - pu blic Получает текстовую строку с номером lineNumber из панели редактирования и возвращает ее в строке str, заканчивающейся нулем. strSize задает количество получаемых символов. int GetLineLength(int lineNumber); - - public Возвращает количество символов в строке , заданной номером lineNumber. inline int GetNumLines(); - - - public Возвращает количество строк , введенных в многострочную панель редактирования . Возвращает нуль , если текст отсутствует.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
У кукловода "Спокойной ночи, малыши" неожиданно свело палец, и у Степашки появился кадык.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Borland C++ для Windows", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru