The following figure shows how to select a Helvetica outline font, set the size of the character box, change the foreground color to red, set the character angle, and move the cursor to a specified location. Then, GpiCharString is used to write a string of characters with the specified size, color, angle, and location.

#define INCL_GPIPRIMITIVES
#define INCL_GPILCIDS
#include <os2.h>
void fncFONT09(void){

    POINTL ptl = { 100, 50 };
    GRADIENTL grad = { 4, 1 };
    SIZEF sizfx;
    FATTRS fat;
    CHARBUNDLE cbnd;
    FONTMETRICS afm[80];
    HPS hps;
    HDC hdc;
    LONG cHelvFonts, i;
    LONG cFonts = 0;
    LONG lcid = 1;
    LONG devRes[2];               /* Horizontal, vertical font resolutions */

    cHelvFonts = GpiQueryFonts(hps, QF_PUBLIC, "Helv",
        &cFonts, sizeof(FONTMETRICS), NULL);

    GpiQueryFonts(hps, QF_PUBLIC, "Helv", &cHelvFonts,
        sizeof(FONTMETRICS), afm);
                                  /* Find an outline Helvetica font.       */

    for (i = 0; (!(afm[i].fsDefn & FM_DEFN_OUTLINE)) &&
               i < cHelvFonts; i++)    ;

    fat.usRecordLength = sizeof(FATTRS);
    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 = FATTR_FONTUSE_OUTLINE;

    GpiCreateLogFont(hps, (PSTR8) NULL, lcid, &fat);
    GpiSetCharSet(hps, lcid);

    DevQueryCaps(hdc, CAPS_HORIZONTAL_FONT_RES, 2L, devRes);
    sizfx.cx = MAKEFIXED((afm[i].sNominalPointSize * devRes[0])/ 720, 0);
    sizfx.cy = MAKEFIXED((afm[i].sNominalPointSize * devRes[1])/ 720, 0);
    GpiSetCharBox(hps, &sizfx);

    cbnd.lColor = CLR_RED;
    GpiSetAttrs(hps, PRIM_CHAR, CBB_COLOR, NULLHANDLE, &cbnd);
    GpiSetCharAngle(hps, &grad);
    GpiMove(hps, &ptl);
    GpiCharString(hps, 11, "Vector Text");
} /* fncFONT09 */

Certain parameters in the above example are explained in Fonts.


[Back] [Next]