After initializing a DDF buffer with DdfInitialize, and loading a metafile with GpiLoadMetaFile, the example uses DdfMetafile to place a reference to the metafile in the DDF buffer. For a more detailed example and discussion of initializing DDF, see the DdfInitialize sample.
#define INCL_WINWINDOWMGR /* General window management */
#define INCL_WINMESSAGEMGR /* Message management */
#define INCL_DDF /* Dynamic Data Facility */
#define INCL_GPIMETAFILES /* MetaFiles */
#include <os2.h>
#include <pmhelp.h>
#define MF_HWND 0
#define ACVP_HAB 4
MRESULT WindowProc( HWND hwnd, ULONG ulMsg, MPARAM mp1, MPARAM mp2 )
{
HWND hwndParent;
HAB hab;
HWND hwndInstance; /* help instance window */
HDDF hDdf; /* DDF handle */
HMF hwndMetaFile; /* metafile handle */
switch( ulMsg )
{
case HM_QUERY_DDF_DATA:
/* get the help instance */
hwndParent = WinQueryWindow( hwnd, QW_PARENT );
hwndParent = WinQueryWindow( hwndParent, QW_PARENT );
hwndInstance = (HWND)WinSendMsg( hwndParent, HM_QUERY,
MPFROMSHORT( HMQW_INSTANCE ), NULL );
/* Allocate 1K Buffer (default) */
hDdf = DdfInitialize(
hwndInstance, /* Handle of help instance */
0L, /* Default buffer size */
0L /* Default increment */
);
if (hDdf == NULLHANDLE) /* Check return code */
{
return (MRESULT)FALSE;
}
/* get hab for this window */
if ((hab = (HAB)WinQueryWindowULong(hwnd, ACVP_HAB)) == NULLHANDLE)
{
return (MRESULT)FALSE;
}
/* Load the Metafile to display */
if ((hwndMetaFile = GpiLoadMetaFile(hab, "SAMP.MET")) == NULLHANDLE)
{
return (MRESULT)FALSE;
}
/* Save MetaFile hwnd in reserved word */
WinSetWindowULong(hwnd, MF_HWND, hwndMetaFile);
if (!DdfMetafile(hDdf, hwndMetaFile, NULL))
{
return (MRESULT)FALSE;
}
return (hDdf);
case WM_CLOSE:
GpiDeleteMetaFile((HMF)WinQueryWindowULong(hwnd, MF_HWND));
WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
return (MRESULT)TRUE;
}
return WinDefWindowProc( hwnd, ulMsg, mp1, mp2 );
}