...

Листинг 6.10.

Подготовка необходимых данных

//получаем размеры клиентской области

Windows.GetClientRect(hWnd, rt);

//рассчитываем ширину и высоту клиентской области

ulWindowWidth := rt.right – rt.left;

ulWindowHeight := rt.bottom – rt.top;

if (ulWindowWidth = 0) or (ulWindowHeight = 0) then

Exit;

//делим окно на три горизонтальные области

ulWindowHeight := ulWindowHeight div 3;

//создаем контекст устройства для нашего точечного рисунка

hCurDC := CreateCompatibleDC(hdcwnd);

ZeroMemory(@bmi, sizeof(BITMAPINFO));

//Устанавливаем параметры точечного рисунка.

//Указываем ширину и высоту точечного рисунка для каждой

//из трех горизонтальных областей

//равными 60 % ширины и высоты главного окна.

//Смешивание в центре каждой из этих трех областей

with bmi.bmiHeader do

begin

biSize := sizeof(BITMAPINFOHEADER);

biWidth := ulWindowWidth – (ulWindowWidth div 5) * 2;

ulBitmapWidth := biWidth;

biHeight := ulWindowHeight – (ulWindowHeight div 5) * 2;

ulBitmapHeight := biHeight;

biPlanes := 1;

biBitCount := 32; //четыре восьмибитных составляющих

biCompression := BI_RGB;

biSizeImage := ulBitmapWidth * ulBitmapHeight * 4;

end;

//создаем DIB секцию и выбираем точечный рисунок в контексте

устройства

hbmp := CreateDIBSection(hCurDC, bmi, DIB_RGB_COLORS, pvBits,

0, 0);

SelectObject(hCurDC, hbmp);

Далее осуществляем описанное ранее альфа-смешивание для каждой из областей. Для первой области в точечном рисунке мы устанавливаем синий цвет точки. Задаем необходимые параметры альфа-смешивания и выполняем его (листинг 6.11).

Загрузка...