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

📄 sortlistctrl.cpp

📁 1.MyIE开源工程协议 MyIE开源工程遵循GNU通用公共许可证GPL(GNU General Public License)开发,任何人都可以永久免费安装使用,在你下载和使用MyIE源代码前,请
💻 CPP
字号:
// SortListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "SortListCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

struct CCompareListStruct
{
	CSortListCtrl* m_pList;
	int m_nSortCol;
	BOOL m_bSortAsc;
};

/////////////////////////////////////////////////////////////////////////////
// CSortListCtrl

CSortListCtrl::CSortListCtrl()
{
	m_bLastSortAsc = FALSE;
	m_nLastSortCol = 0 ;
}

CSortListCtrl::~CSortListCtrl()
{
}

BEGIN_MESSAGE_MAP(CSortListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CSortListCtrl)
	ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSortListCtrl message handlers

void CSortListCtrl::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CWaitCursor wait;
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR;

	if( m_nLastSortCol == pNMListView->iSubItem )
	{
		m_bLastSortAsc = !m_bLastSortAsc;
	}
	else
	{
		m_nLastSortCol = pNMListView->iSubItem;
		m_bLastSortAsc = TRUE;
	}

	CCompareListStruct s;
	
	s.m_pList = this;
	s.m_nSortCol = m_nLastSortCol;
	s.m_bSortAsc = m_bLastSortAsc;
		
	SortItems( (PFNLVCOMPARE) CompareEntries, (LPARAM) &s );
	
	*pResult = 0;
}

int CALLBACK CSortListCtrl::CompareEntries( LPARAM lp1, LPARAM lp2, LPARAM lData )
{
	CCompareListStruct* ps = (CCompareListStruct*) lData;
	ASSERT( NULL != ps );

	int nResult = 0;

	CString s1 = ps->m_pList->GetItemText( ps->m_pList->FindIndex( lp1 ), ps->m_nSortCol );
	CString s2 = ps->m_pList->GetItemText( ps->m_pList->FindIndex( lp2 ), ps->m_nSortCol );

	nResult = s1.CompareNoCase( s2 );

	return( ps->m_bSortAsc ? nResult : -nResult );
}

int CSortListCtrl::FindIndex( DWORD dw )
{
	int nCount = GetItemCount();
	for( int idx = 0; idx < nCount; idx++ )
	{
		if( dw == GetItemData( idx ) )
		{
			return( idx );
		}
	}

	return( -1 );
}
void CSortListCtrl::AddSortIndexData()
{
	int nCount = GetItemCount();
	for( int idx = 0; idx < nCount; idx++ )
		SetItemData( idx, idx );
}

⌨️ 快捷键说明

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