Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 58


GctClientRect(liWnd, &Rect);

hCompatibleBilmap = CreateCompaliblc,Bitmap(liDC, Rcct.right, Reel.bottom);

hOldBitmap - SelectObject(hCompatibleDC, hCompatibleBitmap);

PatBlt(hCompatibleDC, 0. 0, Red.right, Reel.bottom, PATCOPY); // Drawing of pixels

for(i = 0; i <- 9999; i---) SetPixel(hCompatibleDC,random(Rect.right), random(Rect.bottom),

RGB(random(255), random(255), random(255))); // Drawing of lines

67

for(i - 0; i <=- 9; i+-<-)

hOldPen = SelectObject(hCompatibleDC, Pcns[random(4)]); MoveToEx(hCompatibleDC.random(Rect.right), random(Rcct.bottom),

NULL);

LineTo(hCompatibleDC. nmdom(Rcct.right), random(Rect.bottom)); ScleclObjcct(hCompatibleDC, hOldPen); } // Drawing of rectangles

for(i - 0; i <=- 5; i++) i

hOldBrush - SelcctObject(hConipatibleDC, Bmshes[random(4)l); Rcctanglc(hCompaliblcDC, random(Rect.right).

random( Reel, bottom), random(Rcct.right), random(Rcet.bottom)); Ellipse(hCompatibicDC,random(Rcct.right),

random(Rect.bottom). random(Rect.right), random(Rect. bottom)); SelectObject(hCompatiblcDC, hOldBrush);

I BitBit(hDC, PaintStruct.rcPaint.left, PamtStruct.rcPaint.lop,

PaintStruct.rcPaint.right,

PaintStruct.rcPaint. bottom,

hCompatibleDC,

PaintStruct.rcPaint. left,

PaintStruct.rcPaint.top,

SRCCOPY); for(i = 0; i<=4; i++)

!

DeleteObject(Pens[i]); DeleteObjcct(Brushcs[il);

} SelectObject(hCompatibleDC, hOldBitmap);

DeleteObjcct(hCompatibleBitmap); DelelcDC(hCompatibleDC); EndPaint(h\Vnd, &PaintStruct); return 0;

case WM_DESTROY: PoslQuitMcssagc(O); return 0;

} return DefWindo\vProc(hWnd,Messagc,wParam, IParam);

На рис. 6 показан вид окна, создаваемого программой. Следует учесть, что положение линий, прямоугольников и эллипсов - случайное. При перерисовке их положение, размер и стиль штриховки изменяется, по-

68

этому при повторном запуске программы в окне может быть другое изображение.

Думаю, что после всего того, что мы обсудили в этом разделе, при разборе программы не встретится трудностей. Предоставляю вам воз­можность разобрать эту программу самостоятельно. У читателя может возникнуть вопрос, для чего все эти сложности с созданием контекста в памяти, копированием его на действительный контекст и прочее. Цель единственная - показать технику работы с виртуальным окном. Весь вывод осуществляется в виртуальное окно (контекст в памяти), после чего одна из «могучих Bit», BitBltQ выполняет копирование содержимого виртуального окна на действительное окно. Как я уже говорил, обычно вывод в действительное окно (т. е. копирование контекста в памяти на действительный контекст) происходит при обработке WM_PAINT.




Начало  Назад  Вперед



Книжный магазин