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

📄 mylistctrl.cpp

📁 一个简单的个人所得税计算器,可以编辑税率表和所在地列表.
💻 CPP
字号:
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -