⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortlistctrl.h

📁 类似 windows explorer的工具
💻 H
字号:
/*----------------------------------------------------------------------
Copyright (C)2001 MJSoft. All Rights Reserved.
          This source may be used freely as long as it is not sold for
					profit and this copyright information is not altered or removed.
					Visit the web-site at www.mjsoft.co.uk
					e-mail comments to info@mjsoft.co.uk
File:     SortListCtrl.h
Purpose:  Provides a sortable list control, it will sort text, numbers
          and dates, ascending or descending, and will even draw the
					arrows just like windows explorer!
来源于: http://www.codeproject.com/listctrl/sortlistctrl.asp
----------------------------------------------------------------------*/
// Modified by truezq.
// 【注意】1 子类不能在 OnDeleteItem 里调用 GetItemData
// 原作者覆盖了方法 BOOL DeleteItem( int iItem ); 和 BOOL DeleteAllItems(); 
// 这两个函数不是虚函数,我认为覆盖基类CListCtrl的方法不太好。
// 应该用消息反射 ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnDeleteItem)
// 然后在 OnDeleteItem 释放内存
// CSortListCtrl 类还不是很完善

#ifndef SORTLISTCTRL_H
#define SORTLISTCTRL_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef SORTHEADERCTRL_H
	#include "SortHeaderCtrl.h"
#endif	// 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 CSortListCtrl : public CListCtrl
{
// Construction
public:
	CSortListCtrl();

// Attributes
public:
    CSortHeaderCtrl m_ctlHeader; // Modified by truezq
// Operations
public:
    // Added by truezq
    int InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
        int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);
    int InsertColumn(int nCol, const LVCOLUMN* pColumn);	

public:
	BOOL SetHeadings( UINT uiStringID );
	BOOL SetHeadings( const CString& strHeadings );

	int AddItem( LPCTSTR pszText, ... );
    int AddItem2( LPCTSTR pszText, ... ); // [New]

	BOOL DeleteItem( int iItem ); // 覆盖基类的方法
	BOOL DeleteAllItems(); // 覆盖基类的方法
	void LoadColumnInfo();
	void SaveColumnInfo();
	BOOL SetItemText( int nItem, int nSubItem, LPCTSTR lpszText );
	void Sort( int iColumn, BOOL bAscending );
    BOOL SetItemData(int nItem, DWORD dwData);
    DWORD GetItemData(int nItem) const;
    
public: // static functions
    static bool IsNumber( LPCTSTR pszText );
    static bool IsDate( LPCTSTR pszText );
    static int DateCompare( const CString& strDate1, const CString& strDate2 );
    static int NumberCompare( LPCTSTR pszNumber1, LPCTSTR pszNumber2 );

public:
        // Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSortListCtrl)
	protected:
	virtual void PreSubclassWindow();
	//}}AFX_VIRTUAL

private:
    // 应该隐藏起来?No!No! 
    //DWORD GetItemData(int nItem) const;
// Implementation
public:
	virtual ~CSortListCtrl();

	// Generated message map functions
protected:
	static int CALLBACK CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData );
	void FreeItemMemory( const int iItem );
	BOOL CSortListCtrl::SetTextArray( int iItem, LPTSTR* arrpsz );
	LPTSTR* CSortListCtrl::GetTextArray( int iItem ) const;

	//CSortHeaderCtrl m_ctlHeader;

	int m_iNumColumns;
	int m_iSortColumn;
	BOOL m_bSortAscending;

	//{{AFX_MSG(CSortListCtrl)
	afx_msg void OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnDestroy();

    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // SORTLISTCTRL_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -