After initializing a DDF buffer with DdfInitialize, the example uses DdfBeginList to indicate the beginning of a definition list in the DDF buffer (this corresponds to the IPF dl tag). 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 */
#include <os2.h>
#include <pmhelp.h>
struct _LISTITEM /* definition list */
{
PSZ Term;
PSZ Desc;
} Definition[2] = {{"MVS", "Multiple Virtual System"},
{"VM", "Virtual Machine"}};
MRESULT WindowProc( HWND hwnd, ULONG ulMsg, MPARAM mp1, MPARAM mp2)
{
HWND hwndParent;
HWND hwndInstance;
HDDF hDdf; /* DDF handle */
SHORT i; /* loop index */
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;
}
/* begin definition list */
if (!DdfBeginList(hDdf, 3L, HMBT_ALL, HMLS_SINGLELINE))
{
return (MRESULT)FALSE;
}
/* insert 2 entries into definition list */
for (i=0; i < 2; i++)
{
if (!DdfListItem(hDdf, Definition[i].Term,
Definition[i].Desc))
{
return (MRESULT)FALSE;
}
}
/* terminate definition list */
if (!DdfEndList(hDdf))
{
return (MRESULT)FALSE;
}
return (MRESULT)hDdf;
}
}