📄 dlglog.cpp
字号:
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 + -