скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Borland C++ для Windows

EV_WM_LBUTTONDOWN,

EV_WM_RBUTTONDOWN,

которые говорят OWL о том, что Вы хотите обрабатывать сообщения о нажатиях левой и правой клавиш соответственно. Скажем EV_WM_LBUTTONDOWN расшифровывается, как Event (событие), Windows 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 <owl\applicat.h>

#include <owl\framewin.h>

class TMyWindow : public TFrameWindow

{

 public:

  TMyWindow(char *title):TFrameWindow(0,title)

  {}

 protected:

  void EvLButtonDown(UINT,TPoint&);

  void EvRButtonDown(UINT,TPoint&);

DECLARE_RESPONSE_TABLE(TMyWindow);

};

DEFINE_RESPONSE_TABLE1(TMyWindow,TFrameWindow)

 EV_WM_LBUTTONDOWN,

 EV_WM_RBUTTONDOWN,

END_RESPONSE_TABLE;

void TMyWindow::EvLButtonDown(UINT,TPoint&)

have pressed the LEFT mouse button","Message dispatched",MB_OK

void TMyWindow::EvRButtonDown(UINT,TPoint&)

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 <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\dc.h>

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);

 TColor 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 указано имя только второго параметра, так как нам необходимо знать только координаты указателя мыши в момент нажатия ее левой кнопки.

В начале тела функции создается объект контекста рабочей области главного окна приложения (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 forecolor(TColor::LtBlue) на

TColor forecolor(random(255), random(255), random(255)).

Для использования 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 посылает приложению-владельцу окна сообщение WM_PAINT. Если приложение имеет функцию отклика на это сообщение, то функция будет активизирована и перерисует окно, восстановив его внешний вид.

Итак, корректное Windows-приложение должно осуществлять вывод в окно приложения только через виртуальную функцию Paint, вызываемую при приходе WM_PAINT.

Вы можете легко убедиться в сказанном, запустив приложение, представленное в разделе 5.1.1. Поместите над окном данного приложения любое другое прикладное окно и удалите его - рабочая область окна не восстановится. Так и должно быть, поскольку это приложение не имеет функции Paint.

Обратите внимание! Сама функция Paint не является функцией отклика на сообщение и для нее не надо включать макрос сообщения в таблицу откликов. Paint необходимо только переопределить в классе, производном от TWindow или TFrameWindow.

6.1. Рисование в окне с помощью Paint

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

6.1.1. Исходный текст приложения

#include <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\dc.h>

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;

 }

 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 на вопрос о необходимости создания файла.

Страницы: 1, 2, 3, 4


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.