Главная страница
Навигация по странице:

  • SetBkColor

  • SetBkMode

  • GetCurrentPositionEx

  • PolyBezier

  • Алгоритмизации


    Скачать 1.15 Mb.
    НазваниеАлгоритмизации
    Дата27.09.2022
    Размер1.15 Mb.
    Формат файлаdocx
    Имя файла12_100229_1_124427 (1).docx
    ТипДокументы
    #700459
    страница65 из 67
    1   ...   59   60   61   62   63   64   65   66   67

    Закрашиваниепустот


    Если выбранные перо или кисть не сплошные, то они не воздействуют на фоновые промежутки, например, между штрихами, однако эти промежутки заполняются фоновым цветом, для работы с которым служат функции

    COLORREF SetBkColor(hdc, crColor); COLORREF GetBkColor(hdc);

    первая из которых устанавливает новый, а вторая получает текущий фоновые цвета; признак ошибки – значение CLR_INVALID. Функция SetBkColor возвращает значение предыдущего цвета.

    Функции

    int SetBkMode(hdc, iBkMode); int GetBkMode (hdc);

    соответственно устанавливают новый или определяют текущий режим фона, 0 – признак ошибки; параметр int iBkMode– режим фона, по умолчанию белый (OPAQUE) сначала рисуется фон, затем передний план; режим TRANSPARENT– отменяет заполнение пустот, в этом случае цвет фона игнорируется и пустоты заполняться не будут.

      1. Рисованиелинийикривых


    Теоретически все, что необходимо драйверу устройства для рисования, это функции SetPixel и GetPixel.

    Значительно более эффективным является использование стандартных функций рисования отрезков и других сложных графических операций.

    Приложение6

    На представление линий, созданных с использованием функций, влияют атрибуты контекста устройства: текущая позиция, перо, режим фона (для несплошных перьев), цвет фона (для режима фона OPAQUE) и режим рисования.

    Функция

    LineTo(hdc, xEnd, yEnd);

    рисует отрезок прямой из текущего положения пера, определенного в контексте устройства, до точки (xEnd, yEnd), которая не включается в отрезок. В контексте текущее положение пера по умолчанию устанавливается в точку (0,0) и функция LineTo без предварительной установки текущей позиции нарисует отрезок, начинающийся в левом верхнем углу рабочей области окна.

    Для рисования отрезка из точки (xStart, yStart) в точку (xEnd, yEnd) необходимо сначала для установки (изменения) текущего положения пера использовать функцию

    MoveToEx(hdc, xStart, yStart, &pt);

    pt– структура типа POINT, определяющая предыдущую позицию. После чего, используя LineTo (hdc, xEnd, yEnd); будет нарисован отрезок до точки (xEnd, yEnd), не включая ее в отрезок, и текущее положение пера установится в точку (xEnd, yEnd).

    Узнать текущее положение пера можно с помощью функции

    GetCurrentPositionEx(hdc, &pt);

    Следующий фрагмент программы отображает в рабочей области окна сетку с интервалом в 100 пикселей, начиная от левого верхнего угла:

    GetClientRect (hwnd, &rect); (см. Пример 1, Сообщение WM_PAINT); for (x = 0; x < rect.right; x += 100) {

    MoveToEx (hdc, x, 0, NULL); LineTo (hdc, x, rect.bottom);

    }

    for (y = 0; y < rect.bottom; y += 100) { MoveToEx (hdc, 0, y, NULL); LineTo (hdc, rect.right, y);

    }

    Когда необходимо соединить отрезками массив точек ptразмером

    cPoint, можно использовать функцию

    Polyline(hdc, pt, cPoint);

    Например, определим массив из 5 точек (10 значений), описывающих контур прямоугольника:

    POINT pt [5] = { 100, 100, 200, 100, 200, 200, 100, 200, 100, 100 };

    используем функцию Polyline(hdc, pt, 5). Следует обратить внимание, что первая и последняя точки совпадают.


    Приложение6

    Функция Polylineне учитывает и не изменяет текущее положение пера. Функция PolylineTo использует текущее положение для начальной точки и устанавливает текущее положение в конец последнего нарисованного отрезка. Предыдущий пример будет выглядеть

    MoveToEx (hdc, pt[0].x, pt[0].y, NULL); PolylineTo (hdc, pt + 1, 4);

    Для рисования дуги эллипса (рис. П 6.2) используется функция

    Arc(hdc, x1, y1, x2, y2, xStart, yStart, xEnd, yEnd);

    в которой значения (x1, y1) задают левый верхний угол, (x2, y2) правый нижний; (xStart, yStart) – начало дуги; (xEnd, yEnd) – конец дуги.

    xStart

    x1yStart

    y1


    xEnd yEnd

    y2

    x2

    Рис. П 6.2. Фигура, нарисованная с использованием функции Arc
    Чтобы нарисовать одну или более связанных кривых Безье, используются функции

    PolyBezier(hdc, pt, iCount);

    PolyBezierTo(hdc, pt, iCount);

    pt массив структур типа POINT. В функции PolyBezierпервые четыре точки идут в таком порядке: начальная точка, первая контрольная точка, вторая контрольная точка, конечная точка кривой Безье. Каждая следующая кривая Безье требует три новых точки, поскольку начальная точка следующей кривой есть конечная точка предыдущей и т.д. Параметр iCount = 1+3*nравен единице плюс три, умноженное на число отображаемых кривых.

      1. 1   ...   59   60   61   62   63   64   65   66   67


    написать администратору сайта