уЗ - (yl+y2)/2-50; х4 - (xl+x2)/2+40; у4 - (yl+y2)/2+50:
Chord(hDC.xl.yl,x2.y2.x3.y3.x4.y4); //Вывод сегмента. //Изменяем контекст hDC для рисования непрозрачного эллипса SetR0P2 (hDC.R2_COPYPEN ): SetBkMode (hDC. OPAQUE); xl - rect.right/5-5; x2 - 2*rect.right/5; yl - rect.top+15; y2 - rect.bottom/5+15;
Ellipse(hDC.xl.yl.x2.y2); //Вывели непрозрачный эллипс. //Делаем эллипс прозрачным.
SetBkMode (hDC. TRANSPARENT);
El 1 i pse(hDC.xl+155.yl.x2+155.y2): //Возвращаем в контекст стандартные перо и кисть:
DeleteObject(Selectûbject(hDC.hBrush)):
Deleteûbj ect(Selectûbject(hDC.hPen));
EndPaint(hWnd.Sps); //B ps хранится указатель на тот же контекст, что //и в hDC. поэтому EndPaint имеет достаточно информации для удаления hDC. }
}
break;
При получении сообщения WMPAINT программа последовательно выводит на экран (рис. 14.1) многоугольник, сегмент и два полных эллипса. При выводе всех примитивов в контексте заданы перья одинакового цвета, а для всех эллипсов используется одна кисть с розовой штриховкой и желтым фоном. То, что фон, штриховка и границы фигур выглядят по-разному, обусловлено изменением режимов вывода.
Рис. 14.1. Режимы вывода При рисовании многоугольника в контекст было занесено перо стиля Р5_0А5Н. Обратите внимание на то, что явная установка толщины пера заставляет систему игнорировать стиль. Поэтому вместо штриховой линии сформировалась непрерывная линия. При выводе левого эллипса использовались непрозрачный фон и растровая операция (К2_С0РУРЕЫ) замены старого изображения новым. Поэтому
Режимы вывода
левый эллипс полностью перекрыл выведенные раньше изображения. Цвета границы, фона и штриховки этого эллипса не зависят от того, что было отображено на его фоне.
При выводе второго эллипса задан прозрачный фон, поэтому сквозь него виден ранее нарисованный многоугольник.
При выводе сегмента эллипса цвета смешивались растровой операцией ХСЖ. В этом случае фон не только виден сквозь сегмент, но и влияет на цвет линий в сегменте. Следует отметить, что линии штриховки сегмента на фоне многоугольника и пустой рабочей области имеют разные цвета. То есть операция ХСЖ применилась и к перу, и к кисти. Рисунок также показывает, что растровая операция действует и во время вывода частей одного примитива. При рисовании сегмента сначала кистью была нарисована его внутренняя часть, а потом пером обвели контур сегмента так, что середина линии совпала с краем штриховки. Линия толстая, поэтому она наложилась на штриховку, и можно заметить, что в результате смешивания цветов штриховка просвечивает сквозь линию границы сегмента.