31244-1 (Borland C++ для Windows), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Borland C++ для Windows", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "31244-1"

Текст 2 страницы из документа "31244-1"

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.

После описания всех элементов таблицы реакции запишите строку 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,TPoint&);

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","Message 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);

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

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.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
431
Средний доход
с одного платного файла
Обучение Подробнее