ListSortCtrl.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /************************************************************************/
  2. /* Copyright (C), 2016-2020, [IT], 保留所有权利;
  3. /* 模 块 名:;
  4. /* 描 述:;
  5. /*
  6. /* 版 本:[V];
  7. /* 作 者:[IT];
  8. /* 日 期:[10/21/2016];
  9. /*
  10. /*
  11. /* 注 意:;
  12. /*
  13. /* 修改记录:[IT];
  14. /* 修改日期:;
  15. /* 修改版本:;
  16. /* 修改内容:;
  17. /************************************************************************/
  18. #ifndef __LIST_SORT_CTRL__
  19. #define __LIST_SORT_CTRL__
  20. #pragma once
  21. // CListSortCtrl
  22. #include "SortHeaderCtrl.h"
  23. #ifdef _DEBUG
  24. #define ASSERT_VALID_STRING( str ) ASSERT( !IsBadStringPtr( str, 0xfffff ) )
  25. #else // _DEBUG
  26. #define ASSERT_VALID_STRING( str ) ( (void)0 )
  27. #endif // _DEBUG
  28. class CListSortCtrl : public CListCtrl
  29. {
  30. DECLARE_DYNAMIC(CListSortCtrl)
  31. public:
  32. CListSortCtrl();
  33. virtual ~CListSortCtrl();
  34. protected:
  35. DECLARE_MESSAGE_MAP()
  36. virtual void PreSubclassWindow();
  37. public:
  38. // 数据;
  39. CArray<CStringArray, CStringArray> m_AryList;
  40. // 是否支持排序;
  41. BOOL m_bSortSupport;
  42. // 列表字体;
  43. CFont m_cfont;
  44. LOGFONT m_logfont;
  45. // 浅色;
  46. COLORREF m_clrLightGrid;
  47. // 深色;
  48. COLORREF m_clrDarkGrid;
  49. // 排序的序;
  50. static INT m_nCompareColumn;
  51. // 升降序;
  52. static BOOL m_bSortAscending;
  53. // 列表头控件;
  54. CSortHeaderCtrl m_Ctrlheader;
  55. // 设置list列信息;
  56. BOOL SetHeadings( IN LPCTSTR pszText, ... );
  57. // 设置字体;
  58. void SetListFont(IN CString strFontName, IN int nFontSize, IN BOOL bBold = FALSE, IN BOOL bItalic = FALSE);
  59. static bool IsNumber( LPCTSTR pszText );
  60. static int NumberCompare( LPCTSTR pszNumber1, LPCTSTR pszNumber2 );
  61. static bool IsDate( LPCTSTR pszText );
  62. static int DateCompare( const CString& strDate1, const CString& strDate2 );
  63. static int __cdecl CompareByLabel( const void *elem1, const void *elem2);
  64. private:
  65. // 列表注册表键名;
  66. CString m_strSection;
  67. // 列数;
  68. INT m_nNumColumns;
  69. // 要排序的列;
  70. INT m_nSortColumns;
  71. protected:
  72. // 选择排序的列;
  73. void SortByCol(IN const INT nColIndex);
  74. // 加载列信息;
  75. void LoadColumnInfo();
  76. // 保存列信息;
  77. void SaveColumnInfo();
  78. public:
  79. void RemoveAll();
  80. afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
  81. afx_msg void OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult);
  82. #ifndef __LIST_DRAW__
  83. afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
  84. #endif
  85. afx_msg void OnDestroy();
  86. };
  87. #endif // __LIST_SORT_CTRL__