Растровая операция задается функцией SetR0P2(HDC. int Mode). Второй параметр может принимать различные значения, некоторые из которых приведены в следующем списке: О Константа R2_C0PYPEN указывает, что цвет задается пером и кистью без учета цвета экрана. После запроса контекста этот режим используется по умолчанию.
О Константа R2_BLACK указывает, что цвет будет черным.
О Константа R2MASKPEN указывает, что коды старого и нового цветов побитно объединяются при помощи операции И.
О Константа R2_MERGEPEN указывает, что коды старого и нового цветов побитно объединяются при помощи операции ИЛИ.
О Константа R2_MASKN0TPEN указывает, что цвета пера и кисти инвертируются.
О Константа R2_X0RPEN указывает, что результат формируется при помощи побитовой операции XOR.
Получить информацию о прозрачности фона и режиме рисования можно при помощи функций GetBkMode() и GetR0P2().
Для демонстрации функций изменения режимов вывода изображения (проект GdiMode) следует включить в оконную процедуру проекта minim обработку сообщения WMPAINT, как это показано в листинге 14.1.
Листинг 14.1
case WM_PAINT: {
PAINTSTRUCT ps; RECT rect:
int Xl.x2.x3.x4.yl.y2.y3,y4;
POINT Pointl [] - { {240.10}.{255.75}.{105.5}.{275.30}.{200.75}}; if(hDC - BeginPaint(hWnd.&ps)) {
GetClientRect(hWnd.&rect); //Записываем в rect размер рабочей области. hBrush - (HBRUSH)SeiectObject(hDC.CreateSolidBrush(RGB(0.0.200))); hPen - (HPEN)Select0bject(hDC.CreatePen(PS_DASH.8. RGBC0.200.200))); SetPolyFillMode (hDC. WINDING):
Polygon (hDC. Pointl.5): //Рисуем синий многоугольник. //Рисуем сегмент эллипса с растровой операцией X0R и прозрачной штриховкой SetR0P2 (hDC.R2_X0RPEN); SetBkMode (hDC.TRANSPARENT);
SetBkColor(hDC.RGB(250.250.0)); //Желтый фон (по умолчанию был белый).
Фоновый цвет примитивов
DeleteObjectC
SelectObect(hDC.CreateHatchBrush(HS_DIAGCROSS.RGB(200.О.190)))):
//Создали штрихованную кисть, ввели ее в контекст, а синюю уничтожили
xl - 2*rect.right/5-10;
yl - rect.top+25;
х2 - 3*rect.right/5-10; у2 - rect.bottom/5+25; хЗ - (xl+x2)/2+40;