You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
7.9 KiB
237 lines
7.9 KiB
//============================================================================
|
|
// Copyright (c) 1995, Microsoft Corporation
|
|
//
|
|
// File: treelist.h
|
|
//
|
|
// History:
|
|
// Abolade Gbadegesin Nov-20-1995 Created.
|
|
//
|
|
// The control whose declarations are included here provides a view
|
|
// which is a hybrid treeview/listview. Like a listview, each item
|
|
// may have zero or more subitems. Like a treeview, items are organized
|
|
// hierarchically, and displayed as a n-ary tree.
|
|
//
|
|
// [ Header1 ][ Header2
|
|
// -- Level 1 subtext
|
|
// |- Level 2 subtext
|
|
// | |- Level 3
|
|
// | +- Level 3
|
|
// |- Level 2 subtext
|
|
// +- Level 2
|
|
// +- Level 1 subtext
|
|
//
|
|
//
|
|
// The control is implemented as window which provides item-management,
|
|
// and which contains a listview window to which display is delegated.
|
|
//
|
|
// Once the window class has been initialized by calling TL_Init(),
|
|
// a treelist window can be created by calling CreateWindow() or
|
|
// CreateWindowEx() and passing it WC_TREELIST as the name of the class
|
|
// of window to be created.
|
|
//
|
|
// Communication with the window is via message passing, and macros are
|
|
// provided below for the operations supported by the treelist.
|
|
//
|
|
// As with a listview, at least one column must be inserted into the treelist
|
|
// before inserted items are displayed. Columns are described using
|
|
// the LV_COLUMN structure defined in commctrl.h. Use the macros
|
|
// TreeList_InsertColumn() and TreeList_DeleteColumn() for column management.
|
|
//
|
|
// Item insertion and deletion shoudl be done with TreeList_InsertItem() and
|
|
// TreeList_DeleteItem(). The insertion macro takes a TL_INSERTSTRUCT,
|
|
// which contains a pointer to a LV_ITEM structure which, as with listviews,
|
|
// is used to describe the item to be inserted. The LV_ITEM structure
|
|
// is defined in commctrl.h. (Note the iItem field is ignored).
|
|
// As with a treeview, once items have been inserted, there are referred to
|
|
// via handles. The type for treelist handles is HTLITEM.
|
|
//
|
|
// Once an item has been inserted, its attributes can be retreived or changed,
|
|
// it can be deleted, and subitems can be set for it. The LV_ITEM structure
|
|
// is used to retrieve or set an items attributes, and the iItem field
|
|
// is used to store the HTLITEM of the item to which the operation refers.
|
|
//
|
|
//============================================================================
|
|
|
|
|
|
#ifndef _TREELIST_H_
|
|
#define _TREELIST_H_
|
|
|
|
|
|
//
|
|
// Window class name string
|
|
//
|
|
|
|
#define WC_TREELIST TEXT("TreeList")
|
|
|
|
|
|
//
|
|
// Item handle definition
|
|
//
|
|
|
|
typedef VOID *HTLITEM;
|
|
|
|
|
|
//
|
|
// struct passed to TreeList_InsertItem
|
|
//
|
|
|
|
typedef struct _TL_INSERTSTRUCT {
|
|
|
|
HTLITEM hParent;
|
|
HTLITEM hInsertAfter;
|
|
LV_ITEM *plvi;
|
|
|
|
} TL_INSERTSTRUCT;
|
|
|
|
|
|
|
|
//
|
|
// values for TL_INSERTSTRUCT::hInsertAfter
|
|
//
|
|
|
|
#define TLI_FIRST ((HTLITEM)UlongToPtr(0xffff0001))
|
|
#define TLI_LAST ((HTLITEM)UlongToPtr(0xffff0002))
|
|
#define TLI_SORT ((HTLITEM)UlongToPtr(0xffff0003))
|
|
|
|
|
|
//
|
|
// struct sent in notifications by a treelist
|
|
//
|
|
|
|
typedef struct _NMTREELIST {
|
|
|
|
NMHDR hdr;
|
|
HTLITEM hItem;
|
|
LPARAM lParam;
|
|
|
|
} NMTREELIST;
|
|
|
|
|
|
//
|
|
// flags for TreeList_GetNextItem
|
|
//
|
|
|
|
#define TLGN_FIRST 0x0000
|
|
#define TLGN_PARENT 0x0001
|
|
#define TLGN_CHILD 0x0002
|
|
#define TLGN_NEXTSIBLING 0x0004
|
|
#define TLGN_PREVSIBLING 0x0008
|
|
#define TLGN_ENUMERATE 0x0010
|
|
#define TLGN_SELECTION 0x0020
|
|
|
|
|
|
//
|
|
// flags for TreeList_Expand
|
|
//
|
|
|
|
#define TLE_EXPAND 0x0001
|
|
#define TLE_COLLAPSE 0x0002
|
|
#define TLE_TOGGLE 0x0003
|
|
|
|
|
|
#define TLM_FIRST (WM_USER + 1)
|
|
#define TLM_INSERTITEM (TLM_FIRST + 0)
|
|
#define TLM_DELETEITEM (TLM_FIRST + 1)
|
|
#define TLM_DELETEALLITEMS (TLM_FIRST + 2)
|
|
#define TLM_GETITEM (TLM_FIRST + 3)
|
|
#define TLM_SETITEM (TLM_FIRST + 4)
|
|
#define TLM_GETITEMCOUNT (TLM_FIRST + 5)
|
|
#define TLM_GETNEXTITEM (TLM_FIRST + 6)
|
|
#define TLM_EXPAND (TLM_FIRST + 7)
|
|
#define TLM_SETIMAGELIST (TLM_FIRST + 8)
|
|
#define TLM_GETIMAGELIST (TLM_FIRST + 9)
|
|
#define TLM_INSERTCOLUMN (TLM_FIRST + 10)
|
|
#define TLM_DELETECOLUMN (TLM_FIRST + 11)
|
|
#define TLM_SETSELECTION (TLM_FIRST + 12)
|
|
#define TLM_REDRAW (TLM_FIRST + 13)
|
|
#define TLM_ISITEMEXPANDED (TLM_FIRST + 14)
|
|
#define TLM_GETCOLUMNWIDTH (TLM_FIRST + 15)
|
|
#define TLM_SETCOLUMNWIDTH (TLM_FIRST + 16)
|
|
|
|
#define TLN_FIRST (0U - 1000U)
|
|
#define TLN_DELETEITEM (TLN_FIRST - 1)
|
|
#define TLN_SELCHANGED (TLN_FIRST - 2)
|
|
|
|
|
|
BOOL
|
|
TL_Init(
|
|
HINSTANCE hInstance
|
|
);
|
|
|
|
#define TreeList_InsertItem(hwnd, ptlis) \
|
|
(HTLITEM)SendMessage( \
|
|
(hwnd), TLM_INSERTITEM, 0, (LPARAM)(CONST TL_INSERTSTRUCT *)(ptlis)\
|
|
)
|
|
#define TreeList_DeleteItem(hwnd, hItem) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_DELETEITEM, 0, (LPARAM)(CONST HTLITEM)(hItem) \
|
|
)
|
|
#define TreeList_DeleteAllItems(hwnd) \
|
|
(BOOL)SendMessage((hwnd), TLM_DELETEALLITEMS, 0, 0)
|
|
#define TreeList_GetItem(hwnd, pItem) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_GETITEM, 0, (LPARAM)(LV_ITEM *)(pItem) \
|
|
)
|
|
#define TreeList_SetItem(hwnd, pItem) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_SETITEM, 0, (LPARAM)(CONST LV_ITEM *)(pItem) \
|
|
)
|
|
#define TreeList_GetItemCount(hwnd) \
|
|
(UINT)SendMessage((hwnd), TLM_GETITEMCOUNT, 0, 0)
|
|
#define TreeList_GetNextItem(hwnd, hItem, flag) \
|
|
(HTLITEM)SendMessage( \
|
|
(hwnd), TLM_GETNEXTITEM, (WPARAM)(UINT)(flag), \
|
|
(LPARAM)(CONST HTLITEM)(hItem) \
|
|
)
|
|
#define TreeList_GetFirst(hwnd) \
|
|
TreeList_GetNextItem((hwnd), NULL, TLGN_FIRST)
|
|
#define TreeList_GetParent(hwnd, hItem) \
|
|
TreeList_GetNextItem((hwnd), (hItem), TLGN_PARENT)
|
|
#define TreeList_GetChild(hwnd, hItem) \
|
|
TreeList_GetNextItem((hwnd), (hItem), TLGN_CHILD)
|
|
#define TreeList_GetNextSibling(hwnd, hItem) \
|
|
TreeList_GetNextItem((hwnd), (hItem), TLGN_NEXTSIBLING)
|
|
#define TreeList_GetPrevSibling(hwnd, hItem) \
|
|
TreeList_GetNextItem((hwnd), (hItem), TLGN_PREVSIBLING)
|
|
#define TreeList_GetEnumerate(hwnd, hItem) \
|
|
TreeList_GetNextItem((hwnd), (hItem), TLGN_ENUMERATE)
|
|
#define TreeList_GetSelection(hwnd) \
|
|
TreeList_GetNextItem((hwnd), NULL, TLGN_SELECTION)
|
|
#define TreeList_Expand(hwnd, hItem, flag) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_EXPAND, (WPARAM)(UINT)(flag), \
|
|
(LPARAM)(CONST HTLITEM)(hItem) \
|
|
)
|
|
#define TreeList_SetImageList(hwnd, himl) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_SETIMAGELIST, 0, (LPARAM)(CONST HIMAGELIST)(himl) \
|
|
)
|
|
#define TreeList_GetImageList(hwnd, himl) \
|
|
(HIMAGELIST)SendMessage((hwnd), TLM_GETIMAGELIST, 0, 0)
|
|
#define TreeList_InsertColumn(hwnd, iCol, pCol) \
|
|
(INT)SendMessage( \
|
|
(hwnd), TLM_INSERTCOLUMN, (WPARAM)(INT)(iCol), \
|
|
(LPARAM)(CONST LV_COLUMN *)(pCol) \
|
|
)
|
|
#define TreeList_DeleteColumn(hwnd, iCol) \
|
|
(BOOL)SendMessage((hwnd), TLM_DELETECOLUMN, (WPARAM)(INT)(iCol), 0)
|
|
#define TreeList_SetSelection(hwnd, hItem) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_SETSELECTION, 0, (LPARAM)(CONST HTLITEM)(hItem) \
|
|
)
|
|
#define TreeList_Redraw(hwnd) \
|
|
(BOOL)SendMessage((hwnd), TLM_REDRAW, 0, 0)
|
|
#define TreeList_IsItemExpanded(hwnd, hItem) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_ISITEMEXPANDED, 0, (LPARAM)(CONST HTLITEM)(hItem) \
|
|
)
|
|
#define TreeList_GetColumnWidth(hwnd, iCol) \
|
|
(INT)SendMessage((hwnd), TLM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0)
|
|
#define TreeList_SetColumnWidth(hwnd, iCol, cx) \
|
|
(BOOL)SendMessage( \
|
|
(hwnd), TLM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), \
|
|
MAKELPARAM((cx), 0) \
|
|
)
|
|
|
|
|
|
#endif
|