// 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(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 range:starttime=%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(pNMHDR); LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast(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; }