www.pudn.com > PressMonitor_q.zip > FaultView.cpp
// FaultView.cpp : implementation file
//
#include "stdafx.h"
#include "Monitor.h"
#include "FaultView.h"
#include "MonitorDoc.h"
#include "Hint.h"
#include "DBManageDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define NUMper 0.08
#define TYPEper 0.16
#define TIMEper 0.35
#define NOTEper 0.40
/////////////////////////////////////////////////////////////////////////////
// CFaultView
IMPLEMENT_DYNCREATE(CFaultView, CListView)
CFaultView::CFaultView()
{
m_nItemIndex=0;
}
CFaultView::~CFaultView()
{
if(m_pImageList!=NULL) delete m_pImageList;
}
BEGIN_MESSAGE_MAP(CFaultView, CListView)
//{{AFX_MSG_MAP(CFaultView)
ON_COMMAND(ID_DB_MANAGE, OnDbManage)
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
UINT CFaultView::m_ColumnLabelID [NUM_COLUMNS] =
{
IDS_TABLE_HEAD_NAME,
IDS_TABLE_HEAD_TIME,
IDS_TABLE_HEAD_NOTE,
};
int CFaultView::m_ColumnFormat [NUM_COLUMNS] =
{
LVCFMT_CENTER, LVCFMT_CENTER, LVCFMT_CENTER
// LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT
};
/////////////////////////////////////////////////////////////////////////////
// CFaultView drawing
void CFaultView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CFaultView diagnostics
#ifdef _DEBUG
void CFaultView::AssertValid() const
{
CListView::AssertValid();
}
void CFaultView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFaultView message handlers
void CFaultView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl &lc = GetListCtrl();
int Column;
LV_COLUMN LVColumn; // column info of one column in list control
CMonitorDoc *pDoc = (CMonitorDoc*) GetDocument();
pDoc->m_bUpdateView=false;
pDoc->m_bAddItemflag[0] = true;
pDoc->m_bAddItemflag[1] = true;
DWORD dwStyle = ListView_GetExtendedListViewStyle(GetListCtrl());
//Add the full row select and grid line style to the existing extended styles
dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_SUBITEMIMAGES |
LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
ListView_SetExtendedListViewStyle (GetListCtrl(),dwStyle);
lc.DeleteAllItems ();// regular cleanup
m_pImageList = new CImageList();
m_pImageList->Create(IDB_FAULT, 16, 1, RGB(0,0,0));
GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
//initialize the columns (insert columns)
m_ColumnWidth [COL_NAME ] = 150;
m_ColumnWidth [COL_TIME ] = 200;
m_ColumnWidth [COL_NOTE ] = 400;
// set header and format for all visible columns
LVColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
{
for (Column = 0; (Column < NUM_COLUMNS); Column++)
{
CString HeaderString;
// fill header data
HeaderString.LoadString (m_ColumnLabelID[Column]);
LVColumn.iSubItem = Column;
LVColumn.pszText = (LPTSTR) (LPCTSTR) HeaderString;
LVColumn.cx = m_ColumnWidth [Column];
LVColumn.fmt = m_ColumnFormat [Column];
lc.InsertColumn (Column, &LVColumn);
}
}
SetFocus ();
lc.SetItem(0, 0, LVIF_STATE, NULL, 0, LVIS_FOCUSED , LVIS_FOCUSED, 0);
// pDoc->UpdateAllViews(NULL,HINT_DB_OPENED);
//if(!pDoc->m_bDBOpen)
// pDoc->InitDB();
if (!pDoc->m_bDBOpen) {
pDoc->UpdateAllViews(NULL,HINT_DATA_RENEW);
return;
}
m_nRecordCount=pDoc->m_RecordSet.GetRecordCount();
if (m_nRecordCount>=1) {
pDoc->m_RecordSet.MoveLast();
pDoc->UpdateAllViews(NULL,HINT_DB_OPENED);
}
}
BOOL CFaultView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
cs.style |= LVS_REPORT |
LVS_SINGLESEL |
LVS_SHOWSELALWAYS |
LVS_ICON ;
return CListView::PreCreateWindow(cs);
}
void CFaultView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
/*
case HINT_NEW_RECORD:
TRACE("HINT_NEW_RECORD\n");
pRS->Open(dbOpenDynaset,pRS->GetDefaultSQL(),0);
pRS->MoveLast();
int ItemIndex = lc.InsertItem(LVIF_TEXT | LVIF_PARAM,0, pRS->m_Name, 0, 0, 0, 0);
int SubitemIndex = 1;
strTime.Format("%d年%d月%d日(%d:%d:%d)",(pRS->m_Time).GetYear(),
(pRS->m_Time).GetMonth(),(pRS->m_Time).GetDay(),
(pRS->m_Time).GetHour(),(pRS->m_Time).GetMinute(),
(pRS->m_Time).GetSecond());
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT,strTime, 0, 0, 0, 0);
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT, pRS->m_Notes, 0, 0, 0, 0);
m_nItemIndex++;
break;
}
delete pRS;
*/
CString strTime;
CListCtrl &lc= GetListCtrl();
CMonitorDoc *pDoc = (CMonitorDoc*) GetDocument();
COleVariant VariantSet;
COleDateTime dataTime;
CString str;
switch(lHint)
{
case HINT_DB_OPENED:
TRACE("HINT_DB_OPENED\n");
lc.DeleteAllItems();
if (pDoc->m_RecordSet.GetRecordCount()==0) {
return;
}
pDoc->m_RecordSet.MoveLast();
int displayNum;
if ( pDoc->m_RecordSet.GetRecordCount()<=1 ) { //数据库中只有一个固定的故障记录,则返回
return;
}
displayNum=pDoc->m_RecordSet.GetRecordCount()-1; //故障数据库中,总保留一个记录,防止删除错误!
// while (!pDoc->m_RecordSet.IsBOF()) //原先版本,数据库中没有保留一个数据记录!
int i;
for(i=0;im_RecordSet.GetFieldValue(1);
str.Format("%s",VariantSet.bstrVal);
int ItemIndex=lc.InsertItem(LVIF_TEXT|LVIF_PARAM,m_nItemIndex,str,0,0,0,0);
int SubitemIndex = 1;
VariantSet=pDoc->m_RecordSet.GetFieldValue(2);
dataTime=VariantSet.date;
strTime.Format("%d年%d月%d日(%d:%d:%d)",dataTime.GetYear(),dataTime.GetMonth(),
dataTime.GetDay(),dataTime.GetHour(),dataTime.GetMinute(),dataTime.GetSecond());
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT,strTime, 0, 0, 0, 0);
VariantSet=pDoc->m_RecordSet.GetFieldValue(3);
str.Format("%s",VariantSet.bstrVal);
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT, str, 0, 0, 0, 0);
pDoc->m_RecordSet.MovePrev();
m_nItemIndex++;
}
break;
case HINT_NEW_RECORD:
/* TRACE("HINT_NEW_RECORD\n");
pRS->Open(dbOpenDynaset,pRS->GetDefaultSQL(),0);
pRS->MoveLast();
int ItemIndex = lc.InsertItem(LVIF_TEXT | LVIF_PARAM,0, pRS->m_Name, 0, 0, 0, 0);
int SubitemIndex = 1;
strTime.Format("%d年%d月%d日(%d:%d:%d)",(pRS->m_Time).GetYear(),
(pRS->m_Time).GetMonth(),(pRS->m_Time).GetDay(),
(pRS->m_Time).GetHour(),(pRS->m_Time).GetMinute(),
(pRS->m_Time).GetSecond());
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT,strTime, 0, 0, 0, 0);
lc.SetItem (ItemIndex, SubitemIndex++, LVIF_TEXT, pRS->m_Notes, 0, 0, 0, 0);
m_nItemIndex++;
*/
break;
default:
break;
}
}
void CFaultView::OnDbManage()
{
/* CDBManageDlg dlg(this);
if(dlg.DoModal()==IDOK)
{
OnDBDeleteAll(dlg.m_dateTimePicker);
}
*/
// HWND hwnd=::GetActiveWindow();
CDBManageDlg DBdlg(this);
int flag=DBdlg.DoModal();
// TODO: Add your command handler code here
CMonitorDoc *pDoc=(CMonitorDoc *)GetDocument();
if(flag==IDOK)
{
if (!(pDoc->m_RecordSet.IsOpen())) {
AfxMessageBox("请先打开数据库");
return;
}
if (pDoc->m_RecordSet.GetRecordCount()!=0) {
pDoc->m_RecordSet.MoveLast();
}
else
return;
if( (pDoc->m_RecordSet.GetRecordCount())>1)
{
if (DBdlg.m_bDataCheck) //删除制定日期前的纪录
{
COleVariant VariantSet;
COleDateTime dataTime;
pDoc->m_RecordSet.MoveLast();
while (TRUE) {
VariantSet=pDoc->m_RecordSet.GetFieldValue(2);
dataTime=VariantSet.date;
if(dataTimem_RecordSet.Delete();
}
pDoc->m_RecordSet.MovePrev();
if (pDoc->m_RecordSet.GetRecordCount()<=1) {
break;
}
}
}
else if(DBdlg.m_bNumCheck)//删除指定个数的纪录
{
pDoc->m_RecordSet.MoveFirst();
pDoc->m_RecordSet.Move(1);
UINT i=DBdlg.m_nDeleteNum;
if (i<=0) {
return;
}
while ((!(pDoc->m_RecordSet.IsEOF()))&&(i!=0))
{
pDoc->m_RecordSet.Delete();
pDoc->m_RecordSet.MoveNext();
i--;
if (pDoc->m_RecordSet.IsEOF()) {
break;
}
}
}
pDoc->UpdateAllViews(NULL,HINT_DB_OPENED);
}
/* //旧版本,没有固定数据记录!
if((pDoc->m_RecordSet.GetRecordCount())!=0)
{
if (DBdlg.m_bDataCheck) //删除制定日期前的纪录
{
COleVariant VariantSet;
COleDateTime dataTime;
pDoc->m_RecordSet.MoveFirst();
while (!(pDoc->m_RecordSet.IsEOF()))
{
VariantSet=pDoc->m_RecordSet.GetFieldValue(2);
dataTime=VariantSet.date;
if(dataTimem_RecordSet.Delete();
}
pDoc->m_RecordSet.MoveNext();
}
}
else if(DBdlg.m_bNumCheck)//删除指定个数的纪录
{
pDoc->m_RecordSet.MoveFirst();
UINT i=DBdlg.m_nDeleteNum;
while ((!(pDoc->m_RecordSet.IsEOF()))&&(i!=0))
{
pDoc->m_RecordSet.Delete();
pDoc->m_RecordSet.MoveNext();
i--;
}
}
pDoc->UpdateAllViews(NULL,HINT_DB_OPENED);
}
*/
}//IDOK END
// m_preKeyStatus=-1;
// m_bDlgClock=FALSE;
// ::EnableWindow(hwnd,TRUE);
// ::SetFocus(hwnd);
}
void CFaultView::OnDBDeleteAll(COleDateTime time)
{
TRACE("------------OnDBDeleteAll---------------\n");
/* CMonitorDoc *pDoc = (CMonitorDoc*) GetDocument();
CDaoRecordsetAccess *pRS ;
pRS = new CDaoRecordsetAccess(pDoc->m_pDB);
try
{
pRS->Open(dbOpenDynaset,pRS->GetDefaultSQL(),0);
}
catch(CDaoException* e)
{
AfxMessageBox(e->m_pErrorInfo->m_strDescription);
e->Delete();
}
if(pRS)
{
if(pRS->GetRecordCount()!=0)
{
pRS->MoveFirst();
while (!pRS->IsEOF())
{
if(pRS->m_Time