В первом предложении вызывается конструктор
void TWindow::EvPaint(){ TPaintDC dc(*this);
TRect& rect=*(TRect*)&dc.Ps.rcPaint; Paint(dc,dc.Ps.fErase,rect);
}
В первом предложении вызывается конструктор класса TPaintDC, который создает объект этого класса с именем dc. Имя этого объекта используется в дальнейших предложениях приведенного фрагмента, а также и в тексте нашей программы. Прототип конструктора класса TPaintDC имеет следующий вид:
TPaintDC (HWND);
В качестве аргумента конструктора выступает дескриптор окна типа HWND. Однако в функции EvPaint() в качестве фактического аргумента конструктора использовано обозначение *this, что означает указатель на текущий объект со снятой ссылкой, т.е. сам текущий объект (этот объект в нашей программе не имеет имени, так как создан не по имени, а с помощью указателя MyWin). Каким образом целый объект *MyWin преобразуется в конкретное данное типа HWND? Это делается с помощью оператора преобразования типа, включенного в класс TWindow, который в OWL 2.5 (пакет Borland C++ 4.5) выглядит следующим образом:
TWindow::operator HWND() const {return HWindow;}
Как было показано в гл. 22, операторы такого рода позволяют преобразовывать пользовательские классы в скалярные данные базовых типов; в данном случае задаются правила преобразования класса TWindow в скалярную переменную HWindow типа HWND. Конструктор TPaintDC требует в качестве аргумента переменную типа HWND, однако в функции EvPaint() он вызывается с указанием параметра типа "объект класса TWindow". Следовательно, компилятор должен преобразовать объект TWindow в переменную типа HWND. Правила такого преобразования, задаваемые оператором operator, требуют подстановки вместо объекта класса TWindow данного-члена того же класса HWindow. Таким образом, конструктор TPaintDC получает в качестве параметра данное HWindow, представляющее собой дескриптор окна, которое он затем использует при вызове функции BeginPaint().
В OWL 5.0 (пакет Borland C++ 5.0) описанная процедура выглядит сложнее, хотя ее смысл остается в точности тем же. Отличие заключается в том, что в классе TWindow оператором typedef вводится новый тип данных THandle, в точности эквивалентный HWND: typedef HWND THandle;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий