The following figure is an example of how to create a custom fill pattern by using a hard-coded bit map. In this example, the bit map creates a pattern of arrows.
#define INCL_DOS #define INCL_GPI #define INCL_WIN #include <os2.h> LONG lcidCustom; /* Bit map tag */ HPS hps; VOID CreatePattern(VOID); VOID MyFunction(VOID){ CreatePattern(); GpiSetPatternSet(hps, lcidCustom); . . . } /* func */ VOID CreatePattern(VOID){ HBITMAP hbm; /* Bit map handle */ BITMAPINFOHEADER2 bmp2; /* Structure for bit map information */ PBITMAPINFO2 pbmi2; /* Pointer to structure for bit map data */ PRGB2 prgb2; /* Structure for color data */ ULONG cbBitmapInfo, cColors; BYTE abPattern[] = { 0xFF, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xC3, 0xFF, 0xC3, 0xFF, 0x81, 0xFF, 0x81, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF }; lcidCustom = 1; /* Bit map tag */ bmp2.cbFix = (ULONG) sizeof(BITMAPINFOHEADER2); bmp2.cx = 8; /* Bit map is 8 pels wide */ bmp2.cy = 8; /* Bit map is 8 pels high */ bmp2.cPlanes = 1; /* One bit plane */ bmp2.cBitCount = 1; /* One bit per pel */ /* Use default values for the remainder of the structure. */ bmp2.ulCompression = 0; bmp2.cbImage = 0; bmp2.cxResolution = 0; bmp2.cyResolution = 0; bmp2.cclrUsed = 0; bmp2.cclrImportant = 0; bmp2.usUnits = 0; bmp2.usReserved = 0; bmp2.usRecording = 0; bmp2.usRendering = 0; bmp2.cSize1 = 0; bmp2.cSize2 = 0; bmp2.ulColorEncoding = 0; bmp2.ulIdentifier = 0; cColors = 1 << (bmp2.cBitCount * bmp2.cPlanes); cbBitmapInfo = sizeof(BITMAPINFO2) + (sizeof(RGB2) * cColors); DosAllocMem((PVOID)&pbmi2, cbBitmapInfo, PAG_COMMIT | PAG_READ | PAG_WRITE); pbmi2->cbFix = bmp2.cbFix; pbmi2->cx = bmp2.cx; pbmi2->cy = bmp2.cy; pbmi2->cPlanes = bmp2.cPlanes; pbmi2->cBitCount = bmp2.cBitCount; /* Use default values for the remainder of the structure. */ pbmi2->ulCompression = 0; pbmi2->cbImage = 0; pbmi2->cxResolution = 0; pbmi2->cyResolution = 0; pbmi2->cclrUsed = 0; pbmi2->cclrImportant = 0; pbmi2->usUnits = 0; pbmi2->usReserved = 0; pbmi2->usRecording = 0; pbmi2->usRendering = 0; pbmi2->cSize1 = 0; pbmi2->cSize2 = 0; pbmi2->ulColorEncoding = 0; pbmi2->ulIdentifier = 0; prgb2 = (PRGB2) (pbmi2 + 1); /* Set address to follow bmp2 */ /* Set bit map colors to black and white. */ prgb2[0].bBlue = 0; /* Color[0] = black */ prgb2[0].bGreen = 0; /* Color[0] = black */ prgb2[0].bRed = 0; /* Color[0] = black */ prgb2[0].fcOptions = 0; prgb2[1].bBlue = 255; /* Color[1] = white */ prgb2[1].bGreen = 255; /* Color[1] = white */ prgb2[1].bRed = 255; /* Color[1] = white */ prgb2[1].fcOptions = 0; /* Create a bit map and retrieve its handle. */ hbm = GpiCreateBitmap(hps, &bmp2, CBM_INIT, (PBYTE) abPattern, /* Array of bits */ pbmi2); /* Tag the bit map just created with a custom identifier (lcid). */ GpiSetBitmapId(hps, hbm, lcidCustom); } /* CreatePattern */
Creating a Custom Fill Pattern from a Bit Map