Программирование на Borland С++
Рефераты >> Программирование и компьютеры >> Программирование на Borland С++

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

}

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.

Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста.


Страница: