// opexeccersptestdlg.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "opexeccersptestdlg.h" #include "opexeccersptestframe.h" #include "opexeccersptesttdview.h" #include "opexeccersprecframe.h" #include "opexeccersptestsptlistview.h" #include "opexeccersptesttdlistview.h" #include "OpExecCERSPTestTdScrollView.h" #include "MediumQ.h" #include "RspCETd.h" #include "TdChannel.h" #include "RSPCETdRecord.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern int g_iTransMode; extern void TransDelay(int iTransMode, int iDS0, int iDS1, HWND hWnd = NULL); extern BOOL DoEvent(HWND hWnd); extern BOOL GetSubStringInHeadAndTail(const CString& szSource, CString& szSub, const CString& szHead, const CString& szTail); extern int StatStringCount(const CString& szSource, const CString& szMember); extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter); extern int g_UIOffset; ///////////////////////////////////////////////////////////////////////////// // COpExecCERSPTestDlg dialog extern HHOOK hHook; extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam); COpExecCERSPTestDlg::COpExecCERSPTestDlg(CRspCETd* pRspCETd, INT_PTR* pRet, CWnd* pParent /*=NULL*/) : CDialog(COpExecCERSPTestDlg::IDD, pParent) { //{{AFX_DATA_INIT(COpExecCERSPTestDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pRet = pRet; m_pRspCETd = pRspCETd; m_szFileName.Empty(); m_pOpExecCERSPTestFrame = NULL; } void COpExecCERSPTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COpExecCERSPTestDlg) DDX_Control(pDX, IDC_DEEP_FACTOR, m_cbDeepFactor); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COpExecCERSPTestDlg, CDialog) //{{AFX_MSG_MAP(COpExecCERSPTestDlg) ON_BN_CLICKED(IDC_BT_TEST, OnBtTest) ON_WM_SIZE() //}}AFX_MSG_MAP END_MESSAGE_MAP() BEGIN_EASYSIZE_MAP(COpExecCERSPTestDlg) EASYSIZE(IDC_BT_TEST, ES_BORDER, ES_BORDER, ES_KEEPSIZE,ES_KEEPSIZE,0) EASYSIZE(IDC_STATIC_DEPTH, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDC_STATIC_ONE, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDC_DEEP_FACTOR, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDC_STATIC_AB, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDOK, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDCANCEL, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0) EASYSIZE(IDC_STATIC_FRAME,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0) END_EASYSIZE_MAP ///////////////////////////////////////////////////////////////////////////// // COpExecCERSPTestDlg message handlers void COpExecCERSPTestDlg::OnOK() { // TODO: Add extra validation here CString szCaption = _T(""); Sleep(20); if (TRUE == this->m_pRspCETd->SaveData()) { szCaption.Empty(); szCaption.LoadString(IDS_OP_SUCCESS+g_UIOffset); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (OFFSET_CHINESE == g_UIOffset) AfxMessageBox(szCaption, MB_ICONINFORMATION); else MessageBoxEx(NULL, szCaption, STRING_MESSAGEBOXEX_TITLE, MB_ICONINFORMATION, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } else { this->ClearAll(); szCaption.Empty(); szCaption.LoadString(IDS_OP_FAIL+g_UIOffset); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (OFFSET_CHINESE == g_UIOffset) AfxMessageBox(szCaption, MB_ICONINFORMATION); else MessageBoxEx(NULL, szCaption, STRING_MESSAGEBOXEX_TITLE, MB_ICONINFORMATION, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } this->EndModalLoop(RET_OK); CDialog::OnOK(); } void COpExecCERSPTestDlg::OnCancel() { // TODO: Add extra cleanup here this->ClearAll(); this->EndModalLoop(RET_CANCEL); CDialog::OnCancel(); } BOOL COpExecCERSPTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CTdChannel* pTdChannel = NULL; CRect rect; CWnd *pStatic = GetDlgItem(IDC_STATIC_FRAME); pStatic->GetWindowRect(&rect); // pStatic->DestroyWindow(); this->ScreenToClient(&rect); m_pOpExecCERSPTestFrame = (COpExecCERSPTestFrame*)((CRuntimeClass*)RUNTIME_CLASS(COpExecCERSPTestFrame))->CreateObject(); m_pOpExecCERSPTestFrame->Create(NULL, NULL, WS_CHILD, rect, this); m_pOpExecCERSPTestFrame->MoveWindow(&rect); m_pOpExecCERSPTestFrame->ShowWindow(SW_SHOW); pTdChannel = (CTdChannel*)(this->m_pRspCETd->m_tdChaList.GetAt(m_pRspCETd->m_tdChaList.FindIndex(0))); //目前仅支持单通道 m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->m_pTdChannel = pTdChannel; ((CButton*)GetDlgItem(IDC_BT_TEST))->SetButtonStyle(BS_DEFPUSHBUTTON | BS_PUSHBUTTON | BS_NOTIFY); ((CButton*)GetDlgItem(IDC_BT_TEST))->SetFocus(); this->m_cbDeepFactor.SetCurSel(0); ReSetAll(); INIT_EASYSIZE; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COpExecCERSPTestDlg::ClearAll() { CString szFilePath = _T(""); CString szFileName = _T(""); CString szFile = _T(""); CString szOrder = _T(""); CString szResBuff = _T(""); CString szPrompt = _T(""); int iResSize = (int)VAL_ZERO; int iPollingTime = (int)VAL_ZERO; char aResBuff[2048] = {0}; szFilePath.Empty(); szFilePath.GetBufferSetLength(2048); ::GetCurrentDirectory(2048, szFilePath.GetBuffer(szFilePath.GetLength())); szFilePath.ReleaseBuffer(); szFileName.Empty(); szFileName = m_pRspCETd->m_szTdCN + _T(".xml"); szFile.Empty(); szFile = szFilePath + _T("\\") + szFileName; DeleteFile(szFile); TransDelay(g_iTransMode, 10, 50, NULL); m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); szOrder.Empty(); szOrder.Format(_T("meas_delete(\"%s\",\"%s\",\"%s\")\r\n"), m_pRspCETd->m_szPrCN, m_pRspCETd->m_szTzCN, m_pRspCETd->m_szTdCN); // MessageBox(szOrder); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 100, 200); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = (int)VAL_ZERO; while ((szResBuff.Find(">") == -1) && (iPollingTime < 3)) { Sleep(500); while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); if (szResBuff.Find('>') == -1) { szPrompt.Empty(); szPrompt.LoadString(IDS_OP_HOST_ERROR); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szPrompt, NULL, MB_ICONSTOP); } this->m_pRspCETd->ClearTdChaList(); } void COpExecCERSPTestDlg::ReSetAll() { CTdChannel* pTdChannel = NULL; CRspCETdRecord* pRspCETdRecord = NULL; CRect vRect; CRect lRect; int iSmWidth = (int)VAL_ZERO; int iSmHeight = (int)VAL_ZERO; int iTdChannelIndex = (int)VAL_ZERO; int iTdRecIndex = (int)VAL_ZERO; CListCtrl* pSptList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestSptListView->GetListCtrl()); // CClientDC dc(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView); // this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView->GetClientRect(vRect); // dc.FillSolidRect(vRect, RGB(0xFF,0xFF,0xFF)); iTdChannelIndex = (int)VAL_ZERO; while (iTdChannelIndex < m_pRspCETd->m_tdChaList.GetCount()) { pTdChannel = NULL; pTdChannel = (CTdChannel*)this->m_pRspCETd->m_tdChaList.GetAt(this->m_pRspCETd->m_tdChaList.FindIndex(iTdChannelIndex)); if (NULL != pTdChannel) { pTdChannel->ClearCESptRecList(); pTdChannel->LoadCEScriptFromDB(); iTdRecIndex = (int)VAL_ZERO; while (iTdRecIndex < pTdChannel->m_tdRecArray.GetSize()) { pRspCETdRecord = NULL; pRspCETdRecord = (CRspCETdRecord*)pTdChannel->m_tdRecArray.GetAt(iTdRecIndex); pRspCETdRecord->ClearAll(); iTdRecIndex++; } // this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView->m_lRect = lRect; } this->PutScriptToList(pSptList, pTdChannel->m_tdRecArray); iTdChannelIndex++; } this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate(); } void COpExecCERSPTestDlg::OnBtTest() { // TODO: Add your control notification handler code here POSITION posSCon; int iSConIndex = (int)VAL_ZERO; CTdChannel* pTdChannel = NULL; CRspCETdRecord* pRspCETdRecord = NULL; CListCtrl* pSptList = NULL; CListCtrl* pTdList = NULL; pSptList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestSptListView->GetListCtrl()); pTdList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestTdListView->GetListCtrl()); posSCon = pSptList->GetFirstSelectedItemPosition(); if (NULL != posSCon) { iSConIndex = pSptList->GetNextSelectedItem(posSCon); pRspCETdRecord = (CRspCETdRecord*)(pSptList->GetItemData(iSConIndex)); pTdChannel = NULL; pTdChannel = (CTdChannel*)this->m_pRspCETd->m_tdChaList.GetAt(this->m_pRspCETd->m_tdChaList.FindIndex(0)); if (this->TestingPointCollection(pTdList, pRspCETdRecord, pTdChannel) == TRUE) { this->GetDlgItem(IDOK)->EnableWindow(TRUE); } } } void COpExecCERSPTestDlg::PutScriptToList(CListCtrl* pTdList, CPtrArray& tdRecArray) { CRspCETdRecord* pRspCETdRecord = NULL; int iTdRecIndex = (int)VAL_ZERO; CString szTdCon = _T(""); pTdList->DeleteAllItems(); while (iTdRecIndex < tdRecArray.GetSize()) { pRspCETdRecord = (CRspCETdRecord*)tdRecArray.GetAt(iTdRecIndex); szTdCon.Empty(); szTdCon.Format(_T("%d"), pRspCETdRecord->m_iTsn); pTdList->InsertItem(iTdRecIndex, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fA); pTdList->SetItemText(iTdRecIndex, 1, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fB); pTdList->SetItemText(iTdRecIndex, 2, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fX); pTdList->SetItemText(iTdRecIndex, 3, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fY); pTdList->SetItemText(iTdRecIndex, 4, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%d"), pRspCETdRecord->m_iN); pTdList->SetItemText(iTdRecIndex, 5, szTdCon); szTdCon.Empty(); szTdCon.Format(_T("%f"), pRspCETdRecord->m_fK); pTdList->SetItemText(iTdRecIndex, 6, szTdCon); pTdList->SetItemData(iTdRecIndex, (DWORD)pRspCETdRecord); iTdRecIndex++; } } BOOL COpExecCERSPTestDlg::TestingPointCollection(CListCtrl* pTdList, CRspCETdRecord* pRspCETdRecord, CTdChannel* pTdChannel) { char aResBuff[2048] = {0}; int iResSize = (int)VAL_ZERO; LVFINDINFO info; CString szTSN = _T(""); int iListIndex = (int)VAL_ZERO; int iCurListIndex = (int)VAL_ZERO; int iTdRecIndex = (int)VAL_ZERO; int iRecIndex = (int)VAL_ZERO; int iTime = (int)VAL_ZERO; BOOL bIsRetrans = FALSE; CString szOrder = _T(""); CString szResBuff = _T(""); CString szResCon = _T(""); CString szPrompt = _T(""); CStringArray szArrayRes; // CStringArray szArrayRes2; CRspCETdRecord* pNewRspCETdRecord = NULL; int iPollingTime = 0; int iCountTime = 0; m_pRspCETd->m_fTRPeriod = m_pRspCETd->m_fTRPeriod + 5; info.flags = LVFI_PARTIAL | LVFI_PARAM; info.lParam = (long)pRspCETdRecord; iCurListIndex = pTdList->FindItem(&info); szTSN.Empty(); szTSN.Format(_T("%5d"), pRspCETdRecord->m_iTsn); if ((int)VAL_MINUS_ONE != iCurListIndex) { info.flags = LVFI_PARTIAL | LVFI_STRING; info.psz = szTSN; while ((int)VAL_MINUS_ONE != iListIndex) { iCurListIndex = iListIndex; iListIndex = pTdList->FindItem(&info, iCurListIndex); } iListIndex = iCurListIndex; pNewRspCETdRecord = new CRspCETdRecord(pRspCETdRecord->m_dwChID, pRspCETdRecord->m_pConnection); pTdChannel->m_tdRecArray.InsertAt(iListIndex + 1, (void*)pNewRspCETdRecord); } else { if (0 == pTdList->GetItemCount()) { iListIndex = -1; } else { iListIndex = pTdList->GetItemCount() - 1; } pNewRspCETdRecord = NULL; pNewRspCETdRecord = pRspCETdRecord; } /////////////////////////////////////////////////////////////////////////////// pNewRspCETdRecord->m_iTsn = pRspCETdRecord->m_iTsn; pNewRspCETdRecord->m_fA = pRspCETdRecord->m_fA; pNewRspCETdRecord->m_fB = pRspCETdRecord->m_fB; pNewRspCETdRecord->m_fX = pRspCETdRecord->m_fX; pNewRspCETdRecord->m_fY = pRspCETdRecord->m_fY; pNewRspCETdRecord->m_fK = pRspCETdRecord->m_fK; pNewRspCETdRecord->m_iN = pRspCETdRecord->m_iN; pNewRspCETdRecord->m_fR0 = pRspCETdRecord->m_fR0; pNewRspCETdRecord->m_fI = pRspCETdRecord->m_fI; pNewRspCETdRecord->m_fV = pRspCETdRecord->m_fV; pNewRspCETdRecord->m_colorREF = pRspCETdRecord->m_colorREF; pNewRspCETdRecord->m_recPtArea.SetRectEmpty(); pRspCETdRecord->m_fDepth = ((CMediumQ*)pTdChannel->m_pMedium)->CalculateDepth(pRspCETdRecord->m_fA, 0.5); pNewRspCETdRecord->m_fDepth = pRspCETdRecord->m_fDepth; // pTdChannel->m_tdRecArray.Add((void*)pNewRspCETdRecord); /////////////////////////////////////////////////////////////////////////////// // iListIndex = pTdList->GetItemCount(); do { if (!bIsRetrans) { m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; while ((szResBuff.Find(">") == -1) && (iPollingTime < MAX_POLLING_TIME)) { while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } if (szResBuff.Find('>') == -1) { m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize); szResBuff.Empty(); szResBuff.Format(_T("%s"), aResBuff); if (szResBuff.Find('>') == -1) { szPrompt.Empty(); szPrompt.LoadString(IDS_OP_HOST_ERROR); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szPrompt, NULL, MB_ICONSTOP); return FALSE; } } } /* iTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN; //发射周期与迭代次数决定延迟时间,真实环境需删除此处 if (bIsRetrans) //真实环境需删除此处 { iTime = 0; } */ m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); // szOrder.Format(_T("meas_point(%d,%d,%d,%d,%d,%d)\r\n"), (int)pNewRspCETdRecord->m_fC1*10, (int)pNewRspCETdRecord->m_fC2*10, (int)pNewRspCETdRecord->m_fP1*10, (int)pNewRspCETdRecord->m_fP2*10, iTime, (int)!bIsRetrans); szOrder.Format(_T("meas_point(%d,%d,%d,%d,0,%d)\r\n"), (int)(pNewRspCETdRecord->m_fA*10.0), (int)(pNewRspCETdRecord->m_fB*10.0), (int)(pNewRspCETdRecord->m_fX*10.0), (int)(pNewRspCETdRecord->m_fY*10.0), !bIsRetrans); // MessageBox(szOrder); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 100, 200); bIsRetrans = FALSE; iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; iCountTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN/COMM_TIMEOUT + MAX_POLLING_TIME; //依据发射周期设定轮询时长 while ((szResBuff.Find("]") == -1) && (iPollingTime < iCountTime)) { // DoEvent(this->m_hWnd); Sleep(1); while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } // MessageBox(szResBuff); iPollingTime++; } if ((iCountTime+1) == iPollingTime) { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); // DoEvent(this->m_hWnd); continue; } hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); try { if (GetSubStringInHeadAndTail(szResBuff, szResCon, _T("["), _T("]")) == TRUE) { if (StatStringCount(szResCon, _T(";")) == 4) { szArrayRes.RemoveAll(); SplitterString(szArrayRes, szResCon, _T(";")); if (szArrayRes.GetSize() == 4) { /*szArrayRes.GetAt(0).TrimLeft(); szArrayRes.GetAt(0).TrimRight(); szArrayRes.GetAt(1).TrimLeft(); szArrayRes.GetAt(1).TrimRight(); szArrayRes.GetAt(2).TrimLeft(); szArrayRes.GetAt(2).TrimRight(); szArrayRes.GetAt(3).TrimLeft(); szArrayRes.GetAt(3).TrimRight();*/ //by quyx 20180502 为适应vs2013编译器 CString szCstringRes0 = szArrayRes.GetAt(0); szCstringRes0.TrimLeft(); szCstringRes0.TrimRight(); CString szCstringRes1 = szArrayRes.GetAt(1); szCstringRes1.TrimLeft(); szCstringRes1.TrimRight(); CString szCstringRes2 = szArrayRes.GetAt(2); szCstringRes2.TrimLeft(); szCstringRes2.TrimRight(); CString szCstringRes3 = szArrayRes.GetAt(3); szCstringRes3.TrimLeft(); szCstringRes3.TrimRight(); pNewRspCETdRecord->m_fI = (float)atof(szCstringRes0);// szArrayRes.GetAt(0)); pNewRspCETdRecord->m_fV = (float)atof(szCstringRes1);// szArrayRes.GetAt(1)); pNewRspCETdRecord->m_fR0 = (float)atof(szCstringRes2);// szArrayRes.GetAt(2)); pNewRspCETdRecord->m_fSP = (float)atof(szCstringRes3);// szArrayRes.GetAt(3)); pTdList->InsertItem(iListIndex + 1, szTSN); pTdList->SetItemText(iListIndex + 1, 1, szCstringRes0);// szArrayRes.GetAt(0)); pTdList->SetItemText(iListIndex + 1, 2, szCstringRes1);// szArrayRes.GetAt(1)); pTdList->SetItemText(iListIndex + 1, 3, szCstringRes2);// szArrayRes.GetAt(2)); pTdList->SetItemText(iListIndex + 1, 4, szCstringRes3);// szArrayRes.GetAt(3)); pTdList->SetHotItem(iListIndex + 1); pTdList->EnsureVisible(iListIndex + 1, TRUE); pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord); pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); pTdList->SetFocus(); } else { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); continue; //数据错,重测 } } else if (_T("0") == szResCon) { pNewRspCETdRecord->m_fI = (float)0; pNewRspCETdRecord->m_fV = (float)0; pNewRspCETdRecord->m_fR0 = (float)0; pNewRspCETdRecord->m_fSP = (float)0; pTdList->InsertItem(iListIndex + 1, szTSN); pTdList->SetItemText(iListIndex + 1, 1, _T("0")); pTdList->SetItemText(iListIndex + 1, 2, _T("0")); pTdList->SetItemText(iListIndex + 1, 3, _T("0")); pTdList->SetItemText(iListIndex + 1, 4, _T("0")); pTdList->SetHotItem(iListIndex + 1); pTdList->EnsureVisible(iListIndex + 1, TRUE); pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord); pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); pTdList->SetFocus(); } else { // TransDelay(g_iTransMode, 3, 20, this->m_hWnd); //数据错,重测 bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); // DoEvent(this->m_hWnd); continue; } } else { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); DoEvent(this->m_hWnd); continue; } } catch (...) { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); continue; } DoEvent(this->m_hWnd); } while (TRUE == bIsRetrans); if (pNewRspCETdRecord->m_fR0 > pTdChannel->m_fMaxR0) { pTdChannel->m_fMaxR0 = pNewRspCETdRecord->m_fR0; } if (pNewRspCETdRecord->m_fDepth > pTdChannel->m_fMaxDepth) { pTdChannel->m_fMaxDepth = pNewRspCETdRecord->m_fDepth; } this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate(); if (19 == pTdChannel->m_pMedium->m_iAR) { ///////////////////////////////////////////////////////////////// iListIndex = (int)VAL_ZERO; iCurListIndex = (int)VAL_ZERO; pNewRspCETdRecord = NULL; m_pRspCETd->m_fTRPeriod = m_pRspCETd->m_fTRPeriod + 5; info.flags = LVFI_PARTIAL | LVFI_PARAM; info.lParam = (long)pRspCETdRecord; iCurListIndex = pTdList->FindItem(&info); szTSN.Empty(); szTSN.Format(_T("%5d"), pRspCETdRecord->m_iTsn); if ((int)VAL_MINUS_ONE != iCurListIndex) { info.flags = LVFI_PARTIAL | LVFI_STRING; info.psz = szTSN; while ((int)VAL_MINUS_ONE != iListIndex) { iCurListIndex = iListIndex; iListIndex = pTdList->FindItem(&info, iCurListIndex); } iListIndex = iCurListIndex; pNewRspCETdRecord = new CRspCETdRecord(pRspCETdRecord->m_dwChID, pRspCETdRecord->m_pConnection); pTdChannel->m_tdRecArray.InsertAt(iListIndex + 1, (void*)pNewRspCETdRecord); } /////////////////////////////////////////////////////////////////////////////// pNewRspCETdRecord->m_iTsn = pRspCETdRecord->m_iTsn; pNewRspCETdRecord->m_fA = pRspCETdRecord->m_fA * (-1); pNewRspCETdRecord->m_fB = pRspCETdRecord->m_fB; pNewRspCETdRecord->m_fX = pRspCETdRecord->m_fX; pNewRspCETdRecord->m_fY = pRspCETdRecord->m_fY; pNewRspCETdRecord->m_fK = pRspCETdRecord->m_fK; pNewRspCETdRecord->m_iN = pRspCETdRecord->m_iN; pNewRspCETdRecord->m_fR0 = pRspCETdRecord->m_fR0; pNewRspCETdRecord->m_fI = pRspCETdRecord->m_fI; pNewRspCETdRecord->m_fV = pRspCETdRecord->m_fV; pNewRspCETdRecord->m_colorREF = pRspCETdRecord->m_colorREF; pNewRspCETdRecord->m_recPtArea.SetRectEmpty(); // pRspCETdRecord->m_fDepth = ((CMediumQ*)pTdChannel->m_pMedium)->CalculateDepth(pRspCETdRecord->m_fA, 0.5); pNewRspCETdRecord->m_fDepth = pRspCETdRecord->m_fDepth; // pTdChannel->m_tdRecArray.Add((void*)pNewRspCETdRecord); /////////////////////////////////////////////////////////////////////////////// // iListIndex = pTdList->GetItemCount(); do { if (!bIsRetrans) { m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; while ((szResBuff.Find(">") == -1) && (iPollingTime < MAX_POLLING_TIME)) { while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } if (szResBuff.Find('>') == -1) { m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize); szResBuff.Empty(); szResBuff.Format(_T("%s"), aResBuff); if (szResBuff.Find('>') == -1) { szPrompt.Empty(); szPrompt.LoadString(IDS_OP_HOST_ERROR); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szPrompt, NULL, MB_ICONSTOP); return FALSE; } } } /* iTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN; //发射周期与迭代次数决定延迟时间,真实环境需删除此处 if (bIsRetrans) //真实环境需删除此处 { iTime = 0; } */ m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff(); m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); // szOrder.Format(_T("meas_point(%d,%d,%d,%d,%d,%d)\r\n"), (int)pNewRspCETdRecord->m_fC1*10, (int)pNewRspCETdRecord->m_fC2*10, (int)pNewRspCETdRecord->m_fP1*10, (int)pNewRspCETdRecord->m_fP2*10, iTime, (int)!bIsRetrans); szOrder.Format(_T("meas_point(%d,%d,%d,%d,0,%d)\r\n"), (int)(pNewRspCETdRecord->m_fA*10.0), (int)(pNewRspCETdRecord->m_fB*10.0), (int)(pNewRspCETdRecord->m_fX*10.0), (int)(pNewRspCETdRecord->m_fY*10.0), !bIsRetrans); // MessageBox(szOrder); m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 100, 200); bIsRetrans = FALSE; iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; iCountTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN/COMM_TIMEOUT + MAX_POLLING_TIME; //依据发射周期设定轮询时长 while ((szResBuff.Find("]") == -1) && (iPollingTime < iCountTime)) { // DoEvent(this->m_hWnd); Sleep(1); while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } // MessageBox(szResBuff); iPollingTime++; } if ((iCountTime+1) == iPollingTime) { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); // DoEvent(this->m_hWnd); continue; } hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); try { if (GetSubStringInHeadAndTail(szResBuff, szResCon, _T("["), _T("]")) == TRUE) { if (StatStringCount(szResCon, _T(";")) == 4) { szArrayRes.RemoveAll(); SplitterString(szArrayRes, szResCon, _T(";")); if (szArrayRes.GetSize() == 4) { /*szArrayRes.GetAt(0).TrimLeft(); szArrayRes.GetAt(0).TrimRight(); szArrayRes.GetAt(1).TrimLeft(); szArrayRes.GetAt(1).TrimRight(); szArrayRes.GetAt(2).TrimLeft(); szArrayRes.GetAt(2).TrimRight(); szArrayRes.GetAt(3).TrimLeft(); szArrayRes.GetAt(3).TrimRight();*/ //by quyx 20180502 为适应vs2013编译器 CString szCstringRes0 = szArrayRes.GetAt(0); szCstringRes0.TrimLeft();szCstringRes0.TrimRight(); CString szCstringRes1 = szArrayRes.GetAt(1); szCstringRes1.TrimLeft();szCstringRes1.TrimRight(); CString szCstringRes2 = szArrayRes.GetAt(2); szCstringRes2.TrimLeft();szCstringRes2.TrimRight(); CString szCstringRes3 = szArrayRes.GetAt(3); szCstringRes3.TrimLeft(); szCstringRes3.TrimRight(); pNewRspCETdRecord->m_fI = (float)atof(szCstringRes0);// szArrayRes.GetAt(0)); pNewRspCETdRecord->m_fV = (float)atof(szCstringRes1);//szArrayRes.GetAt(1)); pNewRspCETdRecord->m_fR0 = (float)atof(szCstringRes2);//szArrayRes.GetAt(2)); pNewRspCETdRecord->m_fSP = (float)atof(szCstringRes3);//szArrayRes.GetAt(3)); pTdList->InsertItem(iListIndex + 1, szTSN); pTdList->SetItemText(iListIndex + 1, 1, szCstringRes0);//szArrayRes.GetAt(0)); pTdList->SetItemText(iListIndex + 1, 2, szCstringRes1);//szArrayRes.GetAt(1)); pTdList->SetItemText(iListIndex + 1, 3, szCstringRes2);//szArrayRes.GetAt(2)); pTdList->SetItemText(iListIndex + 1, 4, szCstringRes3);//szArrayRes.GetAt(3)); pTdList->SetHotItem(iListIndex + 1); pTdList->EnsureVisible(iListIndex + 1, TRUE); pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord); pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); pTdList->SetFocus(); } else { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); continue; //数据错,重测 } } else if (_T("0") == szResCon) { pNewRspCETdRecord->m_fI = (float)0; pNewRspCETdRecord->m_fV = (float)0; pNewRspCETdRecord->m_fR0 = (float)0; pNewRspCETdRecord->m_fSP = (float)0; pTdList->InsertItem(iListIndex + 1, szTSN); pTdList->SetItemText(iListIndex + 1, 1, _T("0")); pTdList->SetItemText(iListIndex + 1, 2, _T("0")); pTdList->SetItemText(iListIndex + 1, 3, _T("0")); pTdList->SetItemText(iListIndex + 1, 4, _T("0")); pTdList->SetHotItem(iListIndex + 1); pTdList->EnsureVisible(iListIndex + 1, TRUE); pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord); pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); pTdList->SetFocus(); } else { // TransDelay(g_iTransMode, 3, 20, this->m_hWnd); //数据错,重测 bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); // DoEvent(this->m_hWnd); continue; } } else { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); DoEvent(this->m_hWnd); continue; } } catch (...) { bIsRetrans = TRUE; hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szResBuff); continue; } DoEvent(this->m_hWnd); } while (TRUE == bIsRetrans); if (pNewRspCETdRecord->m_fR0 > pTdChannel->m_fMaxR0) { pTdChannel->m_fMaxR0 = pNewRspCETdRecord->m_fR0; } if (pNewRspCETdRecord->m_fDepth > pTdChannel->m_fMaxDepth) { pTdChannel->m_fMaxDepth = pNewRspCETdRecord->m_fDepth; } this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate(); ///////////////////////////////////////////////////////////////// } return TRUE; } BOOL COpExecCERSPTestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) { return TRUE; } if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); } void COpExecCERSPTestDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); UPDATE_EASYSIZE; // TODO: Add your message handler code here //onsize在对话框初始化前会被调用,但此时相关对象并没有被创建起来,故需在要此进行判断 if (m_pOpExecCERSPTestFrame) { CRect rect; CWnd *pStatic = GetDlgItem(IDC_STATIC_FRAME); pStatic->GetWindowRect(&rect); this->ScreenToClient(&rect); m_pOpExecCERSPTestFrame->MoveWindow(&rect); m_pOpExecCERSPTestFrame->ShowWindow(SW_SHOW); } }