ListCtrlEx.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // ListCtrlEx.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ListCtrlEx.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. #pragma comment( lib , "msimg32.lib" )
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CListCtrlEx
  13. CListCtrlEx::CListCtrlEx()
  14. {
  15. }
  16. CListCtrlEx::~CListCtrlEx()
  17. {
  18. }
  19. BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
  20. //{{AFX_MSG_MAP(CListCtrlEx)
  21. ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
  22. //}}AFX_MSG_MAP
  23. ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,  OnCustomDraw)
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CListCtrlEx message handlers
  27. void CListCtrlEx::PreSubclassWindow() 
  28. {
  29. this->SetTextBkColor( RGB( 214 , 239 , 255 ) );
  30. this->SetBkColor( RGB( 214 , 239 , 255 ) );
  31. this->header.SubclassDlgItem ( 0 , this );
  32. CListCtrl::PreSubclassWindow( );
  33. }
  34. void CListCtrlEx::OnCustomDraw(NMHDR*  pNMHDR,  LRESULT*  pResult)
  35. {
  36. NMLVCUSTOMDRAW * pLVCD = ( NMLVCUSTOMDRAW * )pNMHDR;  
  37. *pResult  =  CDRF_NEWFONT; 
  38. if(  pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT )
  39. *pResult  =  CDRF_NOTIFYITEMDRAW;  
  40. else if( pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT  )
  41. {
  42. int  nItem  =  static_cast<int>( pLVCD->nmcd.dwItemSpec );
  43. // 判断使ListCtrl不同颜色实现的条件  
  44. CString  str1  =  this->GetItemText(nItem  , 1 );  
  45. if  (str1  ==  "开会" || str1 == "是" )  
  46. {  
  47. pLVCD->clrTextBk  =    RGB(150 ,  255 ,  255 );  
  48. pLVCD->clrText    =    RGB(12 , 26 , 234 );  
  49. *pResult  =  CDRF_DODEFAULT;                          
  50. }  
  51. }
  52. void CListCtrlEx::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) 
  53. {
  54. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  55. static int Param[ MAX_PATH ] = { ( int )this };
  56. Param[ 1 ] = pNMListView->iSubItem;
  57. Param[ 2 + Param[ 1 ] ] = !Param[ 2 + Param[ 1 ] ];
  58. this->SortItems( CListCtrlEx::CompareFunc , ( int )Param );
  59. *pResult = 0;
  60. }
  61. int CListCtrlEx::CompareFunc( LPARAM lParam1 , LPARAM lParam2 , LPARAM lParamSort )
  62. {
  63. int * p = ( int * )lParamSort;
  64. CListCtrlEx * pThis = ( CListCtrlEx * )p[ 0 ];
  65. LVFINDINFO info;
  66. memset( &info , 0 , sizeof( info ) );
  67. info.flags = LVFI_PARAM;
  68. info.lParam = lParam1;
  69. lParam1 = pThis->FindItem( &info );
  70. CString t1 = pThis->GetItemText(lParam1 , p[ 1 ] );
  71. info.lParam = lParam2;
  72. lParam2 = pThis->FindItem( &info );
  73. CString t2 = pThis->GetItemText(lParam2 , p[ 1 ] );
  74. return p[ 2 + p[ 1 ] ] ? t1 < t2 : t1 > t2;
  75. }