/****************************************************************************
Copyright(c) Maynard, an Archive Company. 1991

     Name:          DLM.H

     Description:   This header file contains prototypes for the
                    display list manager.

     $Log:   G:/UI/LOGFILES/DLM.H_V  $

   Rev 1.24   15 Jun 1993 09:58:08   MIKEP
enable c++

   Rev 1.23   28 Apr 1993 15:36:00   GLENN
Added DLM_GetPixelStringWidth() for column width calculations.

   Rev 1.22   02 Apr 1993 15:53:14   ROBG
Changed FocusItem to be UINT for both NT and WINDOWS.

   Rev 1.21   10 Feb 1993 13:09:18   ROBG
Added conditional OS_WIN32 to definition of szText buffer.
This static buffer is used by application code to pass
text strings to the DLM.  One buffer per object.

   Rev 1.20   21 Dec 1992 12:28:58   DAVEV
Enabled for Unicode - IT WORKS!!

   Rev 1.19   11 Dec 1992 18:31:08   GLENN
Fixed horizontal spelling and ColWidth spelling.

   Rev 1.18   14 Oct 1992 15:49:10   GLENN
Added Selection Framing Support for List Boxes without the FOCUS.

   Rev 1.17   04 Oct 1992 19:46:48   DAVEV
UNICODE AWK PASS

   Rev 1.16   08 Sep 1992 09:24:36   ROBG
Changed the x and y positional variables to short from USHORT.

   Rev 1.15   20 Aug 1992 11:50:00   ROBG
Added function DLM_SetFont to support the modification of fonts in the
listboxes.

   Rev 1.14   19 Mar 1992 09:12:04   ROBG
Added new routine prototype for DLM_SetHorizontalExt.

   Rev 1.13   10 Feb 1992 09:17:52   GLENN
Changed DLM_KeyUp to receive a pointer to the key.

   Rev 1.12   26 Dec 1991 16:01:10   ROBG
Removed reference to DLM_ROW_VECTOR.

   Rev 1.11   26 Dec 1991 10:20:34   ROBG
Removed define for DLM_LARGEBITMTAPSSTEXT.

   Rev 1.10   19 Dec 1991 08:52:00   ROBG
Added prototype for DLM_Deinit.

   Rev 1.9   17 Dec 1991 18:03:00   ROBG
Corrected misspellings in DLM_Get, SetCheckboxWidth/Height.

   Rev 1.8   17 Dec 1991 15:08:52   ROBG
Changed usDummy field to a define field of 'usTrkPtFailure'.

   Rev 1.7   17 Dec 1991 14:01:20   ROBG
Moved from private header file DLM_GetDispHdr.

   Rev 1.6   16 Dec 1991 09:42:02   ROBG
Added routine DLM_GetObjectList.

   Rev 1.5   12 Dec 1991 17:11:58   DAVEV
16/32 bit port -2nd pass

   Rev 1.4   10 Dec 1991 14:19:34   GLENN
Added DLM_MULTICOLUMN same as DLM_COLUMN_VECTOR

   Rev 1.3   03 Dec 1991 16:13:54   GLENN
Added DLM_CharToItem() prototype.

   Rev 1.2   02 Dec 1991 13:13:18   ROBG
Added some new style macros.

   Rev 1.1   27 Nov 1991 10:33:46   ROBG
Changed dlm_displistterm prototype.

   Rev 1.0   20 Nov 1991 19:34:04   SYSTEM
Initial revision.

****************************************************************************/

#ifndef dlm_h
#define dlm_h

#define DLM_SINGLECOLUMN      1
#define DLM_MULTICOLUMN       2
#define DLM_COLUMN_VECTOR     DLM_MULTICOLUMN
#define DLM_HIERARCHICAL      4

#define DLM_LARGEBITMAPSLTEXT 1          /* Text to the right of bitmap */
#define DLM_SMALL_BITMAPS     3
#define DLM_ICONS             4

#define DLM_CHECKBOX          1
#define DLM_BITMAP            2
#define DLM_ICON              3
#define DLM_TEXT_ONLY         4

#define DLM_TREELISTBOX       1
#define DLM_FLATLISTBOX       2
                                         /* bTextMode bits */
#define DLM_TEXT_RIGHT_OF_ITEM  BIT0
#define DLM_ITALIC              BIT1
#define DLM_UNDERLINE           BIT2
#define DLM_BOLD                BIT3
#define DLM_RIGHT_JUSTIFY       BIT4
#define DLM_LEFT_JUSTIFY        BIT5


#define DLM_ANSI_FIXED_FONT        0
#define DLM_ANSI_VAR_FONT          1
#define DLM_DEVICEDEFAULT_FONT     2
#define DLM_OEM_FIXED_FONT         3
#define DLM_SYSTEM_FONT            4

// LIST BOX SCROLL TYPES -- OTHERS CAN BE ADDED AS NEEDED

#define DLM_SCROLLTOP              SB_TOP
#define DLM_SCROLLBOTTOM           SB_BOTTOM

#define DLMERR_OUT_OF_MEMORY       1
#define DLMERR_TERMINATE_FAILED    2
#define DLMERR_PROCESS_FAILED      3
#define DLMERR_LIST_NOT_FOUND      4
#define DLMERR_INIT_FAILED         5


typedef struct _DLM_ITEM {
     BYTE      cbNum ;        /*  Number of item in sequential list.    */
     BYTE      bType;         /*  Type of object to display.            */
                              /*  Not Used fdor parent list items.      */
                              /*  For Parent list items:                */
                              /*   BIT0 Displayed status.               */
                              /*        1 if displayed, else 0.         */
                              /*   BIT1 Tagged status.                  */
                              /*        1 if tagged, else 0.            */
     WORD      wId ;          /*  Id of a bitmap or icon                */
     BYTE      bTextMode ;    /*  Where to place the text and style     */
     BYTE      bMaxTextLen;   /*  Maximum Length in characters of text. */
                              /*  This length is used to determine      */
                              /*  row or column sizes so that high-     */
                              /*  lighting may occur for a fixed region.*/
     BYTE      bLevel ;       /*  In a hierarchical list, the entry     */
                              /*  will help identify the indentation    */
                              /*  of the item.                          */
     BYTE      bTag ;         /*  Tag state 0:no  1:yes                 */

#if defined( OS_WIN32 )
     BYTE      szText[600] ;  /*  Allow for very long name with NT      */
#else
     BYTE      szText[133] ;
#endif

    } DLM_ITEM, *DLM_ITEM_PTR ;


typedef USHORT (*GET_COUNT_PTR)    ( LMHANDLE dhListHdr  ) ;
typedef PVOID  (*GET_FIRST_PTR)    ( LMHANDLE dhListHdr  ) ;
typedef PVOID  (*GET_NEXT_PTR)     ( LMHANDLE dhListItem ) ;
typedef PVOID  (*GET_PREV_PTR)     ( LMHANDLE dhListItem ) ;
typedef BYTE   (*GET_TAG_PTR)      ( LMHANDLE dhListItem ) ;
typedef PVOID  (*SET_TAG_PTR)      ( LMHANDLE dhListItem, BYTE fTag ) ;
typedef BYTE   (*GET_SELECT_PTR)   ( LMHANDLE dhListItem ) ;
typedef PVOID  (*SET_SELECT_PTR)   ( LMHANDLE dhListItem, BYTE fSelect ) ;
typedef PVOID  (*GET_OBJECTS_PTR)  ( LMHANDLE dhListItem ) ;
typedef BOOL   (*SET_OBJECTS_PTR)  ( LMHANDLE dhListItem, WORD bOperation, WORD bObjectNum ) ;
typedef PVOID  (*SET_FOCUS_PTR)    ( LMHANDLE dhListItem ) ;


typedef struct _DLM_HEADER {
     BYTE            bMode ;
     BYTE            bDisplay ;
     BYTE            bListBoxType ;
     VOID_PTR        lpdsListHdr ;
     WORD            nTextFont ;
     GET_COUNT_PTR   pfnGetItemCount ;
     GET_FIRST_PTR   pfnGetFirstItem ;
     GET_NEXT_PTR    pfnGetNext ;
     GET_PREV_PTR    pfnGetPrev ;
     GET_TAG_PTR     pfnGetTag ;
     SET_TAG_PTR     pfnSetTag ;
     GET_SELECT_PTR  pfnGetSelect ;
     SET_SELECT_PTR  pfnSetSelect ;
     GET_OBJECTS_PTR pfnGetObjects ;
     SET_OBJECTS_PTR pfnSetObjects ;
     SET_FOCUS_PTR   pfnSetItemFocus ;
     BYTE            bMaxNumObjects ;

     USHORT          cxColWidth ;
     USHORT          cyColHeight ;

     USHORT          cxCheckBoxWidth ;
     USHORT          cyCheckBoxHeight ;
     USHORT          cxBitMapWidth ;
     USHORT          cyBitMapHeight ;
     USHORT          cxTextWidth ;
     USHORT          cyTextHeight ;

     short           cxBeforeCheckBox ;
     short           cxBeforeBitMap ;
     short           cxBeforeText ;

     short           cyBeforeCheckBox ;
     short           cyBeforeBitMap ;
     short           cyBeforeText ;

     USHORT          cxHierTab ;
     USHORT          cxHierHorzLine ;
     USHORT          cxHierHorzLen ;
     USHORT          cLastTreeSelect ;

     USHORT          usItemCount ;

     UINT            unFocusItem ;
     USHORT          usTrkPtFailure ;

     short           nMaxWidth ;

     LMHANDLE        dhAnchorItem ;
     USHORT          iAnchorItem ;

     BYTE            fKeyDown ;
     BYTE            fKeyUp ;
     WORD            wKeyValue ;

     WORD            wHorizontalExtent ;
     WORD            xOrigin ;

     WORD            fFocus ;
     WORD            hWndFocus ;
     PVOID           pGetObjBuffer;

} DLM_HEADER, *DLM_HEADER_PTR ;

typedef struct _DLM_INIT {
     BYTE            bMode ;
     BYTE            bDisplay ;
     BYTE            bListBoxType ;
     VOID_PTR        lpdsListHdr ;
     WORD            nTextFont ;
     GET_COUNT_PTR   pfnGetItemCount ;
     GET_FIRST_PTR   pfnGetFirstItem ;
     GET_NEXT_PTR    pfnGetNext ;
     GET_PREV_PTR    pfnGetPrev ;
     GET_TAG_PTR     pfnGetTag ;
     SET_TAG_PTR     pfnSetTag ;
     GET_SELECT_PTR  pfnGetSelect ;
     SET_SELECT_PTR  pfnSetSelect ;
     GET_OBJECTS_PTR pfnGetObjects ;
     SET_OBJECTS_PTR pfnSetObjects ;
     SET_FOCUS_PTR   pfnSetItemFocus ;
     BYTE            bMaxNumObjects ;
} DLM_INIT, *DLM_INIT_PTR ;


#define DLM_Mode( p, x )            ( (p)->bMode           = x )
#define DLM_Display( p, x )         ( (p)->bDisplay        = x )
#define DLM_ListBoxType( p, x )     ( (p)->bListBoxType    = x )
#define DLM_DispHdr( p, x )         ( (p)->lpdsListHdr     = (VOID_PTR)        x )
#define DLM_TextFont( p, x )        ( (p)->nTextFont       = (WORD)            x )
#define DLM_GetItemCount( p, x )    ( (p)->pfnGetItemCount = (GET_COUNT_PTR)   x )
#define DLM_GetFirstItem( p, x )    ( (p)->pfnGetFirstItem = (GET_FIRST_PTR)   x )
#define DLM_GetNext( p, x )         ( (p)->pfnGetNext      = (GET_NEXT_PTR)    x )
#define DLM_GetPrev( p, x )         ( (p)->pfnGetPrev      = (GET_PREV_PTR)    x )
#define DLM_GetTag( p, x )          ( (p)->pfnGetTag       = (GET_TAG_PTR)     x )
#define DLM_SetTag( p, x )          ( (p)->pfnSetTag       = (SET_TAG_PTR)     x )
#define DLM_GetSelect( p, x )       ( (p)->pfnGetSelect    = (GET_SELECT_PTR)  x )
#define DLM_SetSelect( p, x )       ( (p)->pfnSetSelect    = (SET_SELECT_PTR)  x )
#define DLM_GetObjects( p, x )      ( (p)->pfnGetObjects   = (GET_OBJECTS_PTR) x )
#define DLM_SetObjects( p, x )      ( (p)->pfnSetObjects   = (SET_OBJECTS_PTR) x )
#define DLM_SSetItemFocus( p, x )   ( (p)->pfnSetItemFocus = (SET_FOCUS_PTR)   x )
#define DLM_MaxNumObjects( p, x )   ( (p)->bMaxNumObjects  = x )
#define DLM_GetObjBuffer( p, x )    ( (p)->pGetObjBuffer   = (VOID_PTR         x )

#define DLM_GMode( p )             (p)->bMode
#define DLM_GDisplay( p )          (p)->bDisplay
#define DLM_GListBoxType( p )      (p)->bListBoxType
#define DLM_GDispHdr( p )          (p)->lpdsListHdr
#define DLM_GTextFont( p )         (p)->nTextFont
#define DLM_GGetItemCount( p )     (p)->pfnGetItemCount
#define DLM_GGetFirstItem( p )     (p)->pfnGetFirstItem
#define DLM_GGetNext( p )          (p)->pfnGetNext
#define DLM_GGetPrev( p )          (p)->pfnGetPrev
#define DLM_GGetTag( p )           (p)->pfnGetTag
#define DLM_GSetTag( p )           (p)->pfnSetTag
#define DLM_GGetSelect( p )        (p)->pfnGetSelect
#define DLM_GSetSelect( p )        (p)->pfnSetSelect
#define DLM_GGetObjects( p )       (p)->pfnGetObjects
#define DLM_GSetObjects( p )       (p)->pfnSetObjects
#define DLM_GSetItemFocus( p )     (p)->pfnSetItemFocus
#define DLM_GMaxNumObjects( p )    (p)->bMaxNumObjects
#define DLM_GGetObjBuffer( p )     (p)->pGetObjBuffer

// New macros for accessing the fields in DLM_ITEM and DLM_HEADER.

#define DLM_GetMode( x )                 ( (x)->bMode )
#define DLM_SetMode( x, y )              ( (x)->bMode = (y) )

#define DLM_GetDisplay( x )              ( (x)->bDisplay )
#define DLM_SetDisplay( x, y )           ( (x)->bDisplay = (y) )

#define DLM_GetListBoxType( x )          ( (x)->bListBoxType )
#define DLM_SetListBoxType( x, y )       ( (x)->bListBoxType = (y) )

#define DLM_GetDisplayHdr( x )           ( (x)->lpdsListHdr )
#define DLM_SetDisplayHdr( x, y )        ( (x)->lpdsListHdr = (PVOID) (y) )

#define DLM_GetTextFont( x )             ( (x)->nTextFont )
#define DLM_SetTextFont( x, y )          ( (x)->nTextFont = (WORD) (y) )

#define DLM_GetFnGetItemCount( x )       ( (x)->pfnGetItemCount )
#define DLM_SetFnGetItemCount( x, y )    ( (x)->pfnGetItemCount = (GET_COUNT_PTR) (y) )

#define DLM_GetFnGetFirstItem( x )       ( (x)->pfnGetFirstItem )
#define DLM_SetFnGetFirstItem( x, y )    ( (x)->pfnGetFirstItem = (GET_FIRST_PTR) (y) )

#define DLM_GetFnGetNext( x )            ( (x)->pfnGetNext )
#define DLM_SetFnGetNext( x, y )         ( (x)->pfnGetNext = (GET_NEXT_PTR (y) )

#define DLM_GetFnGetPrev( x )            ( (x)->pfnGetPrev )
#define DLM_SetFnGetPrev( x, y )         ( (x)->pfnGetPrev = (GET_PREV_PTR (y) )

#define DLM_GetFnGetTag( x )             ( (x)->pfnGetTag )
#define DLM_SetFnGetTag( x, y )          ( (x)->pfnGetTag = (GET_TAG_PTR (y) )

#define DLM_GetFnSetTag( x )             ( (x)->pfnSetTag )
#define DLM_SetFnSetTag( x, y )          ( (x)->pfnSetTag = (SET_TAG_PTR (y) )

#define DLM_GetFnGetSelect( x )          ( (x)->pfnGetSelect )
#define DLM_SetFnGetSelect( x, y )       ( (x)->pfnGetSelect = (GET_SELECT_PTR (y) )

#define DLM_GetFnSetSelect( x )          ( (x)->pfnSetSelect )
#define DLM_SetFnSetSelect( x, y )       ( (x)->pfnSetSelect = (SET_SELECT_PTR (y) )

#define DLM_GetFnGetObjects( x )         ( (x)->pfnGetObjects )
#define DLM_SetFnGetObjects( x, y )      ( (x)->pfnGetObjects = (GET_OBJECTS_PTR (y) )

#define DLM_GetFnSetObjects( x )         ( (x)->pfnSetObjects )
#define DLM_SetFnSetObjects( x, y )      ( (x)->pfnSetObjects = (SET_OBJECTS_PTR (y) )

#define DLM_GetFnSetItemFocus( x )       ( (x)->pfnSetItemFocus )
#define DLM_SetFnSetItemFocus( x, y )    ( (x)->pfnSetItemFocus = (SET_FOCUS_PTR (y) )

#define DLM_GetMaxNumObjects( x )        ( (x)->bMaxNumObjects )
#define DLM_SetMaxNumObjects( x, y )     ( (x)->bMaxNumObjects = (y) )

#define DLM_GetBufferForObjects( x )     ( (x)->pGetObjBuffer )
#define DLM_SetBufferForObjects( x, y )  ( (x)->pGetObjBuffer = (PVOID) (y) )

#define DLM_GetColWidth( x )             ( (x)->cxColWidth )
#define DLM_SetColWidth( x, y )          ( (x)->cxColWidth = (USHORT) (y) )

#define DLM_GetColHeight( x )            ( (x)->cyColHeight )
#define DLM_SetColHeight( x, y )         ( (x)->cyColHeight = (USHORT) (y) )

#define DLM_GetCheckBoxWidth( x )        ( (x)->cxCheckBoxWidth )
#define DLM_SetCheckBoxWidth( x, y )     ( (x)->cxCheckBoxWidth = (USHORT) (y) )

#define DLM_GetCheckBoxHeight( x )       ( (x)->cyCheckBoxHeight )
#define DLM_SetCheckBoxHeight( x, y )    ( (x)->cyCheckBoxHeight = (USHORT) (y) )

#define DLM_GetBitMapWidth( x )        ( (x)->cxBitMapWidth )
#define DLM_SetBitMapWidth( x, y )     ( (x)->cxBitMapWidth = (USHORT) (y) )

#define DLM_GetBitMapHeight( x )       ( (x)->cyBitMapHeight )
#define DLM_SetBitMapHeight( x, y )    ( (x)->cyBitMapHeight = (USHORT) (y) )

#define DLM_GetTextWidth( x )        ( (x)->cxTextWidth )
#define DLM_SetTextWidth( x, y )     ( (x)->cxTextWidth = (USHORT) (y) )

#define DLM_GetTextHeight( x )       ( (x)->cyTextHeight )
#define DLM_SetTextHeight( x, y )    ( (x)->cyTextHeight = (USHORT) (y) )

#define DLM_GetTrkPtFailure( x )     ( (x)->usTrkPtFailure )
#define DLM_SetTrkPtFailure( x, y )  ( (x)->usTrkPtFailure = (USHORT) (y) )

// Used by DLM only.  Relates to the DLM_HEADER structure.

#define DLM_HdrFirstItem( p )      (p)->dhFirstItem
#define DLM_HdrLastItem( p )       (p)->dhLastItem
#define DLM_HdrFirstDisp( p )      (p)->dhFirstDisp
#define DLM_HdrLastDisp( p )       (p)->dhLastDisp
#define DLM_HdrAnchorItem p )      (p)->dhAnchorItem


// Used to access DLM_ITEM */

#define DLM_ItemcbNum( p )         (p)->cbNum
#define DLM_ItembType( p )         (p)->bType
#define DLM_ItemwId( p )           (p)->wId
#define DLM_ItembTextMode( p )     (p)->bTextMode
#define DLM_ItembMaxTextLen( p )   (p)->bMaxTextLen
#define DLM_ItembLevel( p )        (p)->bLevel
#define DLM_ItembTag( p )          (p)->bTag
#define DLM_ItemqszString( p )     (p)->szText

// New macros for accessing the fields in DLM_ITEM

#define  DLM_GetItemNumber( x )        ( (x)->cbNum )
#define  DLM_SetItemNumber( x, y )     ( (x)->cbNum = (y) )

#define  DLM_GetItemType( x )          ( (x)->bType )
#define  DLM_SetItemType( x, y )       ( (x)->bType = (y) )

#define  DLM_GetItemId( x )            ( (x)->wId )
#define  DLM_SetItemId( x, y )         ( (x)->wId = (y) )

#define  DLM_GetItemTextMode( x )      ( (x)->bTextMode )
#define  DLM_SetItemTextMode( x, y )   ( (x)->bTextMode = (y) )

#define  DLM_GetItemMaxTextLen( x )    ( (x)->bMaxTextLen )
#define  DLM_SetItemMaxTextLen( x, y ) ( (x)->bMaxTextLen = (y) )

#define  DLM_GetItemLevel( x )        ( (x)->bLevel )
#define  DLM_SetItemLevel( x, y )     ( (x)->bLevel = (y) )

#define  DLM_GetItemTag( x )           ( (x)->bTag )
#define  DLM_SetItemTag( x, y )        ( (x)->bTag = (y) )

#define  DLM_GetItemText( x )          ( (x)->szText )
#define  DLM_SetItemText( x, y )       ( lstrcpy ( (x)->szText, (y) ) )

VOID  DLM_Deinit           ( VOID ) ;
WORD  DLM_Init             ( HWND hWnd ) ;
WORD  DLM_DispListInit     ( PVOID pWinInfo, DLM_INIT_PTR pdsInit ) ;
WORD  DLM_DispListTerm     ( PVOID pWinInfo, HWND hWndCtl ) ;
WORD  DLM_DispListProc     ( HWND hWndCtl, WORD iAnchorIndex, LMHANDLE dhAnchorHandle ) ;
WORD  DLM_DispListModeGet  ( HWND hWnd, BYTE bType, LPBYTE lpbMode ) ;
WORD  DLM_DispListModeSet  ( HWND hWnd, BYTE bType, BYTE bMode ) ;
WORD  DLM_SetAnchor        ( HWND hWndCtl, WORD iAnchorItem, LMHANDLE dhAnchorAddr ) ;
WORD  DLM_Update           ( HWND hWnd, BYTE bType, WORD wMsg, LMHANDLE dhStartItem, USHORT usCnt ) ;
WORD  DLM_UpdateFocus      ( HWND hWndLB, BOOL fSetFocus ) ;
WORD  DLM_UpdateTags       ( HWND hWnd, BYTE bType ) ;

WORD  DLM_WMSize           ( HWND hWnd, MP1 mp1, MP2 mp2 ) ;
WORD  DLM_WMDestroy        ( HWND hWnd ) ;
WORD  DLM_WMLButton        ( HWND hWnd, WORD wMsg, MP1 mp1, MP2 mp2 ) ;
WORD  DLM_WMDrawItem       ( HWND hWnd, LPDRAWITEMSTRUCT lpdis ) ;
WORD  DLM_WMMeasureItem    ( HWND hWnd, LPMEASUREITEMSTRUCT lParam ) ;
WORD  DLM_WMDeleteItem     ( HWND hWnd, LPDELETEITEMSTRUCT  lParam ) ;
WORD  DLM_LBNmessages      ( HWND hWnd, MP1 mp1, MP2 mp2 ) ;
BOOL  DLM_KeyDown          ( HWND hWnd, LPWORD pwKey, MP2 mp2 ) ;
BOOL  DLM_KeyUp            ( HWND hWnd, LPWORD pwKey, MP2 mp2 ) ;
WORD  DLM_WMTrackPoint     ( HWND hWnd, MP1 mp1, MP2 mp2 ) ;
BOOL  DLM_CursorInCheckBox ( HWND hWnd, POINT pt ) ;
PVOID DLM_GetObjectsBuffer ( HWND hWndCtl ) ;
VOID  DLM_ScrollListBox    ( HWND hWnd, WORD wType ) ;
PVOID DLM_GetFocusItem     ( HWND hWndCtl ) ;
VOID  DLM_SetFocusItem     ( LPDRAWITEMSTRUCT lpdis, LPRECT prcItem ) ;
BOOL  DLM_CharToItem       ( HWND hWndListBox, DLM_HEADER_PTR pHdr, LPWORD pwKey ) ;
VOID  DLM_SetHorizontalExt ( HWND hWndCtl, DLM_HEADER_PTR pHdr , PVOID pListItem ) ;
VOID  DLM_SetFont          ( HWND hWnd ) ;

INT   DLM_GetPixelStringWidth ( HWND hWndLB, LPSTR lpString, INT nStringLen );

DLM_ITEM_PTR   DLM_GetFirstObject( LPBYTE  lpObjLst , LPBYTE bpObjCnt ) ;
DLM_HEADER_PTR DLM_GetDispHdr( HWND hWndCtl ) ;

#endif