The following figure is an example of how to create a custom fill pattern by using a character from a font. The fill pattern can be only an 8-by-8 bit map; as a result, not all of the character is used.
#define INCL_GPI
#define INCL_WIN
#include <os2.h>
HPS hps; /* Presentation-space handle */
LONG lcidCustom; /* Font identifier */
FONTMETRICS afm[80];
FATTRS fat;
VOID LoadFont(VOID);
void fncAREA05(void){
LoadFont();
GpiSetPatternSet(hps, lcidCustom);
GpiSetPattern(hps, 'o'); /* Use lowercase 'o' as fill */
.
.
.
} /* fncAREA05 */
VOID LoadFont(VOID){
LONG cFonts = 0;
LONG cPublicFonts, i;
lcidCustom = 1;
/* Determine the number of loaded public fonts. */
cPublicFonts = GpiQueryFonts(hps, QF_PUBLIC, NULL, (PLONG) &cFonts,
(LONG) (sizeof(FONTMETRICS)), NULL);
/* Load the metrics for all public fonts into afm. */
GpiQueryFonts(hps, QF_PUBLIC, NULL, (PLONG) &cPublicFonts,
(LONG) (sizeof(FONTMETRICS)), afm);
/* Get the first image font with a point size larger than 8. */
for (i = 0; ((afm[i].fsDefn & FM_DEFN_OUTLINE) ||
afm[i].lEmHeight <= 8) && i < cPublicFonts; i++);
/* Load the FATTRS structure with the required metrics. */
fat.usRecordLength = sizeof(fat);
fat.fsSelection = 0;
fat.lMatch = afm[i].lMatch;
StringCopy(fat.szFacename, afm[i].szFacename);
fat.idRegistry = 0;
fat.usCodePage = 0;
fat.lMaxBaselineExt = 0;
fat.lAveCharWidth = 0;
fat.fsType = 0;
fat.fsFontUse = 0;
/* Select this font and assign it a custom lcid. */
GpiCreateLogFont(hps, NULL, lcidCustom, &fat);
GpiSetCharSet(hps, lcidCustom);
} /* LoadFont */
Creating a Custom Fill Pattern from a Font Character