/************************************************************************/
/*  Copyright (C), 2016-2020, [IT], 保留所有权利;
/*  模 块 名：;
/*  描    述：;
/*
/*  版    本：[V];	
/*  作    者：[IT];
/*  日    期：[10/21/2016];
/*
/*
/*  注    意：;
/*
/*  修改记录：[IT];
/*  修改日期：;
/*  修改版本：;
/*  修改内容：;
/************************************************************************/
#ifndef __LIST_SORT_CTRL__
#define __LIST_SORT_CTRL__
#pragma once

// CListSortCtrl
#include "SortHeaderCtrl.h"

#ifdef _DEBUG
#define ASSERT_VALID_STRING( str ) ASSERT( !IsBadStringPtr( str, 0xfffff ) )
#else	//	_DEBUG
#define ASSERT_VALID_STRING( str ) ( (void)0 )
#endif	//	_DEBUG

class CListSortCtrl : public CListCtrl
{
	DECLARE_DYNAMIC(CListSortCtrl)

public:
	CListSortCtrl();
	virtual ~CListSortCtrl();

protected:
	DECLARE_MESSAGE_MAP()
	virtual void PreSubclassWindow();

public:
	// 数据;
	CArray<CStringArray, CStringArray> m_AryList;
	// 是否支持排序;
	BOOL		m_bSortSupport;
	// 列表字体;
	CFont		m_cfont;
	LOGFONT		m_logfont;
	// 浅色;
	COLORREF	m_clrLightGrid;
	// 深色;
	COLORREF	m_clrDarkGrid;
	// 排序的序;
	static INT	m_nCompareColumn;
	// 升降序;
	static BOOL	m_bSortAscending;
	// 列表头控件;
	CSortHeaderCtrl	m_Ctrlheader;

	// 设置list列信息;
	BOOL SetHeadings( IN LPCTSTR pszText, ... );
	// 设置字体;
	void SetListFont(IN CString strFontName, IN int nFontSize, IN BOOL bBold = FALSE, IN BOOL bItalic =  FALSE);

	static bool IsNumber( LPCTSTR pszText );
	static int NumberCompare( LPCTSTR pszNumber1, LPCTSTR pszNumber2 );
	static bool IsDate( LPCTSTR pszText );
	static int DateCompare( const CString& strDate1, const CString& strDate2 );
	static int __cdecl CompareByLabel( const void *elem1, const void *elem2);
private:
	// 列表注册表键名;
	CString		m_strSection;
	// 列数;
	INT			m_nNumColumns;
	// 要排序的列;
	INT			m_nSortColumns;

protected:
	// 选择排序的列;
	void SortByCol(IN const INT nColIndex);
	// 加载列信息;
	void LoadColumnInfo();
	// 保存列信息;
	void SaveColumnInfo();
public:
	void RemoveAll();
	afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult);
#ifndef __LIST_DRAW__
	afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
#endif
	afx_msg void OnDestroy();
};


#endif // __LIST_SORT_CTRL__