8.1. Изменение размера выводимой графики с помощью линейки прокрутки

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

8.1.1. Исходный текст программы

#include <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\dc.h>

#include <owl\scrollba.h>

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;

 }

 protected:

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

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

 }

};

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

#include <owl\framewin.h>

#include <owl\button.h>

#include <owl\dc.h>

#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()

 {

MainWindow=new TMyWin();

 }

};

int OwlMain(int, char *[])

{

 TMyApp app;

 return app.Run();

}


Информация о работе «Borland C++ для Windows»
Раздел: Информатика, программирование
Количество знаков с пробелами: 59535
Количество таблиц: 0
Количество изображений: 13

Похожие работы

Скачать
25316
2
1

... автоматизации, которые не описаны в интерфейсе IDispatch. Var Object: Variant; Object := CreateOleObject('Word.Application'); Использование экземпляра сервера автоматизации, то есть вызов его методов, осуществляется с помощью конструкций, обычных для вызова методов в Delphi: <Ссылка на сервер>.<Название метода>(<Список параметров>); Однако механизм, используемый для ...

Скачать
16146
2
10

... требования: Процессор – Pentium 400 MHz. Оперативная память – 512 Mb. Жесткий диск – 10 Gb. Операционная система – Windows XP Professional Программное обеспечение – Borland Database Engine. 2. Разработка рабочего проекта 2.1  Разработка программы Программа, моделирующая игру «Нечет» и «Чет» разработана на языке Object Pascal в визуальной среде Delphi 6. Проект содержит одно окно- ...

Скачать
133101
1
9

... мире. Внутренняя схема - это сама база данных. Отсюда вытекают основные этапы, на которые разбивается процесс проектирования базы данных информационной системы: Концептуальное проектирование - сбор, анализ и редактирование требований к данным. Для этого осуществляются следующие мероприятия: обследование предметной области, изучение ее информационной структуры выявление всех фрагментов, каждый ...

Скачать
46945
2
0

... из контекстного меню или из меню Run, закрыть приложение и лишь затем вносить изменения в проект. В этом случае уменьшится вероятность потери ресурсов Windows. Компоненты Borland C++ Builder Выбор компонентов для групповых операций Для эффективной разработки пользовательских интерфейсов приложений C++ Builder нередко возникает необходимость в манипулировании компонентами на формах. ...

0 комментариев


Наверх