void CDlgModelManage::OnNMDblclkListModelState(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); if(-1 != pNMItemActivate->iItem) { CString szModelName=m_listModelState.GetItemText(pNMItemActivate->iItem,0); string strModelName=WideCharToMultiChar(wstring(szModelName.GetBuffer())); map<string,shared_ptr<CDlgModelDetail>>::iterator ite = m_mapDlgModelDetail.find(strModelName); if (ite==m_mapDlgModelDetail.end()) { shared_ptr<CDlgModelDetail> dlgModelDetail = shared_ptr<CDlgModelDetail>(new CDlgModelDetail()); dlgModelDetail->Create(IDD_DIALOG_MODEL_DETAIL,this); std::pair<map<string,shared_ptr<CDlgModelDetail>>::iterator,bool > ret; ret=m_mapDlgModelDetail.insert(make_pair(strModelName,dlgModelDetail)); if (ret.second) { ite=ret.first; } } if (ite!=m_mapDlgModelDetail.end()) { ite->second->m_pProManager=&m_ProManager; ite->second->m_strModelName=ite->first; ite->second->ShowWindow(SW_SHOW); } } *pResult = 0; }
// 生成ADC数据重发帧 void CADCDataRecThread::MakeADCDataRetransmissionFrame(unsigned short usDataPointNb, unsigned int uiIPAim) { unsigned int uiIPSource = 0; unsigned int usPortAim = 0; unsigned int usCommand = 0; int iPos = 0; memset(m_ucADCRetransmission, SndFrameBufInit, SndFrameSize); m_ucADCRetransmission[0] = FrameHeadCheck0; m_ucADCRetransmission[1] = FrameHeadCheck1; m_ucADCRetransmission[2] = FrameHeadCheck2; m_ucADCRetransmission[3] = FrameHeadCheck3; memset(&m_ucADCRetransmission[FrameHeadCheckSize], SndFrameBufInit, (FrameHeadSize - FrameHeadCheckSize)); // CString转换为const char* char pach[100]; CStringW strw; wstring wstr; strw = m_csIPSource; wstr = strw; string mstring = WideCharToMultiChar(wstr ); strcpy_s( pach, sizeof(pach), mstring.c_str() ); uiIPSource = inet_addr(pach); usPortAim = ADRecPort; usCommand = SendADCRetransmissionCmd; // 源IP地址 iPos = 16; memcpy(&m_ucADCRetransmission[iPos], &uiIPSource, FramePacketSize4B); iPos += FramePacketSize4B; // 目标IP地址 memcpy(&m_ucADCRetransmission[iPos], &uiIPAim, FramePacketSize4B); iPos += FramePacketSize4B; TRACE("ADC数据重发帧-仪器IP地址:%d\t ", uiIPAim); TRACE("指针偏移量为%d\r\n", usDataPointNb); // 目标端口号 memcpy(&m_ucADCRetransmission[iPos], &usPortAim, FramePacketSize2B); iPos += FramePacketSize2B; // 命令号 1-设置命令应答;2-查询命令应答;3-AD采样数据重发 memcpy(&m_ucADCRetransmission[iPos], &usCommand, FramePacketSize2B); iPos += FramePacketSize2B; iPos = 32; memcpy(&m_ucADCRetransmission[iPos], &usDataPointNb, FramePacketSize2B); iPos += FramePacketSize2B; m_ucADCRetransmission[iPos] = SndFrameBufInit; unsigned short usCRC16 = 0; usCRC16 = get_crc_16(&m_ucADCRetransmission[FrameHeadSize], SndFrameSize - FrameHeadSize - CRCCheckSize); memcpy(&m_ucADCRetransmission[SndFrameSize - CRCSize], &usCRC16, CRCSize); int icount = m_pADCDataSocket->SendTo(m_ucADCRetransmission, SndFrameSize, m_uiSendPort, IPBroadcastAddr); }
void CDlgModelManage::OnContextStop() { POSITION pos=m_listModelState.GetFirstSelectedItemPosition(); if(pos==NULL) { return; } int nId=(int)m_listModelState.GetNextSelectedItem(pos); //得到行号,通过POSITION转化 ////得到列中的内容(0表示第一列,同理1,2,3...表示第二,三,四...列) CString szModelName = m_listModelState.GetItemText(nId,0); string strModelName(WideCharToMultiChar(wstring(szModelName.GetBuffer()))); szModelName.ReleaseBuffer(); m_ProManager.Stop(strModelName); }