SortableHeaderCtrl.cpp
上传用户:ayqaqa
上传日期:2007-01-02
资源大小:37k
文件大小:2k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // SortableHeaderCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "resource.h"
  5. #include "SortableHeaderCtrl.h"
  6. #include "MultiColumnSortListView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSortableHeaderCtrl
  14. CSortableHeaderCtrl::CSortableHeaderCtrl()
  15. {
  16. m_bSortAsc = FALSE;
  17. m_nSortCol = -1;
  18. m_iLastColumn = -1;
  19. m_bmpArrowUp.LoadBitmap( IDB_ARROWUP );
  20. m_bmpArrowDown.LoadBitmap( IDB_ARROWDOWN );
  21. }
  22. CSortableHeaderCtrl::~CSortableHeaderCtrl()
  23. {
  24. m_bmpArrowUp.DeleteObject();
  25. m_bmpArrowDown.DeleteObject();
  26. }
  27. BEGIN_MESSAGE_MAP(CSortableHeaderCtrl, CHeaderCtrl)
  28. //{{AFX_MSG_MAP(CSortableHeaderCtrl)
  29. // NOTE - the ClassWizard will add and remove mapping macros here.
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CSortableHeaderCtrl message handlers
  34. /////////////////////////////////////////////////////////////////////////////
  35. int CSortableHeaderCtrl::SetSortImage( int nCol, BOOL bAsc )
  36. {
  37.     CBitmap *pTempBmp = NULL;
  38. if( bAsc )
  39. pTempBmp = &m_bmpArrowUp;
  40. else
  41. pTempBmp = &m_bmpArrowDown;
  42. HD_ITEM Item;
  43. Item.mask = HDI_FORMAT;
  44. GetItem( nCol, &Item );
  45. Item.mask = HDI_BITMAP | HDI_FORMAT;
  46. Item.fmt |= HDF_BITMAP;
  47. Item.hbm = (HBITMAP)pTempBmp->GetSafeHandle();
  48. SetItem( nCol, &Item );
  49. m_iLastColumn = nCol;
  50.     return 1;
  51. }
  52. void CSortableHeaderCtrl::OnEndtrack(NMHDR* pNMHDR, LRESULT* pResult) 
  53. {
  54. CMultiColumnSortListView *pView = (CMultiColumnSortListView *)GetParent();
  55. pView->SaveColumnWidths();
  56. *pResult = 0;
  57. }
  58. const int CSortableHeaderCtrl::GetLastColumn() const
  59. {
  60. return m_iLastColumn;
  61. }
  62. void CSortableHeaderCtrl::RemoveSortImage( int iItem )
  63. {
  64. if( iItem != -1 )
  65. {
  66. HD_ITEM hditem;
  67. hditem.mask = HDI_FORMAT;
  68. GetItem( iItem, &hditem );
  69. hditem.mask = HDI_FORMAT;
  70. hditem.fmt &= ~HDF_BITMAP;
  71. SetItem( iItem, &hditem );
  72. }
  73. }
  74. void CSortableHeaderCtrl::RemoveAllSortImages()
  75. {
  76. int iCount = GetItemCount();
  77. for( int i = 0; i < iCount; i++ )
  78. RemoveSortImage( i );
  79. }