Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 04 Лек Классы общего назначения.pdf
Скачиваний:
43
Добавлен:
15.02.2015
Размер:
219.85 Кб
Скачать

Лекция 4

Классы общего назначения

1

 

Л Е К Ц И Я 4

 

КЛАССЫ ОБЩЕГО НАЗНАЧЕНИЯ _______________________________________________________ 1

Положение точки. Структура POINT________________________________________________________ 1 Класс точки CPoint ______________________________________________________________________ 1 Размер прямоугольника. Структура SIZE ___________________________________________________ 1 Класс размера прямоугольника CSize ______________________________________________________ 2 Прямоугольник. Структура RECT __________________________________________________________ 2 Класс прямоугольника CRect _____________________________________________________________ 2 Функции класса прямоугольника CRect _____________________________________________________ 2

КЛАССЫ ОБЩЕГО НАЗНАЧЕНИЯ

Структуры POINT, RECT и SIZE, используются в MFC для определения позиции и размеров диалоговых окон и элементов управления на экране. Поскольку изображение объектов на экране строятся из пикселей, то все поля структур являются целями числами.

Классы CPoint, CRect и CSize являются объектно-ориентированными оболочками вокруг структур POINT, RECT и SIZE, соответственно. Они объявлены как классы, производные от соответствующих им структур. По этой причине объекты каждого из указанных классов могут использоваться всюду, где применяются соответствующие структуры. Поля структур являются открытыми членами данных классов.

Точка. Структура POINT

Структура POINT определяет координаты точки и объявлена следующим образом:

typedef struct tagPOINT

{

LONG x ;

// абсцисса точки

LONG y ;

// ордината точки

}POINT ;

Вследующем примере осуществляется объявление переменных типа POINT и их инициализация.

POINT B = { 370 , 550 } ;

POINT A ;

A.x = 370 ; A.y = 550 ;

Класс точки CPoint

Класс CPoint имеет несколько конструкторов:

CPoint ( ) ;

// конструктор по умолчанию не инициализирует значения х и у

CPoint ( int X , int Y ) ;

// X и Y задают значения переменных-членов класса х и у

CPoint ( POINT Pt ) ;

// конструктор копирования

CPoint ( SIZE Size ) ;

// преобразует структуру SIZE в координаты точки х и у

CPoint ( DWORD dwPoint) ; // преобразует младшее и старшее слово параметра в значения х и у

В классе CPoint определён метод смещения точки Offset ( ), который имеет несколько прототипов:

void Offset ( int xOffset , int yOffset) ; void Offset ( POINT point ) ;

void Offset ( SIZE Size ) ;

Параметры xOffset и yOffset в первой форме метода определяют величины смешений для членовданных х и у, соответственно. Параметры point и size во второй и третьей формах метода задают те же смещения в виде структур.

Класс перегружает операторы сравнения точек: == и != , которые могут принимать в качестве правого операнда объекты типа CPoint и POINT.

Класс также перегружает бинарные операторы сложения и вычитания: + и , которые могут принимать в качестве правого операнда объекты типа CPoint, POINT, CSize, SIZE, CRect и LPRECT.

Класс также перегружает бинарные операторы сложения и вычитания с присваиванием: += и – = , которые могут принимать в качестве правого операнда объекты типа CPoint, POINT, CSize и SIZE.

Размер прямоугольника. Структура SIZE

Структура SIZE определяет размер прямоугольника и объявлена в библиотеке MFC следующим образом:

Выжол Ю.А.

Программирование на Visual C++

Лекция 4

 

Классы общего назначения

2

typedef struct tagSIZE

 

 

{

 

 

 

LONG

cx;

// ширина прямоугольника

 

LONG

cy;

// высота прямоугольника

 

} SIZE ;

 

 

 

Класс размера прямоугольника CSize

Класс CSize наследует от структуры SIZE открытые члены-данные сх и су. Класс предоставляет несколько конструкторов для создания и копирования объектов:

CSize ( ) ;

// конструктор по умолчанию не инициализирует значения cх и cу

CSize ( int CX , int CY ) ;

// CX и CY задают значения переменных-членов класса cх и cу

CSize ( SIZE Size ) ;

// конструктор копирования

CSize ( POINT Pt ) ;

// преобразует структуру POINT в координаты точки cх и cу

CSize ( DWORD dwSize ) ;

// преобразует младшее и старшее слово параметра в значения cх и cу

Класс перегружает операторы сравнения размеров прямоугольников: == и != , которые могут принимать в качестве правого операнда объекты типа CSize и SIZE.

Класс также перегружает бинарные операторы сложения и вычитания: + и , которые могут принимать в качестве правого операнда объекты типа CPoint, POINT, CSize, SIZE, CRect и LPRECT.

Класс также перегружает бинарные операторы сложения и вычитания с присваиванием: += и – = , которые могут принимать в качестве правого операнда объекты типа CSize и SIZE.

Прямоугольник. Структура RECT

Структура RECT определяет координаты верхнего левого и нижнего правого углов прямоугольника.

typedef struct tagRECT

{

LONG left ;

// абсцисса верхнего левого угла прямоугольника

LONG top ;

// ордината верхнего левого угла прямоугольника

LONG right ;

// абсцисса нижнего правого угла прямоугольника

LONG bottom ;

// ордината нижнего правого угла прямоугольника

}RECT ;

Вследующем примере осуществляется объявление переменных типа RECT и их инициализация.

RECT P = { 20 , 30 , 180 , 230 } ;

RECT R ;

 

//объявление переменной типа RECT

R.left = 20 ;

R.top = 30 ;

// координаты верхнего левого угла прямоугольника

R.right = 180 ;

R.bottom = 230 ;

// координаты нижнего правого угла прямоугольника

Класс прямоугольника CRect

Класс CRect эмулирует в себе все операции, связанные с прямоугольными областями, и имеет несколько конструкторов:

CRect ( ) ;

// конструктор по умолчанию

CRect ( int l , int t , int r , int b ) ;

// параметры задают значения переменных-членов класса

CRect ( const RECT Rect ) ;

// конструктор копирования

CRect ( LPCRECT lpRect ) ;

// конструктор копирования

CRect ( POINT Point , SIZE Size ) ; // создаёт объект с заданным верхним левым углом и размерами

CRect ( POINT TopLeft , POINT BottomRight ) ; // создаёт объект с заданным верхним левым

// и нижним правым углами

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

Функции класса прямоугольника CRect

Класс содержит целый ряд методов, позволяющих оперировать с его объектами:

Width ( )

возвращают ширину прямоугольника;

Heigh ( )

возвращают высоту прямоугольника;

Size ( )

возвращает размеры прямоугольника;

Выжол Ю.А.

Программирование на Visual C++

Лекция 4

Классы общего назначения

3

TopLeft ( )

возвращает координаты верхней левой вершины прямоугольника;

 

BottomRight ( )

возвращает координаты нижней правой вершины прямоугольника;

 

CenterPoint ( )

возвращает координаты центральной точки прямоугольника;

 

IsRectEmpty ( )

проверяет, является ли объект пустым;

 

IsRectNull ( )

проверяет, является ли объект нулевым ( координаты всех вершин прямоугольни-

SetRect ( )

ка равны нулю);

 

позволяет изменить координаты вершин прямоугольника после его создания;

 

PtInRect ( )

проверяет, лежит ли заданная точка внутри текущего прямоугольника;

 

В классе CRect определён метод смещения прямоугольника Offset ( ), который имеет несколько прототипов:

void Offset ( int xOffset , int yOffset) ; void Offset ( POINT point ) ;

void Offset ( SIZE size ) ;

Параметры xOffset и yOffset в первой форме метода определяют величины смешений для членовданных х и у, соответственно. Параметры point и size во второй и третьей формах метода задают те же смещения в виде структур. Класс содержит и другие интересные методы, которые вы без труда изучите сами.

Класс перегружает операторы сравнения прямоугольников: == и != , которые могут принимать в качестве правого операнда объекты типа CRect и LPRECT.

Класс также перегружает бинарные операторы: + , , += , – =, которые могут принимать в качестве правого операнда объекты типа CPoint, POINT, CSize, SIZE, CRect и LPRECT. Бинарные операторы: & , | , &= , |= вычисляют объединение и пересечение двух прямоугольников.

Класс содержит две функции преобразования типа: LPRECT и LPCRECT. Первая их них преобразует объект CRect в LPRECT, а вторая – в LPCRECT. Можно также выполнять присвоение одного объекта типа CRect (или RECT) другому, благодаря перегруженному оператору =.

Выжол Ю.А.

Программирование на Visual C++