📄 sortedlistctrl.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 + -