(
this->ticks = ticks;
protected:
void Paint(TDC& dc, bool, TRectS), void PaintBorder(TDC& dc);
private:
int ticks;
Функции paint и paintBorder вызываются с контекстами устройств, которые требуются для большинства графических функций Windows API. paint допускает также дополнительные параметры, но мы их использовать не будем (кстати, TGauge тоже этого не делает). И это все, что нужно для определения нашего класса TChordGauge. У нас есть свой конструктор, мы определили функции paint и PaintBorder; все, что осталось — это написать немного кода для рисования нашего индикатора.
Если вы терпеть не можете программирование графики, то не утруждайте себя изучением следующей чуть ниже реализации функций paint и PaintBorder. Здесь важно усвоить, что мы взяли готовый класс и, написав всего несколько строк, унаследовали его функциональные возможности для наших собственных целей. Наследование — это не только мощная концепция, это еще и мощный инструмент. Пусть он поработает на вас, а вы поберегите свое время и силы на разработку.
Если вам не интересна реализация paint и PaintBorder (или сама мысль об упражнениях в тригонометрии наводит на ужасные воспоминания о школьной поре), можете на этом остановиться.
Все, что нам действительно нужно сделать в PaintBorder — это нарисовать фон нашего управляющего элемента TChordGauge. Рисование заключается в заполнении прямоугольника, ограничивающего наш управляющий элемент некоторым содержанием. В нашем случае мы закрашиваем клиентский прямоугольник системным цветом, применяемым по умолчанию для лицевой части объекта, вычерчиваем полукруг и, если необходимо, рисуем деления на равном расстоянии по всей длине его дуги. Эта функция показана в листинге 20.3. Чтобы читать функцию было несколько легче, текст снабжен подробными комментариями.
// PaintBorder рисует циферблат нашего индикатора,
// т. е. полукруг с делениями.
void TChordGauge::PaintBorder(TDC& dc)
{
// Установить границы нашего индикатора по клиентской области.
TRect cr(GetClientRect());'