// ================================================================== // 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