ListTypes.h
上传用户:sztopon
上传日期:2014-01-21
资源大小:55k
文件大小:4k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. #pragma once
  2. #define NULL_COLUMN -1
  3. #define NULL_ITEM -1
  4. #define NULL_SUBITEM -1
  5. #define ITEM_HEIGHT_MARGIN 6
  6. #define ITEM_WIDTH_MARGIN 20
  7. #define ITEM_SCROLL_OFFSET 5
  8. #define DRAG_HEADER_OFFSET 4
  9. #define DRAG_ITEM_OFFSET 3
  10. #define ITEM_EDIT_MARGIN 5
  11. #define TOOLTIP_TOOL_ID 1000
  12. #define RESIZE_COLUMN_TIMER 1001
  13. #define RESIZE_COLUMN_PERIOD 20
  14. #define ITEM_VISIBLE_TIMER 1002
  15. #define ITEM_VISIBLE_PERIOD 250
  16. #define SEARCH_PERIOD 800
  17. #define ITEM_AUTOSCROLL_TIMER 1003
  18. #define ITEM_SCROLL_TIMER 1004
  19. #define ITEM_SCROLL_PERIOD 20
  20. #define ITEM_SCROLL_UNIT_MAX 8
  21. #define ITEM_SCROLL_UNIT_MIN 4
  22. #define ITEM_FORMAT_NONE 0
  23. #define ITEM_FORMAT_EDIT 1
  24. #define ITEM_FORMAT_DATETIME 2
  25. #define ITEM_FORMAT_COMBO 3
  26. #define ITEM_FORMAT_CHECKBOX 4
  27. #define ITEM_FORMAT_CHECKBOX_3STATE 5
  28. #define ITEM_FORMAT_HYPERLINK 6
  29. #define ITEM_FORMAT_PROGRESS 7
  30. #define ITEM_FORMAT_CUSTOM 8
  31. #define ITEM_FLAGS_NONE 0x0000
  32. #define ITEM_FLAGS_LEFT 0x0001
  33. #define ITEM_FLAGS_RIGHT 0x0002
  34. #define ITEM_FLAGS_CENTRE 0x0004
  35. #define ITEM_FLAGS_READ_ONLY 0x0008
  36. #define ITEM_FLAGS_EDIT_UPPER 0x0010
  37. #define ITEM_FLAGS_EDIT_NUMBER 0x0020
  38. #define ITEM_FLAGS_EDIT_FLOAT 0x0040
  39. #define ITEM_FLAGS_EDIT_NEGATIVE 0x0080
  40. #define ITEM_FLAGS_EDIT_OPERATOR 0x0100
  41. #define ITEM_FLAGS_COMBO_EDIT 0x0200
  42. #define ITEM_FLAGS_DATE_ONLY 0x0400
  43. #define ITEM_FLAGS_TIME_ONLY 0x0800
  44. #define ITEM_FLAGS_DATETIME_NONE 0x1000
  45. #define ITEM_FLAGS_PROGRESS_SOLID 0x2000
  46. #define ITEM_IMAGE_NONE -1
  47. #define ITEM_IMAGE_DOWN 0
  48. #define ITEM_IMAGE_UP 1
  49. #define ITEM_IMAGE_CHECK_OFF 2
  50. #define ITEM_IMAGE_CHECK_ON 3
  51. #define ITEM_IMAGE_3STATE_UNDEF ITEM_IMAGE_CHECK_OFF
  52. #define ITEM_IMAGE_3STATE_ON 4
  53. #define ITEM_IMAGE_3STATE_OFF 5
  54. #define ITEM_IMAGE_LOCK 6
  55. #define ITEM_IMAGE_ATTACHMENT 7
  56. #define ITEM_IMAGE_3STATE 8
  57. #define ITEM_IMAGE_CHECKBOX 9
  58. #define HITTEST_FLAG_NONE 0x0000
  59. #define HITTEST_FLAG_HEADER_DIVIDER 0x0001
  60. #define HITTEST_FLAG_HEADER_LEFT 0x0002
  61. #define HITTEST_FLAG_HEADER_RIGHT 0x0004
  62. #define LCN_FIRST ( 0U - 1500U )
  63. #define LCN_LAST ( 0U - 1600U )
  64. #define LCN_SELECTED ( LCN_FIRST - 1 )
  65. #define LCN_LEFTCLICK ( LCN_FIRST - 2 )
  66. #define LCN_RIGHTCLICK ( LCN_FIRST - 3 )
  67. #define LCN_DBLCLICK ( LCN_FIRST - 4 )
  68. #define LCN_ENDEDIT ( LCN_FIRST - 5 )
  69. #define LCN_MODIFIED ( LCN_FIRST - 6 )
  70. #define LCN_HYPERLINK ( LCN_FIRST - 7 )
  71. struct CListNotify
  72. {
  73. NMHDR m_hdrNotify;
  74. int m_nItem;
  75. int m_nSubItem;
  76. TCHAR m_nExitChar;
  77. LPCTSTR m_lpszItemText;
  78. LPSYSTEMTIME m_lpItemDate;
  79. };
  80. template <class T, class TEqual = CSimpleArrayEqualHelper< T > >
  81. class CListArray : public CSimpleArray< T, TEqual >
  82. {
  83. public:
  84. void Reverse()
  85. {
  86. reverse( m_aT, m_aT + m_nSize );
  87. }
  88. void Sort()
  89. {
  90. sort( m_aT, m_aT + m_nSize );
  91. }
  92. template< class Pred > inline
  93. void Sort( Pred Compare )
  94. {
  95. sort( m_aT, m_aT + m_nSize, Compare );
  96. }
  97. BOOL IsEmpty()
  98. {
  99. return ( GetSize() == 0 );
  100. }
  101. BOOL InsertAt( int nIndex, const T& t )
  102. {
  103. if ( nIndex < 0 )
  104. return FALSE;
  105. if ( nIndex >= m_nSize )
  106. return ( Add( t ) != -1 );
  107. if ( m_nSize == m_nAllocSize )
  108. {
  109. int nNewAllocSize = ( m_nAllocSize == 0 ) ? 1 : ( m_nSize * 2 );
  110. T* aT = (T*)realloc( m_aT, nNewAllocSize * sizeof( T ) );
  111. if ( aT == NULL )
  112. return FALSE;
  113. m_nAllocSize = nNewAllocSize;
  114. m_aT = aT;
  115. }
  116. MoveMemory( (LPVOID)( m_aT + nIndex + 1 ), (LPVOID)( m_aT + nIndex ), ( m_nSize - nIndex ) * sizeof( T ) );
  117. InternalSetAtIndex( nIndex, t );
  118. m_nSize++;
  119. return TRUE;
  120. }
  121. };