www.pudn.com > vistaListCtrlDemo.zip > ListTypes.h
#pragma once
#define NULL_COLUMN -1
#define NULL_ITEM -1
#define NULL_SUBITEM -1
#define ITEM_HEIGHT_MARGIN 6
#define ITEM_WIDTH_MARGIN 20
#define ITEM_SCROLL_OFFSET 5
#define DRAG_HEADER_OFFSET 4
#define DRAG_ITEM_OFFSET 3
#define ITEM_EDIT_MARGIN 5
#define TOOLTIP_TOOL_ID 1000
#define RESIZE_COLUMN_TIMER 1001
#define RESIZE_COLUMN_PERIOD 20
#define ITEM_VISIBLE_TIMER 1002
#define ITEM_VISIBLE_PERIOD 250
#define SEARCH_PERIOD 800
#define ITEM_AUTOSCROLL_TIMER 1003
#define ITEM_SCROLL_TIMER 1004
#define ITEM_SCROLL_PERIOD 20
#define ITEM_SCROLL_UNIT_MAX 8
#define ITEM_SCROLL_UNIT_MIN 4
#define ITEM_FORMAT_NONE 0
#define ITEM_FORMAT_EDIT 1
#define ITEM_FORMAT_DATETIME 2
#define ITEM_FORMAT_COMBO 3
#define ITEM_FORMAT_CHECKBOX 4
#define ITEM_FORMAT_CHECKBOX_3STATE 5
#define ITEM_FORMAT_HYPERLINK 6
#define ITEM_FORMAT_PROGRESS 7
#define ITEM_FORMAT_CUSTOM 8
#define ITEM_FLAGS_NONE 0x0000
#define ITEM_FLAGS_LEFT 0x0001
#define ITEM_FLAGS_RIGHT 0x0002
#define ITEM_FLAGS_CENTRE 0x0004
#define ITEM_FLAGS_READ_ONLY 0x0008
#define ITEM_FLAGS_EDIT_UPPER 0x0010
#define ITEM_FLAGS_EDIT_NUMBER 0x0020
#define ITEM_FLAGS_EDIT_FLOAT 0x0040
#define ITEM_FLAGS_EDIT_NEGATIVE 0x0080
#define ITEM_FLAGS_EDIT_OPERATOR 0x0100
#define ITEM_FLAGS_COMBO_EDIT 0x0200
#define ITEM_FLAGS_DATE_ONLY 0x0400
#define ITEM_FLAGS_TIME_ONLY 0x0800
#define ITEM_FLAGS_DATETIME_NONE 0x1000
#define ITEM_FLAGS_PROGRESS_SOLID 0x2000
#define ITEM_IMAGE_NONE -1
#define ITEM_IMAGE_DOWN 0
#define ITEM_IMAGE_UP 1
#define ITEM_IMAGE_CHECK_OFF 2
#define ITEM_IMAGE_CHECK_ON 3
#define ITEM_IMAGE_3STATE_UNDEF ITEM_IMAGE_CHECK_OFF
#define ITEM_IMAGE_3STATE_ON 4
#define ITEM_IMAGE_3STATE_OFF 5
#define ITEM_IMAGE_LOCK 6
#define ITEM_IMAGE_ATTACHMENT 7
#define ITEM_IMAGE_3STATE 8
#define ITEM_IMAGE_CHECKBOX 9
#define HITTEST_FLAG_NONE 0x0000
#define HITTEST_FLAG_HEADER_DIVIDER 0x0001
#define HITTEST_FLAG_HEADER_LEFT 0x0002
#define HITTEST_FLAG_HEADER_RIGHT 0x0004
#define LCN_FIRST ( 0U - 1500U )
#define LCN_LAST ( 0U - 1600U )
#define LCN_SELECTED ( LCN_FIRST - 1 )
#define LCN_LEFTCLICK ( LCN_FIRST - 2 )
#define LCN_RIGHTCLICK ( LCN_FIRST - 3 )
#define LCN_DBLCLICK ( LCN_FIRST - 4 )
#define LCN_ENDEDIT ( LCN_FIRST - 5 )
#define LCN_MODIFIED ( LCN_FIRST - 6 )
#define LCN_HYPERLINK ( LCN_FIRST - 7 )
struct CListNotify
{
NMHDR m_hdrNotify;
int m_nItem;
int m_nSubItem;
TCHAR m_nExitChar;
LPCTSTR m_lpszItemText;
LPSYSTEMTIME m_lpItemDate;
};
template >
class CListArray : public CSimpleArray< T, TEqual >
{
public:
void Reverse()
{
reverse( m_aT, m_aT + m_nSize );
}
void Sort()
{
sort( m_aT, m_aT + m_nSize );
}
template< class Pred > inline
void Sort( Pred Compare )
{
sort( m_aT, m_aT + m_nSize, Compare );
}
BOOL IsEmpty()
{
return ( GetSize() == 0 );
}
BOOL InsertAt( int nIndex, const T& t )
{
if ( nIndex < 0 )
return FALSE;
if ( nIndex >= m_nSize )
return ( Add( t ) != -1 );
if ( m_nSize == m_nAllocSize )
{
int nNewAllocSize = ( m_nAllocSize == 0 ) ? 1 : ( m_nSize * 2 );
T* aT = (T*)realloc( m_aT, nNewAllocSize * sizeof( T ) );
if ( aT == NULL )
return FALSE;
m_nAllocSize = nNewAllocSize;
m_aT = aT;
}
MoveMemory( (LPVOID)( m_aT + nIndex + 1 ), (LPVOID)( m_aT + nIndex ), ( m_nSize - nIndex ) * sizeof( T ) );
InternalSetAtIndex( nIndex, t );
m_nSize++;
return TRUE;
}
};