Программирование под Win32

производство и изготовление деревянных окон Красная горка. |

Программирование для Windows с помощью библиотеки объектов OWL - стр. 15


и, соответственно, переменная класса, представляющая дескриптор окна (она здесь имеет имя не HWin­dow, a Handle), объявлена типа THandle:

THandle Handle;

Оператор преобразования типа также написан для типа THandle: TWindow::operator THandle()   const   {return GetHandle();}

Функция GetHandle() того же класса возвращает дескриптор окна Handle:

TWindow::THandle TWindow::GetHandle()   const   {return Handle;}                                    

В итоге конструктор TPaintDC получает в качестве параметра дескриптор окна Handle, который за­тем передается в функцию BeginPaint().

Вернемся, однако, к обсуждению функции EvPaint(). Во втором предложении этой функции TRect& rect=*(TRect*)&dc.Ps.rcPaint;


Обработка сообщения WM_PAINT и интерфейс GDI                                                231

создается ссылочная переменная rect класса TRect. Эта переменная описывает прямоугольную область (в данном случае - область вырезки изображения) по ее четырем координатам. Как известно, область вы­резки передается Windows в элемент rcPaint структуры PAINTSTRUCT, однако она имеет там тип RECT. Поскольку переменная rcPaint является элементом структурного объекта Ps типа PAINTSTRUCT, a Ps является данным-членом объекта dc (созданного конструктором), полное имя области вырезки будет dc.Ps.rcPaint. В приведенном выше предложении образуется адрес этой переменной (&dc.Ps.rcPaint), с помощью префикса преобразования типа (TRect*) преобразуется в указатель на класс TRect, затем с него снимается ссылка (знак *) и полученное значение присваивается ссылочной переменной rect. В итоге в rect поступает область вырезки.

В последнем предложении функции EvPaint()

Paint(dc,dc.Ps.fErase,rect);

вызывается функция TWmdow::Paint() с передачей ей трех параметров: образованного ранее объекта dc класса TPaintDC, члена fErase структуры Ps и области вырезки rect. Как уже отмечалось выше, функция Paint() является заглушкой, которую необходимо переопределять в производных классах, при этом за­мещающая ее функция производного класса получает все три описанные выше параметра и может с ни­ми работать.




Начало  Назад  Вперед