Программирование на Borland С++
Программирование на Borland С++
Казанский Государственный Университет имени А.Н. Туполева
Кафедра автоматизированных систем обработки информации и управления
Медведев В.И.
ПРОГРАММИРОВАНИЕ ДЛЯ WINDOWS НА BORLAND C++
Часть 1
СОДЕРЖАНИЕ
1.
Введение..................................................................
.................................................. 3
2. Создание простейшего
приложения................................................................
.......... 7
3. Использование класса TFrameWindow для создания главного
окна..................... 9
4. Программирование с таблицами
отклика.................................................................
11
5. Вывод графики в
Windows...................................................................
...................... 14
6. Обновление содержимого
окна......................................................................
............ 16
7. Создание
меню......................................................................
.................................... 18
8. Управляющие
компонентыWindows.........................................................
................. 24
9. Ввод и редактирование
текста....................................................................
............... 29
Приложение. Классы
OWL.......................................................................
..................... 32
1. Введение
Цель данного пособия - облегчить усвоение программирования для Windows
на BORLAND C++ и способствовать распространению библиотеки OWL (Object
Windows Library), которая хорошо продумана и использование которой явно
вырисовывает достоинства объектно-ориентированного программирования -
инкапсуляции, наследования и полиморфизма.
Пособие привязано к лекционному курсу “Технология программирования”,
требуя знаний изложенных на лекциях основ объектно-ориентированного
программирования на C++ и предназначено как руководство к лабораторным
работам по этому лекционному курсу.
Пособие ориентировано на пошаговую разработку за компьютером несложных
Windows-приложений, в процессе которой осуществляется их исследование путем
сравнения различных вариантов реализации, изменения параметров членов-
функций и значений членов-данных используемых классов.
В создаваемых Windows-приложениях используется очень незначительная, но
базовая часть OWL библиотеки, активное усвоение которой способствует снятию
барьера, и, как надеются авторы, вызовет удовольствие от первого знакомства
с завоевавшей мир Windows.
1.1. Ввод, редактирование и запуск Windows-приложения
[pic]
Чтобы ввести исходный текст программы, откомпилировать и увидеть на
экране окно Windows-приложения, необходимо выполнить следующие действия:
1) Сделайте двойной щелчок левой клавиши мыши (или нажатие ENTER) на
пиктограмме Borland C++. Появится окно компилятора BC4.
2) Щелчок левой клавиши мыши на элементе меню Project (или переход в
строку меню путем нажатия F10, поиск и высвечивание элемента Project с
помощью клавиш ( и (. Раскрыть Project с помощью клавиши ENTER).
3) Щелчок мышью на команде New project (или выбрать данный пункт меню с
помощью клавиш ( и ( и нажать ENTER). В дальнейшем для краткости будем
говорить, что нужно выполнить команду Project|New project (команду New
project из меню Project).
[pic]
Таким образом, будет выполнена команда создания нового проекта и на
экране появится следующий диалог.
[pic]
4) Щелчок мышью на кнопке Browse [pic] для просмотра каталога.
5) Воспользовавшись линейкой прокрутки, найти имя требуемого каталога и
сделать на нем двойной щелчок левой клавиши мыши.
[pic]
6) В поле File Name ввести имя проекта с расширением .ide, затем нажать
ENTER.
7) Нажмите кнопку Advanced [pic] и снимите флажки rc и def в появившемся
диалоге Advanced Options, затем нажмите OK.
[pic]
8) В диалоге создания проекта нажмите кнопку OK.
9) Сделайте двойной щелчок левой кнопкой мыши на имени файла с
расширением cpp в окне созданного проекта, в результате чего откроется окно
для редактирования текста программы.
[pic]
10) Введите исходный текст программы.
11) Для компиляции и выполнения нажмите Ctrl-F9.
12) Если получены сообщения об ошибках, то исправьте их и
проведите компиляцию заново. Если ошибки отсутствуют, то на экране
появится окно Вашего Windows-приложения. Осуществите диалог с
приложением, используя мышь.
1.2. Основные приемы редактирования текста в интегрированной среде
BORLAND C++
1.2.1. Копирование и удаление части текста в окне редактирования
Для копирования текста из одной его части в другую выполняются следующие
действия:
1) Выделить копируемый текст:
а) Подвести курсор к началу копируемого текста.
б) Нажать и удерживать клавишу Shift.
в) Используя клавиши управления курсором, выделить текст.
г) Отпустить Shift.
2) Занести выделенный текст в буфер обмена (Clipboard) путем
одновременного нажатия Ctrl и Ins или выполнения команды Edit|Copy.
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 !”. Окно также содержит кнопки минимизации и максимизации, а также
системное меню приложения.
[pic]
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 содержит оператор new, который
совместно с конструктором 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, hello!!");
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_TABLEn([,класс][,класс]...);
- все то же имя класса, для которого Вы строите таблицу
отклика. Через запятую Вы должны перечислить имена базовых классов, от
которых производится наследование. Число n следует заменить на число
базовых классов, которые тоже содержат таблицы отклика.
Сразу же за текстом макроса необходимо поместить элементы таблицы
реакции, разделенные запятыми. Так, если Вы хотите обрабатывать сообщения о
нажатиях правой и левой клавиш мыши в окне Вашего приложения, то в таблицу
помещаются следующие элементы:
EV_WM_LBUTTONDOWN,
EV_WM_RBUTTONDOWN,
которые говорят OWL о том, что Вы хотите обрабатывать сообщения о
нажатиях левой и правой клавиш соответственно. Скажем EV_WM_LBUTTONDOWN
расшифровывается, как Event (событие), Windows Message: Left Button Down.
Страницы: 1, 2, 3
|