To create a metafile, you must:
The following figure shows how to create a simple metafile that draws text within the borders of a three-color box.
#include <os2.h>void fncMETA01(void){
DEVOPENSTRUC dop;
HDC hdcMeta;
HPS hpsMeta;
HMF hmf;
HAB hab;
SIZEL sizlPage;
POINTL ptl;
dop.pszLogAddress = (PSZ) NULL;
dop.pszDriverName = "DISPLAY";
hdcMeta = DevOpenDC(hab,
OD_METAFILE, /* Metafile device context */
"*", /* Ignores OS2.INI */
2L, /* Uses first two fields */
(PDEVOPENDATA) &dop, /* Device information */
(HDC) NULLHANDLE); /* Compatible device context */
hpsMeta = GpiCreatePS(hab,
hdcMeta, /* Metafile device context */
&sizlPage, /* Page viewport */
PU_PELS | GPIA_ASSOC); /* Device units and associated context */
/* Draw a box in a metafile. */
GpiSetColor(hpsMeta, CLR_CYAN);
ptl.x = 150; ptl.y = 200;
GpiMove(hpsMeta, &ptl);
ptl.x = 300; ptl.y = 275;
GpiBox(hpsMeta, DRO_FILL, &ptl, 0L, 0L);
GpiSetColor(hpsMeta, CLR_GREEN);
ptl.x = 300; ptl.y = 200;
GpiMove(hpsMeta, &ptl);
ptl.x = 390; ptl.y = 275;
GpiBox(hpsMeta, DRO_FILL, &ptl, 0L, 0L);
GpiSetColor(hpsMeta, CLR_YELLOW);
ptl.x = 390; ptl.y = 200;
GpiMove(hpsMeta, &ptl);
ptl.x = 530; ptl.y = 275;
GpiBox(hpsMeta, DRO_FILL, &ptl, 0L, 0L);
ptl.x = 175; ptl.y = 230;
GpiMove(hpsMeta, &ptl);
GpiSetColor(hpsMeta, CLR_PINK);
GpiCharString(hpsMeta, 41,
"METAFILE COPY METAFILE COPY METAFILE COPY");
GpiAssociate(hpsMeta, (HDC) NULLHANDLE);
hmf = DevCloseDC(hdcMeta);
} /* fncMETA01 */
Creating a Metafile