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
@@ -0,0 +1,668 @@
// Dial2DTaskList.cpp : implementation file
//
#include "stdafx.h"
#include "GeoMative.h"
#include "Dial2DTaskTree.h"
#include "TaskDataOper.h"
#include "DialTaskManager.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDial2DTaskTree 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;
CDial2DTaskTree::CDial2DTaskTree(CWnd* pParent /*=NULL*/)
: CNetRequestDialog(CDial2DTaskTree::IDD, pParent)
{
//{{AFX_DATA_INIT(CDial2DTaskTree)
//}}AFX_DATA_INIT
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 CDial2DTaskTree::DoDataExchange(CDataExchange* pDX)
{
CNetRequestDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDial2DTaskTree)
DDX_Control(pDX, IDC_TREE_TASK_LIST, m_treeTask);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDial2DTaskTree, CNetRequestDialog)
//{{AFX_MSG_MAP(CDial2DTaskTree)
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, &CDial2DTaskTree::OnDeleteitemTreeTaskList)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_TREE_TASK_LIST, &CDial2DTaskTree::OnNMCustomdrawTreeTaskList)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDial2DTaskTree message handlers
BOOL CDial2DTaskTree::OnInitDialog()
{
CNetRequestDialog::OnInitDialog();
// TODO: Add extra initialization here
//ShowTaskTree(EN_2D_TASK_TREE);
//去掉根节点复选框
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 CDial2DTaskTree::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);
// }
CTreeCtrl* CDial2DTaskTree::GetTaskTreePtr()
{
return &m_treeTask;
}
void CDial2DTaskTree::ShowTaskTree(int iSptType, time_t tStartTime/* = 0*/, time_t tEndTime/* = 0*/)
{
//清空勾选个数
m_uSelTaskCount = 0;
//清空列表数据
m_treeTask.DeleteAllItems();
OnClearTaskList();
//m_bAppendData = FALSE;
//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:CDial2DTaskTree::ShowTaskTree query time range:m_tSaveQueryStartTime=%s - m_tSaveQueryEndTime=%s--------\n"), Tm2LocalStr(m_tSaveQueryStartTime), Tm2LocalStr(m_tSaveQueryEndTime));
CFileOperTools::GetInstance()->WriteComLog(strLog);
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)(EN_2D_TASK_TREE & 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 CDial2DTaskTree::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 CDial2DTaskTree::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 CDial2DTaskTree::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 CDial2DTaskTree::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 CDial2DTaskTree::OnTaskmanagerCreateTask()
{
// TODO: 在此添加命令处理程序代码
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnButtonCreateTask();
}
}
void CDial2DTaskTree::OnTaskmanagerDeleteTask()
{
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnButtonDelTask();
}
}
// void CDial2DTaskTree::OnTaskmanagerTaskInfoSyn()
// {
// if (NULL != m_pParentWnd)
// {
// ((CDialTaskManager*)m_pParentWnd)->OnCmdTaskInfoSyn();
// }
// }
void CDial2DTaskTree::OnTaskmanagerCancelTest()
{
if (NULL != m_pParentWnd)
{
((CDialTaskManager*)m_pParentWnd)->OnCmdTaskCancelTest();
}
}
void CDial2DTaskTree::OnTaskmanagerRefreshList()
{
if (NULL != m_pParentWnd)
{
::SendMessage(m_pParentWnd->GetSafeHwnd(), WM_MSG_UPDATE_TASK_LIST, 0, 0);
}
}
void CDial2DTaskTree::OnDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CNetRequestDialog::OnDeleteItem(nIDCtl, lpDeleteItemStruct);
}
void CDial2DTaskTree::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 CDial2DTaskTree::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);
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:CDial2DTaskTree::PreNetResponse request start time%s,end time=%s\n"), Tm2LocalStr(m_tQueryStartTime), Tm2LocalStr(m_tQueryEndTime));
CFileOperTools::GetInstance()->WriteComLog(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)(EN_2D_TASK_TREE & 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
{
//已经加载到最后一天
//树控件显示列表
CTaskDataOper taskOper;
taskOper.m_uiDevID = m_uiGD10DevID;
//总查询时间范围
taskOper.SetCurrentTimeRange(g_i64SaveQueryTaskStartTime, g_i64SaveQueryTaskEndTime + 3600);
taskOper.InitOnLineTaskTreeCtrl(m_treeTask, EN_2D_TASK_TREE, 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 CDial2DTaskTree::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;
}
}
//清空列表
void CDial2DTaskTree::OnClearTaskList()
{
m_mapTaskList.clear();
}
/*BOOL CDial2DTaskTree::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 CDial2DTaskTree::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 CDial2DTaskTree::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;
}