Files
geomative/GeomativeStudio/cpp/Views/Dial2DTaskTree.cpp
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

668 lines
20 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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;
}