Files
wnmj/Servers/服务器组件/模块管理/ModuleListControl.cpp

233 lines
5.3 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "ModuleListControl.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CModuleListControl::CModuleListControl()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CModuleListControl::~CModuleListControl()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
VOID CModuleListControl::InitListControl()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INT nColIndex=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_CENTER,80);
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬"),LVCFMT_CENTER,80);
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,100);
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ"),LVCFMT_LEFT,100);
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,140);
InsertColumn(nColIndex++,TEXT("<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,120);
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INT CModuleListControl::SortListItemData(LPARAM lParam1, LPARAM lParam2, WORD wColumnIndex)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo * pGameModuleInfo1=(tagGameModuleInfo *)lParam1;
tagGameModuleInfo * pGameModuleInfo2=(tagGameModuleInfo *)lParam2;
//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
bool bInstall1=(pGameModuleInfo1->dwNativeVersion!=0L);
bool bInstall2=(pGameModuleInfo2->dwNativeVersion!=0L);
if (bInstall1!=bInstall2) return (bInstall1==true)?1:-1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch (wColumnIndex)
{
case 0: //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
{
return lstrcmp(pGameModuleInfo1->szGameName,pGameModuleInfo2->szGameName);
}
case 1: //<2F><><EFBFBD><EFBFBD>״̬
{
//<2F><><EFBFBD><EFBFBD>״̬
BYTE cbStatus1=0;
if (pGameModuleInfo1->dwNativeVersion!=0)
{
cbStatus1=(pGameModuleInfo1->dwNativeVersion==pGameModuleInfo1->dwServerVersion)?2:1;
}
//<2F><><EFBFBD><EFBFBD>״̬
BYTE cbStatus2=0;
if (pGameModuleInfo2->dwNativeVersion!=0)
{
cbStatus2=(pGameModuleInfo2->dwNativeVersion==pGameModuleInfo2->dwServerVersion)?2:1;
}
return (cbStatus1>cbStatus2)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
}
case 2: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
{
return lstrcmp(pGameModuleInfo1->szDataBaseName,pGameModuleInfo2->szDataBaseName);
}
case 3: //<2F><><EFBFBD>ӵ<EFBFBD>ַ
{
return lstrcmp(pGameModuleInfo1->szDataBaseAddr,pGameModuleInfo2->szDataBaseAddr);
}
case 4: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return lstrcmp(pGameModuleInfo1->szServerDLLName,pGameModuleInfo2->szServerDLLName);
}
case 5: //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
{
return lstrcmp(pGameModuleInfo1->szClientEXEName,pGameModuleInfo2->szClientEXEName);
}
}
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1>ɫ
VOID CModuleListControl::GetListItemColor(LPARAM lItemParam, UINT uItemStatus, tagListItemColor & ListItemColor)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(lItemParam!=NULL);
tagGameModuleInfo * pGameModuleInfo=(tagGameModuleInfo *)lItemParam;
//û<>а<EFBFBD>װ
if (pGameModuleInfo->dwNativeVersion==0L)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
ListItemColor.rcTextColor=RGB(125,125,125);
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(50,50,50):CR_NORMAL_BK;
return;
}
//<2F><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>
if (pGameModuleInfo->dwNativeVersion!=pGameModuleInfo->dwServerVersion)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
ListItemColor.rcTextColor=RGB(128,0,0);
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(230,230,0):CR_NORMAL_BK;
return;
}
//<2F>һ<E6B1BE><D2BB>
if (pGameModuleInfo->dwNativeVersion==pGameModuleInfo->dwServerVersion)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(0,0,128):CR_NORMAL_BK;
ListItemColor.rcTextColor=(uItemStatus&ODS_SELECTED)?RGB(255,255,255):RGB(0,0,0);
return;
}
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool CModuleListControl::InsertModuleInfo(tagGameModuleInfo * pGameModuleInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LVFINDINFO FindInfo;
ZeroMemory(&FindInfo,sizeof(FindInfo));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
FindInfo.flags=LVFI_PARAM;
FindInfo.lParam=(LPARAM)pGameModuleInfo;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
INT nInsertItem=FindItem(&FindInfo);
if (nInsertItem!=LB_ERR) return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
for (WORD i=0;i<m_ListHeaderCtrl.GetItemCount();i++)
{
if (i==0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INT nIndex=GetInsertIndex(pGameModuleInfo);
LPCTSTR pszDescribe=GetDescribeString(pGameModuleInfo,i);
nInsertItem=InsertItem(LVIF_TEXT|LVIF_PARAM,nIndex,pszDescribe,0,0,0,(LPARAM)pGameModuleInfo);
}
else
{
//<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
SetItem(nInsertItem,i,LVIF_TEXT,GetDescribeString(pGameModuleInfo,i),0,0,0,0);
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD CModuleListControl::GetInsertIndex(tagGameModuleInfo * pGameModuleInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INT nItemCount=GetItemCount();
tagGameModuleInfo * pGameModuleTemp=NULL;
//<2F><>ȡλ<C8A1><CEBB>
for (INT i=0;i<nItemCount;i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
pGameModuleTemp=(tagGameModuleInfo *)GetItemData(i);
//<2F><>װ<EFBFBD>ж<EFBFBD>
if ((pGameModuleInfo->dwNativeVersion==0)&&(pGameModuleTemp->dwNativeVersion!=0))
{
continue;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (lstrcmp(pGameModuleInfo->szGameName,pGameModuleTemp->szGameName)<0)
{
return i;
}
}
return nItemCount;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
LPCTSTR CModuleListControl::GetDescribeString(tagGameModuleInfo * pGameModuleInfo, WORD wColumnIndex)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
switch (wColumnIndex)
{
case 0: //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
{
return pGameModuleInfo->szGameName;
}
case 1: //<2F><><EFBFBD><EFBFBD>״̬
{
if (pGameModuleInfo->dwNativeVersion==0L) return TEXT("û<EFBFBD>а<EFBFBD>װ");
if (pGameModuleInfo->dwServerVersion!=pGameModuleInfo->dwNativeVersion) return TEXT("<EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD>");
return TEXT("<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>װ");
}
case 2: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
{
return pGameModuleInfo->szDataBaseName;
}
case 3: //<2F><><EFBFBD>ӵ<EFBFBD>ַ
{
return pGameModuleInfo->szDataBaseAddr;
}
case 4: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return pGameModuleInfo->szServerDLLName;
}
case 5: //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
{
return pGameModuleInfo->szClientEXEName;
}
}
return NULL;
}
//////////////////////////////////////////////////////////////////////////////////