Ejemplo n.º 1
0
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);
}
Ejemplo n.º 3
0
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);
}