/******************************Module*Header*******************************\ * Module Name: ftreg.c * * Region tests * * Created: 26-May-1991 13:07:35 * Author: Patrick Haluptzok patrickh * * Copyright (c) 1990 Microsoft Corporation \**************************************************************************/ #include "precomp.h" #pragma hdrstop VOID vTestRegion(HWND hwnd, HDC hdc, RECT* prcl) { HRGN hrgnRectangle; HRGN hrgnRoundRect; HRGN hrgnEllipse; HRGN hrgnComplex; HRGN hrgnComplex1; HRGN hrgnComplex2; HRGN hrgnComplex3; HRGN hrgnX; HRGN hrgnPath; DWORD dwBatch; HBRUSH hbrush; HBRUSH hbrushWhite; int iMapMode; RECT rc; BitBlt(hdc, prcl->left, prcl->top, prcl->right, prcl->bottom, 0, 0, 0, BLACKNESS); hbrush = GetStockObject(GRAY_BRUSH); hbrushWhite = GetStockObject(WHITE_BRUSH); { HRGN hrgnTmp = CreateRectRgn(0, 0, 100, 100); hrgnX = CreateRectRgn(100, 100, 250, 250); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, 250, 0); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, 0, 250); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, -250, 0); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, 50, -200); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, 150, 0); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, 0, 150); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); OffsetRgn(hrgnTmp, -150, 0); CombineRgn(hrgnX, hrgnX, hrgnTmp, RGN_OR); DeleteObject(hrgnTmp); OffsetRgn(hrgnX, 500, 500); hrgnTmp = CreateRectRgn(450, 450, 900, 900); CombineRgn(hrgnX, hrgnTmp, hrgnX, RGN_XOR); DeleteObject(hrgnTmp); } BeginPath(hdc); MoveToEx(hdc, 0, 0, NULL); LineTo(hdc, 50, 0); LineTo(hdc, 50, 100); LineTo(hdc, 100, 100); LineTo(hdc, 100, 0); LineTo(hdc, 150, 0); LineTo(hdc, 150, 50); LineTo(hdc, 0, 50); CloseFigure(hdc); MoveToEx(hdc, 200, 25, NULL); LineTo(hdc, 250, 25); LineTo(hdc, 250, 75); LineTo(hdc, 200, 75); CloseFigure(hdc); EndPath(hdc); hrgnPath = PathToRegion(hdc); OffsetRgn(hrgnPath, 100, 500); hrgnComplex = CreateRectRgn(100, 50, 350, 300); hrgnComplex1 = CreateRectRgn(300, 250, 450, 400); hrgnComplex2 = CreateEllipticRgn(150, 100, 300, 250); hrgnComplex3 = CreateEllipticRgn(200, 150, 250, 200); CombineRgn(hrgnComplex, hrgnComplex, hrgnComplex1, RGN_OR); CombineRgn(hrgnComplex, hrgnComplex, hrgnComplex2, RGN_DIFF); CombineRgn(hrgnComplex, hrgnComplex, hrgnComplex3, RGN_OR); hrgnRectangle = CreateRectRgn(100, 350, 200, 450); hrgnRoundRect = CreateRoundRectRgn(400, 50, 550, 200, 50, 50); hrgnEllipse = CreateEllipticRgn(500, 300, 600, 400); // GetRgnBox(hrgnRectangle, &rc); //DbgPrint("Rect: (%li, %li, %li, %li)\n", rc.left, rc.top, rc.right, rc.bottom); // if (rc.left != 100 || rc.top != 350 || rc.right != 199 || rc.bottom != 449) // DbgPrint("1 ERROR: GetRgnBox wrong for CreateRectRgn\n"); GetRgnBox(hrgnRoundRect, &rc); //DbgPrint("RoundRect: (%li, %li, %li, %li)\n", rc.left, rc.top, rc.right, rc.bottom); if (rc.left != 400 || rc.top != 50 || rc.right != 549 || rc.bottom != 199) DbgPrint("2 ERROR: GetRgnBox wrong for CreateRoundRectRgn\n"); GetRgnBox(hrgnEllipse, &rc); //DbgPrint("Ellipse: (%li, %li, %li, %li)\n", rc.left, rc.top, rc.right, rc.bottom); if (rc.left != 500 || rc.top != 300 || rc.right != 599 || rc.bottom != 399) DbgPrint("3 ERROR: GetRgnBox wrong for CreateEllipticRgn\n"); dwBatch = GdiSetBatchLimit(1); if (!FrameRgn(hdc, hrgnComplex, hbrush, 10, 10)) DbgPrint("4 ERROR: FrameRgn returned FALSE\n"); if (!FrameRgn(hdc, hrgnRectangle, hbrush, 20, 40)) DbgPrint("5 ERROR: FrameRgn returned FALSE\n"); if (!FrameRgn(hdc, hrgnRoundRect, hbrush, 40, 20)) DbgPrint("6 ERROR: FrameRgn returned FALSE\n"); if (!FrameRgn(hdc, hrgnEllipse, hbrush, 1, 20)) DbgPrint("7 ERROR: FrameRgn returned FALSE\n"); FillRgn(hdc, hrgnX, hbrush); if (!FrameRgn(hdc, hrgnX, hbrushWhite, 5, 5)) DbgPrint("8 ERROR: FrameRgn returned FALSE\n"); if (!FrameRgn(hdc, hrgnPath, hbrushWhite, 10, 10)) DbgPrint("9 ERROR: FrameRgn returned FALSE\n"); #if 0 iMapMode = SetMapMode(hdc, MM_TWIPS); if (!FrameRgn(hdc, hrgnRectangle, hbrush, 500, 500)) DbgPrint("10 ERROR: FrameRgn returned FALSE\n"); SetMapMode(hdc, iMapMode); #endif DeleteObject(hrgnRectangle); DeleteObject(hrgnRoundRect); DeleteObject(hrgnEllipse); DeleteObject(hrgnComplex); DeleteObject(hrgnComplex1); DeleteObject(hrgnComplex2); DeleteObject(hrgnComplex3); DeleteObject(hrgnX); DeleteObject(hrgnPath); GdiSetBatchLimit(dwBatch); return; }