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

📄 sortedlistctrl.cpp

📁 The application wizard has created this SoccerDoctor application for you. This application not onl
💻 CPP
字号:
// SortedListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "SoccerDoctor.h"
#include "SortedListCtrl.h"


// CSortedListCtrl

IMPLEMENT_DYNAMIC(CSortedListCtrl, CListCtrl)
CSortedListCtrl::CSortedListCtrl()
{
}

CSortedListCtrl::~CSortedListCtrl()
{
}


BEGIN_MESSAGE_MAP(CSortedListCtrl, CListCtrl)
	ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnLvnColumnclick)
END_MESSAGE_MAP()



// CSortedListCtrl message handlers
void CSortedListCtrl::PreSubclassWindow()
{
	// TODO: Add your specialized code here and/or call the base class
	CListCtrl::PreSubclassWindow();
	//Item 0 is the Header Control		
	m_HeaderCtrl.SubclassWindow(::GetDlgItem(m_hWnd,0));
}

void CSortedListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: Add your control notification handler code here
	bool bSortAscending;

	// If clicked on already sorted column, reverse sort order
    if(pNMLV->iSubItem == GetSortedColumn()) {
		bSortAscending = !IsAscSorted();
	}else {
        bSortAscending = TRUE;
	}
	SortColumn(pNMLV->iSubItem, bSortAscending);
	*pResult = 0;
}

void CSortedListCtrl::SortColumn (int nCol, BOOL bAsc)
{
	// First set the sort order and column and draw the header
	// This must be called before SortItems to set sort order and column 
	if ((GetStyle() & LVS_TYPEMASK) == LVS_REPORT) {
		m_HeaderCtrl.SetSortImage(nCol, bAsc);
	}
	ReSortList();
	// Now sort all items in column using CListCtrl sorting mechanism
}

int CSortedListCtrl::GetSortedColumn()
{
	// Delegate function to header control
	return m_HeaderCtrl.GetSortedColumn();
}

BOOL CSortedListCtrl::IsAscSorted ()
{
	// Delegate function to header control
	return m_HeaderCtrl.IsAscSorted();
}
/************************************************************************/
/*                          CPlayerTypeListCtrl                         */
/************************************************************************/
int CPlayerTypeListCtrl::InsertItem(UINT nItem,const player_type_t* pType)
{
	CString strText;
	strText.Format(TEXT("%d"),nItem);
	m_pTypes.push_back(pType);
	nItem = CListCtrl::InsertItem(nItem,strText);
	SetItemText(nItem,pType);
	return nItem;
}

BOOL CPlayerTypeListCtrl::SetItemText(UINT nItem,const player_type_t* pType)
{
	UINT nColumns = GetHeaderCtrl()->GetItemCount();
	long*	pValue = (long *)&(pType->player_speed_max);
	CString strText;
	strText.Format(TEXT("%d"),ntohs(pType->id));
	CListCtrl::SetItemText(nItem,0,strText);
	for(UINT j = 1; j < nColumns;j++){
		strText.Format(TEXT("%.3f"),(double)(long)ntohl(*pValue)/SHOWINFO_SCALE2);	
		CListCtrl::SetItemText(nItem,j,strText);
		pValue++;
	}
	return TRUE;
}

void CPlayerTypeListCtrl::init()
{
	InsertColumn(0,"id",LVCFMT_CENTER,40,0);
	InsertColumn(1,"player_speed_max",LVCFMT_CENTER,120,1);
	InsertColumn(2,"stamina_inc_max",LVCFMT_CENTER,120,2);
	InsertColumn(3,"player_decay",LVCFMT_CENTER,120,3);
	InsertColumn(4,"inertia_moment",LVCFMT_CENTER,120,4);
	InsertColumn(5,"dash_power_rate",LVCFMT_CENTER,120,5);
	InsertColumn(6,"player_size",LVCFMT_CENTER,120,6);
	InsertColumn(7,"kickable_margin",LVCFMT_CENTER,120,7);
	InsertColumn(8,"kick_rand",LVCFMT_CENTER,120,8);
	InsertColumn(9,"extra_stamina",LVCFMT_CENTER,120,9);
	InsertColumn(10,"effort_max",LVCFMT_CENTER,120,10);
	InsertColumn(11,"effort_min",LVCFMT_CENTER,120,11);
	m_pTypes.clear();

}

void CPlayerTypeListCtrl::ReSortList()
{
	if(m_pTypes.empty()){
		return;
	}
	UINT nSelect = GetSortedColumn();
	const player_type_t* pType;
	
	for(UINT i = 0; i < m_pTypes.size() - 1; i++){
		for(UINT j=i+1; j < m_pTypes.size(); j++){
			if(!IsAscSorted() && GetTypeValue(nSelect,m_pTypes[j]) < GetTypeValue(nSelect,m_pTypes[i]) ||
				IsAscSorted() && GetTypeValue(nSelect,m_pTypes[j]) > GetTypeValue(nSelect,m_pTypes[i])){
				pType = m_pTypes[j];
				m_pTypes[j] = m_pTypes[i];
				m_pTypes[i] = pType;
			}
		}
	}
	for(UINT i = 0;i < m_pTypes.size();i++){
		SetItemText(i,m_pTypes[i]);
	}
}

double CPlayerTypeListCtrl::GetTypeValue(UINT nColumn,const player_type_t* pType)
{
	if(nColumn == 0)
		return ntohs(pType->id);
	if(nColumn > 11)
		return -1;
	long* pValue = (long *)&(pType->player_speed_max);
	pValue += (nColumn - 1);
	return (double)(long)ntohl(*pValue)/SHOWINFO_SCALE2;
}
/************************************************************************/
/*                          CStatListCtrl                               */
/************************************************************************/
void CStatListCtrl::init()
{
	InsertColumn(0,"Unum",LVCFMT_CENTER,60,0);
	InsertColumn(1,"Pas",LVCFMT_CENTER,60,1);
	InsertColumn(2,"Cmp",LVCFMT_CENTER,60,2);
	InsertColumn(3,"Sho",LVCFMT_CENTER,60,3);
	InsertColumn(4,"On",LVCFMT_CENTER,60,4);
	InsertColumn(5,"Drb",LVCFMT_CENTER,60,5);
	InsertColumn(6,"Cmd",LVCFMT_CENTER,60,6);
	InsertColumn(7,"Int",LVCFMT_CENTER,60,7);
	InsertColumn(8,"Cmi",LVCFMT_CENTER,60,8);
	SetBkColor(::GetSysColor(COLOR_MENU));
	SetTextBkColor(::GetSysColor(COLOR_MENU));
}
void CStatListCtrl::ReSortList()
{
	UINT nSelect = GetSortedColumn();
	if( nSelect > 8 ){
		return;
	}
	for(UINT i = 0; i < MAX_PLAYER -1; i++){
		for(UINT j=i+1; j < MAX_PLAYER; j++){
			if((!IsAscSorted() && _Data[j][nSelect] < _Data[i][nSelect]) ||
				(IsAscSorted() && _Data[j][nSelect] > _Data[i][nSelect])){
					for(UINT k=0; k<9; k++){
						UINT tmp = _Data[i][k];
						_Data[i][k] = _Data[j][k];
						_Data[j][k] = tmp;
					}
			}
		}
	}
	for(UINT i = 0;i < MAX_PLAYER; i++){
		for( UINT j=0; j<9; j++){
			CString strData;
			strData.Format("%d",_Data[i][j]);
			SetItemText(i,j,strData);
		}
		
	}
}
void CStatListCtrl::addLine(UINT nUnum,UINT nPas,UINT nCmp,UINT nSho,UINT nOn,UINT nDrb,UINT nCmd,UINT nInt,UINT nCmi)
{
	if( nUnum >= 1 && nUnum <= MAX_PLAYER){
		_Data[nUnum-1][0] = nUnum;
		_Data[nUnum-1][1] = nPas;
		_Data[nUnum-1][2] = nCmp;
		_Data[nUnum-1][3] = nSho;
		_Data[nUnum-1][4] = nOn;
		_Data[nUnum-1][5] = nDrb;
		_Data[nUnum-1][6] = nCmd;
		_Data[nUnum-1][7] = nInt;
		_Data[nUnum-1][8] = nCmi;
		CString strText;
		strText.Format("%d",nUnum);
		InsertItem(nUnum-1,strText);
		for(int i=1; i<9; i++){
			strText.Format("%d",_Data[nUnum-1][i]);
			SetItemText(nUnum-1,i,strText);
		}
	}
}

⌨️ 快捷键说明

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