⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlglog.cpp

📁 使用vc++技术实现光电机串口通信管理程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		lvc.iSubItem = 0;		
		lvc.pszText = "设备告\n警\\时间";
		m_ListWarn.InsertColumn(0,&lvc);		
//////////////////////////////////////////////////////////////////////////
	char Get[255];	
	CString strFindTime;
	CString strFindName;
		for(int q=iCntDev-1;q>=0;q--)
		{
			m_ListWarn.InsertItem(0,"ID|1E1|LOS");
			m_ListWarn.InsertItem(1,staDevID.GetAt(q)+"|   |AIS");
			m_ListWarn.InsertItem(2,"  |   |SYN");
			m_ListWarn.InsertItem(3,"  |   |D_N");
			m_ListWarn.InsertItem(4,"  |   |MSYN");
			m_ListWarn.InsertItem(5,"  |   |CRC_FL");
			m_ListWarn.InsertItem(6,"  |   |ER_CRC");
			m_ListWarn.InsertItem(7,"  |2E1|LOS");
			m_ListWarn.InsertItem(8,"  |   |AIS");
			m_ListWarn.InsertItem(9,"  |   |SYN");
			m_ListWarn.InsertItem(10,"  |   |D_N");
			m_ListWarn.InsertItem(11,"  |   |MSYN");
			m_ListWarn.InsertItem(12,"  |   |CRC_FL");
			m_ListWarn.InsertItem(13,"  |   |ER_CRC");
			m_ListWarn.InsertItem(14,"  |3E1|LOS");
			m_ListWarn.InsertItem(15,"  |   |AIS");
			m_ListWarn.InsertItem(16,"  |   |SYN");
			m_ListWarn.InsertItem(17,"  |   |D_N");
			m_ListWarn.InsertItem(18,"  |   |MSYN");
			m_ListWarn.InsertItem(19,"  |   |CRC_FL");
			m_ListWarn.InsertItem(20,"  |   |ER_CRC");
			m_ListWarn.InsertItem(21,"  |4E1|LOS");
			m_ListWarn.InsertItem(22,"  |   |AIS");
			m_ListWarn.InsertItem(23,"  |   |SYN");
			m_ListWarn.InsertItem(24,"  |   |D_N");
			m_ListWarn.InsertItem(25,"  |   |MSYN");
			m_ListWarn.InsertItem(26,"  |   |CRC_FL");
			m_ListWarn.InsertItem(27,"  |   |ER_CRC");
		}
		int iCol=1;
	for(int iTheMonth=1;iTheMonth<13;iTheMonth++)
	{
		for(int itoday=1;itoday<32;itoday++)
		{
			strFindTime.Format("%d-%d-%d",m_iYear,iTheMonth,itoday);
			strFindName=strProPath+"\\log\\"+strFindTime+".ini";
			CStdioFile stFile;
			CString strReadLine;
			CStringArray staSection;
			if(stFile.Open(strFindName,CFile::modeRead))
			{
				while(stFile.ReadString(strReadLine))
				{
					if(strReadLine.Find("[")!=-1 && strReadLine.Find("[default]")==-1)//不记default里的日志;
					{
						strReadLine.Replace("[","");
						strReadLine.Replace("]","");
						staSection.Add(strReadLine);
					}
				}
				stFile.Close();
			}
		for(int i=0;i<staSection.GetSize();i++)
		{
			LV_COLUMN lvc;	
			lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
			lvc.fmt = LVCFMT_CENTER;
			lvc.cx = 30;
			lvc.iSubItem = iCol;
			iCol++;
			CString strTemMD,strHM,strTemSec,strTem;
			strTemMD.Format("%d-%d",iTheMonth,itoday);
			strTemSec=staSection.GetAt(i);
			int ipos1=strTemSec.Find(":");
			int ipos2=strTemSec.Find(":",ipos1+1);
			strHM=strTemSec.Left(ipos2);
			strTem =strTemMD+"\n"+strHM;
			lvc.pszText = (char*)(LPCTSTR)strTem;		
			int m=m_ListWarn.InsertColumn(i+1,&lvc);
			for(int q=iCntDev-1;q>=0;q--)
			{
				char GetValueWarn[255];
				CString strWarn;	
				GetPrivateProfileString(staSection.GetAt(i),staDevID.GetAt(q),"",GetValueWarn,255,strFindName);
				strWarn=GetValueWarn;
				if(strWarn!="")
				{
					if(strWarn.GetLength()==11)
					{				
						CString strTempBin;
						XstrtoBin(strWarn,strTempBin);
						WarnSetListCtrl(strTempBin,q,i+1);					
					}				
				}	
				
			}	
					
		}
		}
	

	}
	m_NewHeaderFontYear.CreatePointFont(250,"MS Serif");
	
	CHeaderCtrl* pHeaderYear = NULL;
	pHeaderYear=m_ListWarn.GetHeaderCtrl();
	
	if(pHeaderYear==NULL)
		return ;
	if(m_HeaderCtrl.GetSafeHwnd()==NULL)
	VERIFY(m_HeaderCtrl.SubclassWindow(pHeaderYear->m_hWnd));	
	
	//A BIGGER FONT MAKES THE CONTROL BIGGER
	m_HeaderCtrl.SetFont(&m_NewHeaderFontYear);
	
	HDITEM hdItem;
	
	hdItem.mask = HDI_FORMAT;
	
	for(int  i=0; i<m_HeaderCtrl.GetItemCount(); i++)
	{
		m_HeaderCtrl.GetItem(i,&hdItem);
		
		hdItem.fmt|= HDF_OWNERDRAW;
		
		m_HeaderCtrl.SetItem(i,&hdItem);
	}
	m_NewHeaderFontYear.DeleteObject();

	
}

void CDlgLog::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	strOutput="";
		CString strTime;
			CString strDate;
			CString strAll;
	for(int i=0;i<m_ListWarn.GetItemCount();i++)
	{
		if(m_ListWarn.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//得到选中项的文本
		{
			
		
			strAll=m_ListWarn.GetItemText(i,0);
			int iPos=strAll.Find(" ");
			strDate=strAll.Left(iPos);
			strAll.Replace(strDate,"");
			strAll.Replace(" ","");
			strTime=strAll;
		}	
	}
	
	for(int iIdx=0;iIdx<iCntDev;iIdx++)
	{
		CString strDevID;
		CString strTemp;
		strDevID=staDevID.GetAt(iIdx);
		char charGetTemp[512];
		
/////////////////////取告警信息/////////////////////////////////////////////////////
		
		GetPrivateProfileString(strTime,strDevID,"",charGetTemp,512,strProPath+"log\\"+strDate+".ini");
		strTemp=charGetTemp;
		if(strTemp!="")
		{
			if(strTemp=="04 04 04 04")
			{
				strOutput+="设备"+strDevID+"无告警\n";
			}
			else
			{
				CString strTempBin;
				XstrtoBin(strTemp,strTempBin);
				WarnSet(strTempBin);
				strOutput+="设备"+strDevID+"有:"+strAlert+"\n";
			}
			
		}
	/*	else
		{
			strOutput+="设备"+strDevID+"告警无变化"+"\n";
		}*/
/////////////////////取上行交叉设置/////////////////////////////////////////////////////

		GetPrivateProfileString(strTime,strDevID+"上行交叉连接","",charGetTemp,512,strProPath+"log\\"+strDate+".ini");
		strTemp=charGetTemp;
		if(strTemp!="")
		{
			strOutput+="设备"+strDevID+"上行交叉连接设置"+strTemp+"\n";
		}
//		else
//		{
//			strOutput+="设备"+strDevID+"上行交叉连接设置"+strTemp+"\n";
//		}
/////////////////////取下行交叉设置/////////////////////////////////////////////////////

		GetPrivateProfileString(strTime,strDevID+"下行交叉连接","",charGetTemp,512,strProPath+"log\\"+strDate+".ini");
		strTemp=charGetTemp;
		if(strTemp!="")
		{
			strOutput+="设备"+strDevID+"下行交叉连接设置"+strTemp+"\n";
		}
//		else
//		{
//			strOutput+="设备"+strDevID+"上行交叉连接设置"+strTemp+"\n";
//		}
/////////////////////取环回设置/////////////////////////////////////////////////////

		GetPrivateProfileString(strTime,strDevID+"环回设置","",charGetTemp,512,strProPath+"log\\"+strDate+".ini");
		strTemp=charGetTemp;
	
		if(strTemp!="")
		{
		
			strOutput+="设备"+strDevID+"环回设置"+strTemp+"\n";
		}
/*		else
		{
			strOutput+="设备"+strDevID+"环回设置"+strTemp+"\n";
		}
		*/
/////////////////////取E1口模式设置/////////////////////////////////////////////////////

		GetPrivateProfileString(strTime,strDevID+"E1口模式设置","",charGetTemp,512,strProPath+"log\\"+strDate+".ini");
		strTemp=charGetTemp;
		if(strTemp!="")
		{
			strOutput+="设备"+strDevID+"E1口模式设置"+strTemp+"\n";
		}
/*		else
		{
			strOutput+="设备"+strDevID+"E1口模式设置"+strTemp+"\n";
		}
		*/
	}
	AfxMessageBox(strOutput);
	*pResult = 0;
}

void CDlgLog::WarnSet(CString strBinValue)
{
	strAlert="";
	CStringArray straWarning;
	straWarning.Add(strBinValue.Left(1));
	straWarning.Add(strBinValue.Mid(1,1));
	straWarning.Add(strBinValue.Mid(2,1));
	straWarning.Add(strBinValue.Mid(3,1));
	straWarning.Add(strBinValue.Mid(4,1));
	straWarning.Add(strBinValue.Mid(5,1));
	straWarning.Add(strBinValue.Mid(6,1));
	straWarning.Add(strBinValue.Mid(7,1));
	CString strMess;
	for(int i=0;i<8;i++)
	{
		strMess =straWarning.GetAt(i);
		if(strMess.Compare("1")==0)
		{
			switch(i) {
			case 0:
			
				strAlert+="LOS告警\t";
				break;
			case 1:
				strAlert+="AIS告警\t";
				break;
			case 2:
				strAlert+="SYN告警\t";
				break;
			case 3:
				strAlert+="D_N告警\t";
				break;
			case 4:
				strAlert+="MSYN告警\t";
				break;
			case 5:
			//	m_ListCtrl.SetItemText(iLine,8,"★");
				break;
			case 6:
				strAlert+="CRC_FL告警\t";
				break;
			case 7:
				strAlert+="ER_CRC告警\t";
				break;
			
			}
		}
	}
}

void CDlgLog::WarnSetListCtrl(CString strBinValue,int iline,int itree)
{
	CStringArray straWarning;
	straWarning.Add(strBinValue.Left(1));
	straWarning.Add(strBinValue.Mid(1,1));
	straWarning.Add(strBinValue.Mid(2,1));
	straWarning.Add(strBinValue.Mid(3,1));
	straWarning.Add(strBinValue.Mid(4,1));
//	straWarning.Add(strBinValue.Mid(5,1));
	straWarning.Add(strBinValue.Mid(6,1));
	straWarning.Add(strBinValue.Mid(7,1));
///////////////////////////第二路///////////////////////////////////////////////
	straWarning.Add(strBinValue.Mid(9,1));
	straWarning.Add(strBinValue.Mid(10,1));
	straWarning.Add(strBinValue.Mid(11,1));
	straWarning.Add(strBinValue.Mid(12,1));
	straWarning.Add(strBinValue.Mid(13,1));
	straWarning.Add(strBinValue.Mid(15,1));
	straWarning.Add(strBinValue.Mid(16,1));
//////////////////////////////第三路////////////////////////////////////////////
	straWarning.Add(strBinValue.Mid(18,1));
	straWarning.Add(strBinValue.Mid(19,1));
	straWarning.Add(strBinValue.Mid(20,1));
	straWarning.Add(strBinValue.Mid(21,1));
	straWarning.Add(strBinValue.Mid(22,1));
	straWarning.Add(strBinValue.Mid(24,1));
	straWarning.Add(strBinValue.Mid(25,1));
//////////////////////////////第四路////////////////////////////////////////////
	straWarning.Add(strBinValue.Mid(27,1));
	straWarning.Add(strBinValue.Mid(28,1));
	straWarning.Add(strBinValue.Mid(29,1));
	straWarning.Add(strBinValue.Mid(30,1));
	straWarning.Add(strBinValue.Mid(31,1));
	straWarning.Add(strBinValue.Mid(33,1));
	straWarning.Add(strBinValue.Mid(34,1));

	CString strMess;
	for(int i=0;i<4;i++)//第几路
	{
	//	CString strMess1,strMess2,strMess3,strMess4;
		for(int j=0;j<7;j++)
		{
			strMess =straWarning.GetAt(i*7+j);
			if(strMess=="1")
			{
				m_ListWarn.SetItemText(28*iline+i*7+j,itree,"﹟");
			}
		}
	}

}
void CDlgLog::XstrtoBin(CString str,CString &strBin)
{
	str.Replace("0","0000");
	str.Replace("1","0001");
	str.Replace("2","0010");
	str.Replace("3","0011");
	str.Replace("4","0100");
	str.Replace("5","0101");
	str.Replace("6","0110");
	str.Replace("7","0111");
	str.Replace("8","1000");
	str.Replace("9","1001");
	str.Replace("A","1010");
	str.Replace("B","1011");
	str.Replace("C","1100");
	str.Replace("D","1101");
	str.Replace("E","1110");
	str.Replace("F","1111");
	strBin=str;
}
  

BOOL  CDlgLog::PrintListCtrl(CListCtrl  &list)  
{  
	PRINTDLG  pd;  
	pd.lStructSize  =  sizeof(PRINTDLG);  
	pd.Flags  =  PD_RETURNDC;  
	pd.hDC  =  NULL;  
	pd.hwndOwner  =  NULL;  
	pd.hInstance  =  NULL;  
	pd.nMaxPage  =  1;  
	pd.nMinPage  =  1;  
	pd.nFromPage  =  1;  
	pd.nToPage  =  1;  
	pd.nCopies  =  1;  
	pd.hDevMode  =  NULL;  
	pd.hDevNames  =  NULL;  
	//显示打印对话框,由用户来设定纸张大小等。  
	if(!PrintDlg(&pd))  return  FALSE;  
	ASSERT(pd.hDC!=NULL);  
	int  nHorRes  =  GetDeviceCaps(pd.hDC,  HORZRES);  
	int  nVerRes  =  GetDeviceCaps(pd.hDC,  VERTRES);  
	int  nXMargin  =  2;  
	int  nYMargin  =  2;  
	TEXTMETRIC  tm;  
	GetTextMetrics(pd.hDC,  &tm);  
	int  nCharHeight  =  tm.tmHeight;  
	int  nCharWidth  =  tm.tmAveCharWidth;  
	CHeaderCtrl*  pHeader  =  list.GetHeaderCtrl();  
	
	//获得行,列的个数  
	int  nColCount  =  pHeader->GetItemCount();  
	int  nLineCount  =  list.GetItemCount();  
	int  ColOrderArray[100];  
	COLATT  ca[100];  
	list.GetColumnOrderArray(ColOrderArray,  nColCount);  
	int  nColX  =nXMargin*nCharWidth;  
	//检索各列的信息,确定列标题的内容长度。
	DWORD dwStyle =list.GetExtendedStyle();
	list.SetExtendedStyle(dwStyle|LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
	for(int  i  =0  ;  i<  nColCount;  i++)  
	{  
		ca[i].nColIndex  =  ColOrderArray[i];  
		LVCOLUMN  lvc;  
		char  text[100];  
		lvc.mask  = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT  |LVCF_SUBITEM;  
		lvc.pszText  =  text;  
		lvc.cchTextMax  =  100;  
		list.GetColumn(ca[i].nColIndex,  &lvc);  
		ca[i].strColText  =  lvc.pszText;  
		ca[i].nSubItemIndex  =  lvc.iSubItem;  
		ca[i].nPrintX  =  nColX;  
		nColX  +=  nCharWidth  *  strlen(ca[i].strColText);  
		if(nColX  >  nHorRes)  
		{  
		//	DeleteDC(pd.hDC);  
		//	AfxMessageBox("字段太多,无法在一行内打印,请试用较大的纸,或横向打印。");  
		//	return  FALSE;  
		}  
	}  
	DOCINFO  di;  
	di.cbSize  =  sizeof(DOCINFO);  
	di.lpszDocName  =  "ListCtrl  Data  Printing";  
	di.lpszOutput  =  (LPTSTR)  NULL;  
	di.lpszDatatype  =  (LPTSTR)  NULL;  
	di.fwType  =  0;  
	StartDoc(pd.hDC,  &di);  
	StartPage(pd.hDC);  
	//调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。  
/*	int  space  =  (nHorRes-nXMargin*nCharWidth-nColX)  /  (nColCount  -1);  
	for(i  =1;  i<nColCount;  i++)  
	{  
		ca[i].nPrintX  +=  i*space;  
	}  
*/	
	//输出列标题  
	for(i  =0;  i<nColCount;  i++)  
		TextOut(pd.hDC,  ca[i].nPrintX,  nYMargin,  
		ca[i].strColText,  strlen(ca[i].strColText));  
	int  nMaxLinePerPage  =  nVerRes/nCharHeight  -3;  
	int  nCurPage  =1;  
	//输出各列的数据  
	for(i  =0;  i<nLineCount;  i++)  
	{  
		for(int  j  =0;  j<nColCount;  j++)  
		{  
			if(i+1-(nCurPage-1)*nMaxLinePerPage  >  nMaxLinePerPage)  
			{  
				//新的一页  
				EndPage(pd.hDC);  
				StartPage(pd.hDC);  
				nCurPage  ++;  
			}  
			CString  subitem  =  list.GetItemText(i,  ca[j].nSubItemIndex);  
	/*		CString strchhl;
			strchhl.Format("行%d列%d:%s",i,j,subitem);
			AfxMessageBox(strchhl);
		*/
			TextOut(pd.hDC, ca[j].nPrintX,nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight,subitem,  strlen(subitem));  
		}  
	}  
	EndPage(pd.hDC);  
	EndDoc(pd.hDC);  
	//打印结束  
	DeleteDC(pd.hDC);  
	return  TRUE;  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -