|
|
// ==================================================================
// Copyright 1990-1993 Microsoft corporation
// all rights reservered
// ==================================================================
//
// MODULE: COLUMNLB.H
// PURPOSE: Definitions of all external procedure prototypes for custom
// window class ColumnLB
//
// ------ TABSTOP = 4 -------------------
//
// HISTORY
// -------
// Tom Laird-McConnell 5/1/93 Created
// ==================================================================
#ifndef _COLUMNLB_
#define _COLUMNLB_
#ifdef __cplusplus
extern "C"{ #endif
//
// CONTROL STYLES
//
#define CLBS_NOTIFYLMOUSE 0x0200L // pass on WM_LMOUSE messages to perent
#define CLBS_NOTIFYRMOUSE 0x0800L // pass on WM_RMOUSE messages to parent
//
// CONTROL MESSAGES
//
#define CLB_BASE (WM_USER+4000)
#define CLB_MSGMIN (CLB_BASE)
#define CLB_GETNUMBERCOLS (CLB_BASE+0) // get the number of columns (ret=NumCols)
#define CLB_SETNUMBERCOLS (CLB_BASE+1) // set the number of columns (wparam=NumCols)
#define CLB_GETCOLWIDTH (CLB_BASE+2) // get a column width (wParm=Column ret=ColWidth in DU's)
#define CLB_SETCOLWIDTH (CLB_BASE+3) // set a column width (wParm=Column lParam=Width)
#define CLB_GETCOLTITLE (CLB_BASE+4) // get a column's title (wParm=Column, ret=Title)
#define CLB_SETCOLTITLE (CLB_BASE+5) // set a column's title (wParm=Col, lParm=Title)
#define CLB_GETSORTCOL (CLB_BASE+6) // get the sort column (ret=Col)
#define CLB_SETSORTCOL (CLB_BASE+7) // set the sort column (wParm=Col)
#define CLB_AUTOWIDTH (CLB_BASE+8) // auto-matically set column widths using titles...
#define CLB_GETCOLOFFSETS (CLB_BASE+9) // gets the incremental col offsets (ret=LPINT array)
#define CLB_SETCOLOFFSETS (CLB_BASE+10)
#define CLB_GETCOLORDER (CLB_BASE+11) // get the order that columns should be displayed(ret=LPBYTE table)
#define CLB_SETCOLORDER (CLB_BASE+12) // set the order that columns should be displayed(LParm=LPBYTE TABLE)
#define CLB_HSCROLL (CLB_BASE+13) // a hscroll event (INTERNAL)
#define CLB_GETFOCUS (CLB_BASE+14) // get the primary key focus window of CLB
#define CLB_GETROWCOLTEXT (CLB_BASE+15) // given a row AND a column, give me the text for the physical column.
#define CLB_GETTEXTPTRS (CLB_BASE+16) // just like gettext, but it give the array of pointers to the strings.
#define CLB_CHECKFOCUS (CLB_BASE+17) // Does this listbox have the focus?
/*
* Listbox messages (Defined as CLB_BASE+0+LB_ADDSTRING...to get original LB_ message, just take msg-CLB_BASE to get LB_ */
#define CLB_LISTBOX_MSGMIN (CLB_MSGMIN+LB_ADDSTRING )
#define CLB_ADDSTRING (CLB_MSGMIN+LB_ADDSTRING )
#define CLB_INSERTSTRING (CLB_MSGMIN+LB_INSERTSTRING )
#define CLB_DELETESTRING (CLB_MSGMIN+LB_DELETESTRING )
#define CLB_SELITEMRANGEEX (CLB_MSGMIN+LB_SELITEMRANGEEX )
#define CLB_RESETCONTENT (CLB_MSGMIN+LB_RESETCONTENT )
#define CLB_SETSEL (CLB_MSGMIN+LB_SETSEL )
#define CLB_SETCURSEL (CLB_MSGMIN+LB_SETCURSEL )
#define CLB_GETSEL (CLB_MSGMIN+LB_GETSEL )
#define CLB_GETCURSEL (CLB_MSGMIN+LB_GETCURSEL )
#define CLB_GETTEXT (CLB_MSGMIN+LB_GETTEXT )
#define CLB_GETTEXTLEN (CLB_MSGMIN+LB_GETTEXTLEN )
#define CLB_GETCOUNT (CLB_MSGMIN+LB_GETCOUNT )
#define CLB_SELECTSTRING (CLB_MSGMIN+LB_SELECTSTRING )
#define CLB_DIR (CLB_MSGMIN+LB_DIR )
#define CLB_GETTOPINDEX (CLB_MSGMIN+LB_GETTOPINDEX )
#define CLB_FINDSTRING (CLB_MSGMIN+LB_FINDSTRING )
#define CLB_GETSELCOUNT (CLB_MSGMIN+LB_GETSELCOUNT )
#define CLB_GETSELITEMS (CLB_MSGMIN+LB_GETSELITEMS )
#define CLB_SETTABSTOPS (CLB_MSGMIN+LB_SETTABSTOPS )
#define CLB_GETHORIZONTALEXTENT (CLB_MSGMIN+LB_GETHORIZONTALEXTENT)
#define CLB_SETHORIZONTALEXTENT (CLB_MSGMIN+LB_SETHORIZONTALEXTENT)
#define CLB_SETCOLUMNWIDTH (CLB_MSGMIN+LB_SETCOLUMNWIDTH )
#define CLB_ADDFILE (CLB_MSGMIN+LB_ADDFILE )
#define CLB_SETTOPINDEX (CLB_MSGMIN+LB_SETTOPINDEX )
#define CLB_GETITEMRECT (CLB_MSGMIN+LB_GETITEMRECT )
#define CLB_GETITEMDATA (CLB_MSGMIN+LB_GETITEMDATA )
#define CLB_SETITEMDATA (CLB_MSGMIN+LB_SETITEMDATA )
#define CLB_SELITEMRANGE (CLB_MSGMIN+LB_SELITEMRANGE )
#define CLB_SETANCHORINDEX (CLB_MSGMIN+LB_SETANCHORINDEX )
#define CLB_GETANCHORINDEX (CLB_MSGMIN+LB_GETANCHORINDEX )
#define CLB_SETCARETINDEX (CLB_MSGMIN+LB_SETCARETINDEX )
#define CLB_GETCARETINDEX (CLB_MSGMIN+LB_GETCARETINDEX )
#define CLB_SETITEMHEIGHT (CLB_MSGMIN+LB_SETITEMHEIGHT )
#define CLB_GETITEMHEIGHT (CLB_MSGMIN+LB_GETITEMHEIGHT )
#define CLB_FINDSTRINGEXACT (CLB_MSGMIN+LB_FINDSTRINGEXACT )
#define CLB_SETLOCALE (CLB_MSGMIN+LB_SETLOCALE )
#define CLB_GETLOCALE (CLB_MSGMIN+LB_GETLOCALE )
#define CLB_SETCOUNT (CLB_MSGMIN+LB_SETCOUNT )
#define CLB_LISTBOX_MSGMAX CLB_SETCOUNT
#define CLB_MSGMAX CLB_LISTBOX_MSGMAX
//
// NOTIFICATION MESSAGES
//
#define CLBN_MSGMIN (CLB_MSGMAX + 1)
#define CLBN_DRAWITEM CLBN_MSGMIN // ask the parent to do a XXXXitem lParam = LPDRAWITEMSTRUCT)
//#define CLBN_COMPAREITEM CLBN_MSGMIN+2) // ask the parent to do a XXXXitem (wParam=PhysCol, lParam = LPCOMPAREITEMSTRUCT)
#define CLBN_CHARTOITEM (CLBN_MSGMIN+3) // ask the parent to do a XXXXitem (wParam=PhysCol, )
#define CLBN_TITLESINGLECLK (CLBN_MSGMIN+4) // notify the parent that a user clicked on a title (wParam = CTLID, lParam=Col)
#define CLBN_TITLEDBLCLK (CLBN_MSGMIN+5) // notify the parent that a user double-clicked on a title (wParam = CTLID, lParam=Col)
#define CLBN_COLREORDER (CLBN_MSGMIN+6) // notify the parent that someone changed the column order (LPARAM=LPINT order)
#define CLBN_COLSIZE (CLBN_MSGMIN+7) // notify the parent that someone changed the column size (lParam=LPINT widths)
#define CLBN_RBUTTONDOWN (CLBN_MSGMIN+8) // notify the parent on rbutton which row and column
#define CLBN_RBUTTONUP (CLBN_MSGMIN+9) // notify the parent on rbutton which row and column
#define CLBN_MSGMAX CLBN_RBUTTONUP
#define MAX_COLUMNS 32
//
// structure used to keep track of column info
//
typedef struct _ColumnInfo { int Width; // width in LU's of column
LPTSTR lpTitle; // pointer to title string
BOOL fDepressed; // flag for whether this columns header button is depressed or not
} COLUMNINFO; typedef COLUMNINFO *LPCOLUMNINFO;
//
// structure used for doing a Column DrawItem
//
typedef struct _CLBDrawItemStruct { DRAWITEMSTRUCT DrawItemStruct; LPBYTE lpColOrder; DWORD nColumns; RECT rect[MAX_COLUMNS]; } CLBDRAWITEMSTRUCT; typedef CLBDRAWITEMSTRUCT *LPCLBDRAWITEMSTRUCT;
#define MOUSE_COLUMNDRAG 1
#define MOUSE_COLUMNRESIZE 2
#define MOUSE_COLUMNCLICK 3
//
// internal datastructure used to keep track of everything internal to the
// ColumnLB class...
//
typedef struct _ColumnLBstruct { DWORD Style; // style of columnlb
HWND hwndList; // handle to the internal listbox
HWND hwndTitleList; // handle to title listbox
HFONT hFont; // font in use...
HINSTANCE hInstance; // hInstance of the app which created this
BYTE nColumns; // number of columns in the column listbox
COLUMNINFO ColumnInfoTable[MAX_COLUMNS]; // table of ColumnInfoStructures
int ColumnOffsetTable[MAX_COLUMNS]; // table of offsets from front of listbox (in lu's)
BYTE ColumnOrderTable[MAX_COLUMNS]; // indexes of columns in order of display
BYTE SortColumn; // index of current sort column
int xPos; // current x position in scroll-box
int yTitle; // height of title portion...
FARPROC OldListboxProc; // old listbox proc
FARPROC NewListboxProc; // New listbox proc
FARPROC OldTitleListboxProc; // old listbox proc
FARPROC NewTitleListboxProc; // New listbox proc
BYTE fUseVlist:1; // flag for whether to use VLIST class or not...
BYTE fMouseState:3; // state for moving
BYTE fSorting:1; // flag to signifiy that we are sorting so ignore DELETEITEM's
BYTE fHasFocus:1; // does the listbox have the focus?
int xPrevPos ; // previous x mouse position
BYTE ColClickStart; // column of click start
RECT ColClickRect; // rect of click column
} COLUMNLBSTRUCT; typedef COLUMNLBSTRUCT FAR *LPCOLUMNLBSTRUCT;
#define COLUMNLBCLASS_CLASSNAME TEXT("ColumnListBox") // normal Column listbox
#define COLUMNVLBCLASS_CLASSNAME TEXT("ColumnVListBox") // Vlist Column box
//
// structure used for RBUTTONDOWN messages. The Column list box tells the parent
// which column and index.
//
typedef struct _CLBRButtonStruct { HWND hwndChild; BYTE PhysColumn; DWORD_PTR Index; int x; int y; } CLBRBUTTONSTRUCT;
typedef CLBRBUTTONSTRUCT *LPCLBRBUTTONSTRUCT;
//
// function prototypes
//
BOOL ColumnLBClass_Register(HINSTANCE hInstance); BOOL ColumnVLBClass_Register(HINSTANCE hInstance); BOOL ColumnLBClass_Unregister(HINSTANCE hInstance); BOOL ColumnVLBClass_Unregister(HINSTANCE hInstance);
void ColumnLB_DrawColumnBorder(HDC hdc, RECT *rect, int Bottom, HBRUSH hBrush);
// -----------------------------------------------------------------------------------
//
// ColumnListBox_ Macros (uses CLB_ messages) New definitions
//
#define ColumnLB_GetNumberCols(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETNUMBERCOLS, 0L, (LPARAM)0))
#define ColumnLB_SetNumberCols(hwndCtl,Number) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETNUMBERCOLS, (WPARAM)Number, (LPARAM)0))
#define ColumnLB_GetColWidth(hwndCtl,Column) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETCOLWIDTH, (WPARAM)Column, (LPARAM)0))
#define ColumnLB_SetColWidth(hwndCtl,Column, Width) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETCOLWIDTH, (WPARAM)Column, (LPARAM)Width))
#define ColumnLB_GetColTitle(hwndCtl,Column) ((LPTSTR)(DWORD)SendMessage((hwndCtl), CLB_GETCOLTITLE, (WPARAM)Column, (LPARAM)0))
#define ColumnLB_SetColTitle(hwndCtl,Column, Title) ((LPTSTR)(DWORD)SendMessage((hwndCtl), CLB_SETCOLTITLE, (WPARAM)Column, (LPARAM)Title))
#define ColumnLB_GetSortCol(hwndCtl) ((DWORD)SendMessage((hwndCtl), CLB_GETSORTCOL, (WPARAM)0, (LPARAM)0))
#define ColumnLB_SetSortCol(hwndCtl,Column) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETSORTCOL, (WPARAM)Column, (LPARAM)0))
#define ColumnLB_AutoWidth(hwndCtl, Width) ((int)(DWORD)SendMessage((hwndCtl), CLB_AUTOWIDTH, (WPARAM)Width, (LPARAM)0))
#define ColumnLB_GetColOffsets(hwndCtl) ((LPINT)(DWORD)SendMessage((hwndCtl), CLB_GETCOLOFFSETS, (WPARAM)0, (LPARAM)0))
#define ColumnLB_SetColOffsets(hwndCtl,Offsets) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETCOLOFFSETS, (WPARAM)Offsets, (LPARAM)0))
#define ColumnLB_GetColOrder(hwndCtl) ((LPBYTE)(DWORD)SendMessage((hwndCtl), CLB_GETCOLORDER, (WPARAM)0, (LPARAM)0))
#define ColumnLB_SetColOrder(hwndCtl, Order) ((LPBYTE)(DWORD)SendMessage((hwndCtl), CLB_SETCOLORDER, (WPARAM)0, (LPARAM)Order))
#define ColumnLB_CheckFocus(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl), CLB_CHECKFOCUS, (WPARAM)0, (LPARAM)0))
// -----------------------------------------------------------------------------------
//
// ColumnListBox_ Macros (uses CLB_ messages) Listbox definitions
//
#define ColumnLB_Enable(hwndCtl, fEnable) EnableWindow((hwndCtl), (fEnable))
#define ColumnLB_GetCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETCOUNT, 0L, 0L))
#define ColumnLB_ResetContent(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl), CLB_RESETCONTENT, 0L, 0L))
#define ColumnLB_AddString(hwndCtl, lpsz) ((int)(DWORD)SendMessage((hwndCtl), CLB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
#define ColumnLB_InsertString(hwndCtl, index, lpsz) ((int)(DWORD)SendMessage((hwndCtl), CLB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
#define ColumnLB_AddItemData(hwndCtl, data) ((int)(DWORD)SendMessage((hwndCtl), CLB_ADDSTRING, 0L, (LPARAM)(data)))
#define ColumnLB_InsertItemData(hwndCtl, index, data) ((int)(DWORD)SendMessage((hwndCtl), CLB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(data)))
#define ColumnLB_DeleteString(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_DELETESTRING, (WPARAM)(int)(index), 0L))
#define ColumnLB_GetTextLen(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETTEXTLEN, (WPARAM)(int)(index), 0L))
#define ColumnLB_GetText(hwndCtl, index, lpszBuffer) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
#define ColumnLB_GetTextPtrs(hwndCtl, index) ((LPTSTR *)(DWORD)SendMessage((hwndCtl), CLB_GETTEXTPTRS, (WPARAM)(int)(index), (LPARAM)0))
#define ColumnLB_GetRowColText(hwndCtl, index, col) (LPBYTE)(DWORD)SendMessage((hwndCtl), CLB_GETROWCOLTEXT, (WPARAM)(int) (col), (LPARAM)(int)(index))
#define ColumnLB_GetItemData(hwndCtl, index) ((LRESULT)(DWORD)SendMessage((hwndCtl), CLB_GETITEMDATA, (WPARAM)(int)(index), 0L))
#define ColumnLB_SetItemData(hwndCtl, index, data) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(data)))
#if (WINVER >= 0x030a)
#define ColumnLB_FindString(hwndCtl, indexStart, lpszFind) ((int)(DWORD)SendMessage((hwndCtl), CLB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
#define ColumnLB_FindItemData(hwndCtl, indexStart, data) ((int)(DWORD)SendMessage((hwndCtl), CLB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
#define ColumnLB_SetSel(hwndCtl, fSelect, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(index)))
#define ColumnLB_SelItemRange(hwndCtl, fSelect, first, last) ((int)(DWORD)SendMessage((hwndCtl), CLB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last))))
#define ColumnLB_GetCurSel(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETCURSEL, 0L, 0L))
#define ColumnLB_SetCurSel(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETCURSEL, (WPARAM)(int)(index), 0L))
#define ColumnLB_SelectString(hwndCtl, indexStart, lpszFind) ((int)(DWORD)SendMessage((hwndCtl), CLB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
#define ColumnLB_SelectItemData(hwndCtl, indexStart, data) ((int)(DWORD)SendMessage((hwndCtl), CLB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
#define ColumnLB_GetSel(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETSEL, (WPARAM)(int)(index), 0L))
#define ColumnLB_GetSelCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETSELCOUNT, 0L, 0L))
#define ColumnLB_GetTopIndex(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETTOPINDEX, 0L, 0L))
#define ColumnLB_GetSelItems(hwndCtl, cItems, lpItems) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems)))
#define ColumnLB_SetTopIndex(hwndCtl, indexTop) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L))
#define ColumnLB_SetColumnWidth(hwndCtl, cxColumn) ((void)SendMessage((hwndCtl), CLB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L))
#define ColumnLB_GetHorizontalExtent(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETHORIZONTALEXTENT, 0L, 0L))
#define ColumnLB_SetHorizontalExtent(hwndCtl, cxExtent) ((void)SendMessage((hwndCtl), CLB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L))
#define ColumnLB_SetTabStops(hwndCtl, cTabs, lpTabs) ((BOOL)(DWORD)SendMessage((hwndCtl), CLB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs)))
#define ColumnLB_GetItemRect(hwndCtl, index, lprc) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc)))
#define ColumnLB_SetCaretIndex(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETCARETINDEX, (WPARAM)(int)(index), 0L))
#define ColumnLB_GetCaretIndex(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETCARETINDEX, 0L, 0L))
#define ColumnLB_FindStringExact(hwndCtl, indexStart, lpszFind) ((int)(DWORD)SendMessage((hwndCtl), CLB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
#define ColumnLB_SetItemHeight(hwndCtl, index, cy) ((int)(DWORD)SendMessage((hwndCtl), CLB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0)))
#define ColumnLB_GetItemHeight(hwndCtl, index) ((int)(DWORD)SendMessage((hwndCtl), CLB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L))
#endif /* WINVER >= 0x030a */
#define ColumnLB_Dir(hwndCtl, attrs, lpszFileSpec) ((int)(DWORD)SendMessage((hwndCtl), CLB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
#define ColumnLB_GetFocus(hwndCtl) ((HWND)(DWORD)SendMessage((hwndCtl), CLB_GETFOCUS, 0L, 0L))
#ifdef __cplusplus
} #endif
#endif
|