This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
+686
View File
@@ -0,0 +1,686 @@
// Dial2DTaskList.cpp : implementation file
//
#include "stdafx.h"
#include "GeoMative.h"
#include "DialTaskTree.h"
#include "TaskDataOper.h"
#include "DialTaskManager.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDialTaskTree dialog
extern int g_UIOffset;
extern int g_iUILanguage;
extern CGeoMativeApp theApp;
extern time_t Str2GmtTm(CString szTime);
extern CString Tm2LocalStr(time_t t);
extern time_t g_i64SaveQueryTaskStartTime;
extern time_t g_i64SaveQueryTaskEndTime;
CDialTaskTree::CDialTaskTree(CWnd* pParent /*=NULL*/)
: CNetRequestDialog(CDialTaskTree::IDD, pParent)
{
//{{AFX_DATA_INIT(CDialTaskTree)
//}}AFX_DATA_INIT
m_iSptType = 0;
m_pParentWnd = NULL;
m_dwTaskID = 0;
m_tQueryStartTime = 0;
m_tQueryEndTime = 0;
m_tSaveQueryStartTime = 0;
m_tSaveQueryEndTime = 0;
//m_bAppendData = FALSE;
m_uSelTaskCount = 0;
}
void CDialTaskTree::DoDataExchange(CDataExchange* pDX)
{
CNetRequestDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialTaskTree)
DDX_Control(pDX, IDC_TREE_TASK_LIST, m_treeTask);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDialTaskTree, CNetRequestDialog)
//{{AFX_MSG_MAP(CDialTaskTree)
ON_WM_SHOWWINDOW()
ON_NOTIFY(NM_CLICK, IDC_TREE_TASK_LIST, OnClickTreeTaskList)
//ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_TASK_LIST, OnSelchangedTreeTaskList)
//}}AFX_MSG_MAP
ON_NOTIFY(NM_RCLICK, IDC_TREE_TASK_LIST, OnNMRClickTreeTaskList)
ON_COMMAND(IDM_TASKMANAGER_CREATETASK, OnTaskmanagerCreateTask)
ON_COMMAND(IDM_TASKMANAGER_DELETETASK, OnTaskmanagerDeleteTask)
//ON_COMMAND(IDM_TASKMANAGER_TASKINFORMATIONSYN, OnTaskmanagerTaskInfoSyn)
ON_COMMAND(IDM_TASKMANAGER_CANCELTEST, OnTaskmanagerCancelTest)
ON_COMMAND(IDM_TASKMANAGER_REFRESHLIST, OnTaskmanagerRefreshList)
ON_WM_DELETEITEM()
ON_NOTIFY(TVN_DELETEITEM, IDC_TREE_TASK_LIST, &CDialTaskTree::OnDeleteitemTreeTaskList)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_TREE_TASK_LIST, &CDialTaskTree::OnNMCustomdrawTreeTaskList)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialTaskTree message handlers
BOOL CDialTaskTree::OnInitDialog()
{
CNetRequestDialog::OnInitDialog();
// TODO: Add extra initialization here
ShowTaskTree(m_iSptType);
//去掉根节点复选框
m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
//HTREEITEM rootItem = m_treeTask.GetRootItem();
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// void CDialTaskTree::AppendTaskTree(int iSptType, time_t tStartTime/* = 0*/, time_t tEndTime/* = 0*/)
// {
// m_bAppendData = TRUE;
// m_iSptType = iSptType;
// int iMaxRecvLen = sizeof(UINT32) + 300 * sizeof(STRemTaskTable);
//
// time_t tm;
// //GetSystemTime(&sysTm);
//
// theApp.m_NetWorkOper.SetSuspendForThread(true);
//
// time_t uiCurTime = 0;
// time_t uiStartTime = 0;
// /*if (m_tQureyStartTime == 0 && m_tQueryEndTime == 0)
// {
// uiCurTime = (time_t)time(&tm);
// uiCurTime += 3600 * 8;
// //默认显示最近一周的,后期增加选框,显示最近的
// m_tQureyStartTime = uiCurTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
// m_tQueryEndTime = uiCurTime;
// }
// else
// {
// m_tQureyStartTime = tStartTime;
// m_tQueryEndTime = tEndTime;
// }*/
// //时间往前挪一天
// m_tQueryEndTime = m_tQureyStartTime;
// m_tQureyStartTime = m_tQureyStartTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
//
// uiCurTime = htonl(m_tQueryEndTime);
// uiStartTime = htonl(m_tQureyStartTime);
// char chSendStr[20] = { 0 };
// UINT32 uiDevID = htonl(m_uiGD10DevID);
// memcpy(chSendStr, &uiDevID, sizeof(UINT32));
// memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
// memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
// chSendStr[3 * sizeof(UINT32)] = (char)(iSptType & 0xFF);
// PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024);
// }
void CDialTaskTree::ShowTaskTree(int iSptType, time_t tStartTime/* = 0*/, time_t tEndTime/* = 0*/)
{
//清空勾选个数
m_uSelTaskCount = 0;
//清空列表数据
m_treeTask.DeleteAllItems();
OnClearTaskList();
//m_bAppendData = FALSE;
m_iSptType = iSptType;
//GetSystemTime(&sysTm);
theApp.m_NetWorkOper.SetSuspendForThread(true);
CString strLog;
time_t uiCurTime = 0;
time_t uiStartTime = 0;
if (tStartTime == 0 && tEndTime == 0)
{
if (g_i64SaveQueryTaskStartTime == 0 && g_i64SaveQueryTaskEndTime == 0)
{
time_t tm;
uiCurTime = (time_t)time(&tm);
//uiCurTime += 3600 * 8;
//默认显示最近一周的任务
m_tSaveQueryStartTime = uiCurTime - 7 * 24 * 3600;
m_tSaveQueryEndTime = uiCurTime;
m_tQueryStartTime = m_tSaveQueryStartTime;
m_tQueryEndTime = m_tSaveQueryStartTime + 1 * 24 * 3600;
g_i64SaveQueryTaskStartTime = m_tSaveQueryStartTime;
g_i64SaveQueryTaskEndTime = m_tSaveQueryEndTime;
}
else
{
m_tSaveQueryStartTime = g_i64SaveQueryTaskStartTime;
m_tSaveQueryEndTime = g_i64SaveQueryTaskEndTime;
m_tQueryStartTime = m_tSaveQueryStartTime;
m_tQueryEndTime = m_tSaveQueryStartTime + 1 * 24 * 3600;
}
}
else
{
m_tSaveQueryStartTime = tStartTime;
m_tSaveQueryEndTime = tEndTime + 3600 * 8;
m_tQueryStartTime = tStartTime;
m_tQueryEndTime = tStartTime + 1 * 24 * 3600;
g_i64SaveQueryTaskStartTime = m_tSaveQueryStartTime;
g_i64SaveQueryTaskEndTime = m_tSaveQueryEndTime;
}
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree query time range:m_tSaveQueryStartTime=%s - m_tSaveQueryEndTime=%s--------\n"), Tm2LocalStr(m_tSaveQueryStartTime), Tm2LocalStr(m_tSaveQueryEndTime));
//OutputDebugString(strLog);
CFileOperTools::GetInstance()->WriteComLog(strLog);
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree request time:m_tQueryStartTime=%s - m_tQueryEndTime=%s\n"), Tm2LocalStr(m_tQueryStartTime), Tm2LocalStr(m_tQueryEndTime));
//OutputDebugString(strLog);
CFileOperTools::GetInstance()->WriteComLog(strLog);
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree request time:g_i64SaveQueryTaskStartTime=%s - g_i64SaveQueryTaskEndTime=%s\n"), Tm2LocalStr(g_i64SaveQueryTaskStartTime), Tm2LocalStr(g_i64SaveQueryTaskEndTime));
//OutputDebugString(strLog);
CFileOperTools::GetInstance()->WriteComLog(strLog);
//m_tSaveQureyEndTime = m_tQueryEndTime;
//tm* tmStart = localtime(&m_tQureyStartTime);
//tm* tmEnd = localtime(&m_tQueryEndTime);
//CTime clsStart(tmStart->tm_year, tmStart->tm_mon, tmStart->tm_mday, tmStart->tm_hour, tmStart->tm_min, tmStart->tm_sec);
//CTime clsStop(tmEnd->tm_year, tmEnd->tm_mon, tmEnd->tm_mday, tmEnd->tm_hour, tmEnd->tm_min, tmEnd->tm_sec);
uiCurTime = htonl(m_tQueryEndTime);
uiStartTime = htonl(m_tQueryStartTime);
char chSendStr[20] = { 0 };
UINT32 uiDevID = htonl(m_uiGD10DevID);
memcpy(chSendStr, &uiDevID, sizeof(UINT32));
memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
chSendStr[3 * sizeof(UINT32)] = (char)(iSptType & 0xFF);
////////1、比如是请求2018-12-29 到 2019-01-02的数据,这里初始的请求范围为uiStartTime="2018-12-29 00:00:00" tEndTime="2019-12-29 23:59:59"
PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024, WM_NET_RESPONSE, 0xFFFFFFFF, EN_DEV_CLOUND, 60000);
}
void CDialTaskTree::OnShowWindow(BOOL bShow, UINT nStatus)
{
CNetRequestDialog::OnShowWindow(bShow, nStatus);
if (TRUE == bShow )
{
CRect rect;
GetClientRect(&rect);
m_treeTask.MoveWindow(&rect);
m_treeTask.ShowWindow(SW_SHOW);
}
// TODO: Add your message handler code here
}
void CDialTaskTree::SetChildCheck(HTREEITEM hCurItem, BOOL bCheck)
{
HTREEITEM hChildItem = m_treeTask.GetChildItem(hCurItem);
if (hChildItem == NULL)
{
return;
}
m_uSelTaskCount = 0;
while (hChildItem)
{
if (bCheck)
{
m_uSelTaskCount++;
}
m_treeTask.SetCheck(hChildItem, bCheck);
hChildItem = m_treeTask.GetNextSiblingItem(hChildItem);
}
}
void CDialTaskTree::OnClickTreeTaskList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POINT point;
if (!GetCursorPos(&point))
{
return;
}
m_treeTask.ScreenToClient(&point);
UINT uFlags;
HTREEITEM hItem = m_treeTask.HitTest(point, &uFlags);
if (hItem == NULL)
return;
//点中复选框
if (hItem != NULL && TVHT_ONITEMSTATEICON&uFlags)
{
//点击勾选按钮不选中
m_treeTask.Select(hItem, TVGN_CARET);
//获取当前复选状态
BOOL bParentCheck = m_treeTask.GetCheck(hItem);
if (bParentCheck)
{
m_uSelTaskCount--;
}
else
{
m_uSelTaskCount++;
}
//设置子节点复选状态
SetChildCheck(hItem, !bParentCheck);
//设置父节点文本
HTREEITEM hRoot = m_treeTask.GetRootItem();
CString strItem;
strItem.LoadString(IDS_TASK_TREE_ROOT + g_UIOffset);
strItem.Format(_T("%s (%d)"), strItem, m_uSelTaskCount);
m_treeTask.SetItemText(hRoot, strItem);
return;
//m_treeTask.Select(hItem, TVGN_CARET);
}
DWORD dwTaskID = m_treeTask.GetItemData(hItem);
if (dwTaskID == m_dwTaskID)
{
return;
}
m_dwTaskID = dwTaskID;
if (m_pParentWnd)
{
m_pParentWnd->SendMessage(WM_CLICK_TASK_TREE, (WPARAM)m_dwTaskID, 0);
}
*pResult = 0;
}
void CDialTaskTree::OnNMRClickTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
{
POINT point;
if (!GetCursorPos(&point))
{
return;
}
m_treeTask.ScreenToClient(&point);
UINT uFlags;
HTREEITEM hItem = m_treeTask.HitTest(point, &uFlags);
/*if (hItem != NULL && TVHT_ONITEM&uFlags)
{
m_treeTask.Select(hItem, TVGN_CARET);
}*/
if (!m_treeTask.ItemHasChildren(hItem))
{
m_treeTask.ClientToScreen(&point);
CMenu menu;
menu.LoadMenu(IDR_MENU_TASK_MANAGER); //加载现有的菜单资源
CMenu *pPopupMenu = menu.GetSubMenu(0); //获取以创建好的弹出式菜单
if (LANG_ZHCN == g_iUILanguage)
{
pPopupMenu->ModifyMenu(0, MF_BYPOSITION, IDM_TASKMANAGER_CREATETASK, _T("创建任务"));
pPopupMenu->ModifyMenu(1, MF_BYPOSITION, IDM_TASKMANAGER_DELETETASK, _T("删除任务"));
//pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_TASKINFORMATIONSYN, _T("任务信息同步"));
pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_CANCELTEST, _T("取消测试"));
pPopupMenu->ModifyMenu(3, MF_BYPOSITION, IDM_TASKMANAGER_REFRESHLIST, _T("刷新列表"));
}
else
{
pPopupMenu->ModifyMenu(0, MF_BYPOSITION, IDM_TASKMANAGER_CREATETASK, "create task");
pPopupMenu->ModifyMenu(1, MF_BYPOSITION, IDM_TASKMANAGER_DELETETASK, "delete task");
//pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_TASKINFORMATIONSYN, _T("task info syn"));
pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_CANCELTEST, _T("cancel test"));
pPopupMenu->ModifyMenu(3, MF_BYPOSITION, IDM_TASKMANAGER_REFRESHLIST, _T("Refresh list"));
}
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
*pResult = 0;
}
void CDialTaskTree::OnTaskmanagerCreateTask()
{
// TODO: 在此添加命令处理程序代码
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnButtonCreateTask();
}
}
void CDialTaskTree::OnTaskmanagerDeleteTask()
{
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnButtonDelTask();
}
}
// void CDialTaskTree::OnTaskmanagerTaskInfoSyn()
// {
// if (NULL != m_pParentWnd)
// {
// ((CDialTaskManager*)m_pParentWnd)->OnCmdTaskInfoSyn();
// }
// }
void CDialTaskTree::OnTaskmanagerCancelTest()
{
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnCmdTaskCancelTest();
}
}
void CDialTaskTree::OnTaskmanagerRefreshList()
{
if (NULL != m_pParentWnd)
{
::SendMessage(m_pParentWnd->GetSafeHwnd(), WM_MSG_UPDATE_TASK_LIST, 0, 0);
}
}
void CDialTaskTree::OnDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CNetRequestDialog::OnDeleteItem(nIDCtl, lpDeleteItemStruct);
}
void CDialTaskTree::OnDeleteitemTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
TVITEM& item = ((LPNMTREEVIEW)pNMHDR)->itemOld;
// free item data, ignore invalid shell items
if (item.lParam != 0)
{
delete (STTaskListItem*)item.lParam;//这里就会把你的内存释放掉
}
*pResult = 0;
}
void CDialTaskTree::PreNetResponse(WPARAM wParam, LPARAM lParam)
{
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
if (pResponsePacket == NULL)
{
return;
}
switch (pResponsePacket->clsPacketBase.ucCmd)
{
case EN_REQ_DOWNLOAD_TASK_TABLE://获取任务列表
{
/*if (!m_bAppendData)
{
OnGetTaskListResponse(wParam, lParam);
}
else
{
OnAppendTaskListResponse(wParam, lParam);
}*/
OnAddNewItemToTaskList(wParam, lParam);
CString strLog;
CTime clsStart(m_tSaveQueryStartTime);
CTime clsStop(m_tSaveQueryEndTime);
//strLog.Format(_T("zm:CDialTaskTree::PreNetResponse query time rangestarttime=%s,endTime=%s\n"), Tm2LocalStr(m_tSaveQueryStartTime), Tm2LocalStr(m_tSaveQueryEndTime));
//OutputDebugString(strLog);
CTimeSpan timeSpan1 = clsStop - clsStart;
int iDay = timeSpan1.GetDays();
if (iDay > 1)
{
//m_bAppendData = TRUE;
CTimeSpan ts(1, 0, 0, 0); // 加1天
clsStart = clsStart + ts;
CString date = clsStart.Format("%Y-%m-%d %H:%M:%S ");
m_tSaveQueryStartTime = Str2GmtTm(date);
//clsStop = clsStop + ts;
//m_tSaveQureyEndTime = Str2GmtTm(clsStop.Format("%Y-%m-%d %H:%M:%S "));
time_t uiCurTime = 0;
time_t uiStartTime = 0;
//uiCurTime = (time_t)time(&m_tSaveQureyEndTime);
//uiCurTime += 3600 * 8;
//默认显示最近一周的,后期增加选框,显示最近的
//m_tQureyStartTime = uiCurTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
//m_tQueryEndTime = uiCurTime;
//uiCurTime = htonl(m_tSaveQureyEndTime);
m_tQueryStartTime = m_tSaveQueryStartTime;
m_tQueryEndTime = m_tSaveQueryStartTime + LOAD_DATA_BY_DATE_CELL * 24 * 3600+3600;//3600预留一小时,客户端与服务器偏差时间
uiStartTime = htonl(m_tQueryStartTime);
strLog.Format(_T("zm:CDialTaskTree::PreNetResponse request start time%s,end time=%s\n"), Tm2LocalStr(m_tQueryStartTime), Tm2LocalStr(m_tQueryEndTime));
CFileOperTools::GetInstance()->WriteComLog(strLog);
//OutputDebugString(strLog);
uiCurTime = htonl(m_tQueryEndTime);
char chSendStr[20] = { 0 };
UINT32 uiDevID = htonl(m_uiGD10DevID);
memcpy(chSendStr, &uiDevID, sizeof(UINT32));
memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
chSendStr[3 * sizeof(UINT32)] = (char)(m_iSptType & 0xFF);
PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024, WM_NET_RESPONSE, 0xFFFFFFFF, EN_DEV_CLOUND, 60000);
}
else
{
OutputDebugString(_T("zm:已经加载到最后一天\n"));
//树控件显示列表
CTaskDataOper taskOper;
taskOper.m_uiDevID = m_uiGD10DevID;
//总查询时间范围
taskOper.SetCurrentTimeRange(g_i64SaveQueryTaskStartTime, g_i64SaveQueryTaskEndTime + 3600);
taskOper.InitOnLineTaskTreeCtrl(m_treeTask, m_iSptType, m_mapTaskList, m_pParentWnd->GetSafeHwnd());
//去掉根节点复选框
//m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
//m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
//HTREEITEM rootItem = m_treeTask.GetRootItem();
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
}
}
break;
default:
break;
}
return;
}
//从服务器一批一批获取任务列表
BOOL CDialTaskTree::OnAddNewItemToTaskList(WPARAM wParam, LPARAM lParam)
{
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE || pResponsePacket->pData == NULL)
{
return FALSE;
}
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
UINT32 uiTaskNum = 0;
uiTaskNum = ntohl(uiRevData[0]);
STRemTaskTable *ptTaskTable = NULL;
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
{
theApp.m_NetWorkOper.SetSuspendForThread(false);
if (uiRevData[0] > 0)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("获取任务列表失败,数据长度错误"));
else
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
//return;
}
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
for (int i = 0; i < uiTaskNum; i++)
{
m_mapTaskList[ptTaskTable[i].ucTaskID] = ptTaskTable[i];
}
if (chMsgSyn != NULL)
{
free(chMsgSyn);
chMsgSyn = NULL;
}
CString strLog;
strLog.Format(_T("添加新的Item后,m_mapTaskList的大小%d\n"),m_mapTaskList.size());
OutputDebugString(strLog);
}
//清空列表
void CDialTaskTree::OnClearTaskList()
{
m_mapTaskList.clear();
CString strLog;
strLog.Format(_T("清空服务器列表m_mapTaskList大小%d\n"), m_mapTaskList.size());
OutputDebugString(strLog);
}
/*BOOL CDialTaskTree::OnGetTaskListResponse(WPARAM wParam, LPARAM lParam)
{
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE)
{
return FALSE;
}
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
UINT32 uiTaskNum = 0;
uiTaskNum = ntohl(uiRevData[0]);
STRemTaskTable *ptTaskTable = NULL;
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
{
theApp.m_NetWorkOper.SetSuspendForThread(false);
if (uiRevData[0] > 0)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("获取任务列表失败,数据长度错误"));
else
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
//return;
}
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
CTaskDataOper taskOper;
taskOper.m_uiDevID = m_uiGD10DevID;
taskOper.SetCurrentTimeRange(m_tQueryStartTime, m_tQueryEndTime);
taskOper.InitialOnLineTaskTreeCtrl(m_treeTask, m_iSptType, uiTaskNum, ptTaskTable, m_pParentWnd->GetSafeHwnd());
if (chMsgSyn != NULL)
{
free(chMsgSyn);
chMsgSyn = NULL;
}
//去掉根节点复选框
//m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
//m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
//HTREEITEM rootItem = m_treeTask.GetRootItem();
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
return TRUE;
}*/
/*BOOL CDialTaskTree::OnAppendTaskListResponse(WPARAM wParam, LPARAM lParam)
{
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE)
{
return FALSE;
}
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
UINT32 uiTaskNum = 0;
uiTaskNum = ntohl(uiRevData[0]);
STRemTaskTable *ptTaskTable = NULL;
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
{
theApp.m_NetWorkOper.SetSuspendForThread(false);
if (uiRevData[0] > 0)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("同步任务表接受失败,长度是错误!"));
else
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
//return;
}
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
CTaskDataOper taskOper;
taskOper.m_uiDevID = m_uiGD10DevID;
taskOper.SetCurrentTimeRange(m_tQueryStartTime, m_tQueryEndTime);
taskOper.AppendOnLineTaskTreeCtrl(m_treeTask, m_iSptType, uiTaskNum, ptTaskTable, m_pParentWnd->GetSafeHwnd());
if (chMsgSyn != NULL)
{
free(chMsgSyn);
chMsgSyn = NULL;
}
//去掉根节点复选框
// m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
// m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
// HTREEITEM rootItem = m_treeTask.GetRootItem();
// m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
return TRUE;
}*/
void CDialTaskTree::OnNMCustomdrawTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
switch (pNMCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
return;
case CDDS_ITEMPREPAINT:
{
// 这里做判断
CString s = m_treeTask.GetItemText((HTREEITEM)pNMCD->nmcd.dwItemSpec);
STTaskListItem* pTaskItem = NULL;
pTaskItem = (STTaskListItem*)m_treeTask.GetItemData((HTREEITEM)pNMCD->nmcd.dwItemSpec);
if (pTaskItem == NULL)
return;
//测试中
if (10 <= pTaskItem->byTestStatus && pTaskItem->byTestStatus < 20)
{
pNMCD->clrText = RGB(0, 0, 255); // 这样设置文字颜色
}
//测试失败
else if (30 <= pTaskItem->byTestStatus && pTaskItem->byTestStatus < 40)
{
pNMCD->clrText = RGB(255, 0, 0); // 这样设置文字颜色
}
}
break;
default:
break;
}
*pResult = 0;
}