mylistctrl.cpp

来自「一个简单的个人所得税计算器,可以编辑税率表和所在地列表.」· C++ 代码 · 共 161 行

CPP
161
字号
// MyListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "MyListCtrl.h"


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

/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl

CMyListCtrl::CMyListCtrl()
{
	m_bSortMode=FALSE;
	m_bEnableSort=FALSE;
}

CMyListCtrl::~CMyListCtrl()
{
}


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

/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl message handlers
int CALLBACK CMyListCtrl::MyCompareProcStrD(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	
	CMyListCtrl* pListCtrl = (CMyListCtrl*)lParamSort;
	//ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CMyListCtrl ) ) );
	
	CString strItem1 = pListCtrl->GetItemText((int)lParam1,pListCtrl->nSortItem);
	CString strItem2 = pListCtrl->GetItemText((int)lParam2,pListCtrl->nSortItem);
    
	return strcmp(strItem1,strItem2);
	
}

int CALLBACK CMyListCtrl::MyCompareProcStrA(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	
	CMyListCtrl* pListCtrl = (CMyListCtrl*)lParamSort;
	//ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CMyListCtrl ) ) );
	
	CString strItem1 = pListCtrl->GetItemText((int)lParam1,pListCtrl->nSortItem);
	CString strItem2 = pListCtrl->GetItemText((int)lParam2,pListCtrl->nSortItem);

    return strcmp(strItem1,strItem2)*-1;

}

int CALLBACK CMyListCtrl::MyCompareProcNumD(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	
	CMyListCtrl* pListCtrl = (CMyListCtrl*)lParamSort;
	//ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CMyListCtrl ) ) );
	
	CString strItem1 = pListCtrl->GetItemText((int)lParam1,pListCtrl->nSortItem);
	CString strItem2 = pListCtrl->GetItemText((int)lParam2,pListCtrl->nSortItem);
    
	double numItem1,numItem2;
	numItem1=atof(strItem1);
	numItem2=atof(strItem2);
	
	if(numItem1-numItem2>0.0)
		return 1;
	else
		return -1;
	
}

int CALLBACK CMyListCtrl::MyCompareProcNumA(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	
	CMyListCtrl* pListCtrl = (CMyListCtrl*)lParamSort;
	//ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CMyListCtrl ) ) );
	
	CString strItem1 = pListCtrl->GetItemText((int)lParam1,pListCtrl->nSortItem);
	CString strItem2 = pListCtrl->GetItemText((int)lParam2,pListCtrl->nSortItem);
    
	double numItem1,numItem2;
	numItem1=atof(strItem1);
	numItem2=atof(strItem2);
	
	if(numItem1-numItem2>=0.0)
		return -1;
	else
		return 1;
	
}

void CMyListCtrl::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(!m_bEnableSort)
	{
		*pResult = 0;
		return;
	}
	////////
	if( pNMListView->iSubItem == nSortItem )
        m_bSortMode = !m_bSortMode;
	else
	{
		m_bSortMode = !m_bSortMode;
	    nSortItem = pNMListView->iSubItem;
	}

	int count;
	count=GetItemCount();
	for (int i = 0; i < count; i++)
	{
	     SetItemData(i, i);
	}
	CString strType;
	strType=m_ColType.GetAt(nSortItem);
	//AfxMessageBox(strType);
	BeginWaitCursor();
	if(strType=="4")//数字
	{
		if(m_bSortMode)
            SortItems(MyCompareProcNumD,(DWORD)this);
		else
		    SortItems(MyCompareProcNumA,(DWORD)this);
	}

	else//按字符处理
	{
		if(m_bSortMode)
		    SortItems(MyCompareProcStrD,(DWORD)this);
		else
			SortItems(MyCompareProcStrA,(DWORD)this);

	}
	EndWaitCursor();

	/////////
	*pResult = 0;
}




void CMyListCtrl::EnableSort(BOOL bSort)
{
	m_bEnableSort=bSort;

}

⌨️ 快捷键说明

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