www.pudn.com > RMS2000_C.rar > FindView.cpp
// FindView.cpp : implementation file
//
#include "stdafx.h"
#include "drawcli.h"
#include "FindView.h"
#include "FindDoc.h"
#include "mainfrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//打印CListCtrl begin
//该结构用于存储各列的信息
typedef struct tagColAtt
{
int nColIndex;
CString strColText;
int nPrintX;
int nSubItemIndex;
}COLATT;
BOOL 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;
//检索各列的信息,确定列标题的内容长度。
for(int i =0 ; i< nColCount; i++)
{
ca[i].nColIndex = ColOrderArray[i];
LVCOLUMN lvc;
char text[100];
lvc.mask = 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 = "查询数据打印";
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 nMaxLinePerPage)
{
//新的一页
EndPage(pd.hDC);
StartPage(pd.hDC);
nCurPage ++;
}
CString subitem = list.GetItemText(i, ca[j].nSubItemIndex);
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;
}
//打印CListCtrl end
/////////////////////////////////////////////////////////////////////////////
// CFindView
IMPLEMENT_DYNCREATE(CFindView, CListView)
CFindView::CFindView()
{
}
CFindView::~CFindView()
{
if (m_pImageList)
delete m_pImageList;
}
BEGIN_MESSAGE_MAP(CFindView, CListView)
//{{AFX_MSG_MAP(CFindView)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_WM_CHAR()
ON_COMMAND(ID_WINDOW_NEW, OnWindowNew)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFindView drawing
void CFindView::OnDraw(CDC* pDC)
{
CFindDoc* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CFindView diagnostics
#ifdef _DEBUG
void CFindView::AssertValid() const
{
CListView::AssertValid();
}
void CFindView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CFindDoc* CFindView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFindDoc)));
return (CFindDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFindView message handlers
int CFindView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// lpCreateStruct->style |= LVS_REPORT;
if (CListView::OnCreate(lpCreateStruct) == -1)
return -1;
GetDocument()->m_pListView = this;
return 0;
}
void CFindView::ShowDatabase()
{
CString t1=GetDocument()->m_szDate;
CString t2(" 数据查询");
GetDocument()->SetTitle(t1+t2);
EraseList();
// m_pImageList = new CImageList();
// m_pImageList->Create(IDB_IMAGEFIND, 16, 1, RGB(0,255,0));
GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LPARAM(dwExStyle));
int cols=2;
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 50;
for(int i = 0; i < cols; i++) // set up columns
{
char temp[20] ;
if (i==0) strcpy(temp,"RTU号");
if (i==1) strcpy(temp, "站名");
int len = strlen(temp);
lvColumn.iSubItem = i;
lvColumn.pszText = temp;
GetListCtrl().InsertColumn(i, &lvColumn);//insert column
}
CDrawApp* pApp=(CDrawApp*)AfxGetApp();
LV_ITEM lvi;
for(i = 0; i < pApp->m_QJCS.InstallSta; i++)
{
int rtu=pApp->m_QJCS.StaToRtu[i];
if (rtu==0) rtu=1;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvi.iItem = i;
lvi.iSubItem = 0;
char temp[20] ;
sprintf(temp,"%d",rtu);
lvi.pszText = temp;
lvi.iImage = IID_14;
lvi.stateMask = LVIS_STATEIMAGEMASK;
lvi.state = INDEXTOSTATEIMAGEMASK(1);
GetListCtrl().InsertItem(&lvi);
GetListCtrl().SetItemText(i,1,Stations[rtu-1]->RtuName);
}
}
void CFindView::ShowTableData(LPCTSTR strStaName)
{
CString t1=GetDocument()->m_szDate;
CString t2(strStaName);
GetDocument()->SetTitle(t1+" "+t2);
CDrawApp* pApp=(CDrawApp*)AfxGetApp();
CMainFrame* pMW=(CMainFrame*)AfxGetApp()->m_pMainWnd;
int rtu=ComputeRtuNo(strStaName);
if (rtu<1) return ;
char szDate[20];
char buf[20];
HOURDATA HourData;
EraseList();
// m_pImageList = new CImageList();
// m_pImageList->Create(IDB_IMAGEFIND, 16, 1, RGB(0,255,0));
GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LPARAM(dwExStyle));
int cols=5;
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_RIGHT; //LVCFMT_LEFT;
lvColumn.cx = 36;
// for(int i = 0; i < YC_NUM+4; i++) // set up columns
for(int i = 0; i < Stations[rtu-1]->ycNum+4; i++) // set up columns
{
char temp[20] ;
if (i==0) strcpy(temp,"月");
if (i==1) strcpy(temp, "日");
if (i==2) strcpy(temp, "时");
if (i==3) strcpy(temp, "分");
if ((i>=4) && (i<4+Stations[rtu-1]->ycNum))
{
lvColumn.cx = 62;
sprintf(temp,"%s",Stations[rtu-1]->ycName[i-4]);
}
if (i>=4+Stations[rtu-1]->ycNum)
{
lvColumn.cx = 70;
sprintf(temp,"%s%d","数值",i-3);
}
int len = strlen(temp);
lvColumn.iSubItem = i;
lvColumn.pszText = temp;
GetListCtrl().InsertColumn(i, &lvColumn);//insert column
}
if (pApp->m_QJCS.StoreLap>3) return;
if (pApp->m_QJCS.StoreLap<0) return;
int point=60/((pApp->m_QJCS.StoreLap+1)*15);
long count = 24*point;
LV_ITEM lvi;
for(i = 0; i < count; i++)
{
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvi.iItem = i;
lvi.iSubItem = 0;
char temp[20] ;
strcpy(temp,"");
lvi.pszText = temp;
lvi.iImage = IID_5;
lvi.stateMask = LVIS_STATEIMAGEMASK;
lvi.state = INDEXTOSTATEIMAGEMASK(1);
GetListCtrl().InsertItem(&lvi);
}
strcpy(szDate,GetDocument()->m_szDate);
int yy=(szDate[0]-'0')*1000+(szDate[1]-'0')*100+(szDate[2]-'0')*10+szDate[3]-'0';
int mm=(szDate[5]-'0')*10+szDate[6]-'0';
int dd=(szDate[8]-'0')*10+szDate[9]-'0';
for (int ii=0;ii<24;ii++)
{
for (int jj=0;jjm_QJCS.StoreLap+1)*15);
buf[0]=szDate[5];
buf[1]=szDate[6];
buf[2]=0x00;
GetListCtrl().SetItemText(ii*point+jj,0,buf);
buf[0]=szDate[8];
buf[1]=szDate[9];
buf[2]=0x00;
GetListCtrl().SetItemText(ii*point+jj,1,buf);
if (RMSWS==1)
{
if (pMW->ReadHourData("C",&HourData,rtu,yy,mm,dd,hh,ff))
{
for (i=0;iycNum;i++)
{
sprintf(buf,"%.2f",HourData.data.yc[i]);
GetListCtrl().SetItemText(ii*point+jj,i+4,buf);
}
}
}
else
{
if (pMW->ReadHourData("F",&HourData,rtu,yy,mm,dd,hh,ff))
{
for (i=0;iycNum;i++)
{
sprintf(buf,"%.2f",HourData.data.yc[i]);
GetListCtrl().SetItemText(ii*point+jj,i+4,buf);
}
}
}
sprintf(buf,"%d",ii);
GetListCtrl().SetItemText(ii*point+jj,2,buf);
sprintf(buf,"%d",ff);
GetListCtrl().SetItemText(ii*point+jj,3,buf);
}
}
}
void CFindView::ShowFieldData(LPCTSTR strFieldName,LPCTSTR strStaName)
{
/*
EraseList();
// m_pImageList = new CImageList();
// m_pImageList->Create(IDB_IMAGELIST, 16, 1, RGB(0,255,0));
GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LPARAM(dwExStyle));
int cols=5;
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 50;
for(int i = 0; i < 1+4; i++) // set up columns
{
char temp[20] ;
if (i==0) strcpy(temp,"月");
if (i==1) strcpy(temp, "日");
if (i==2) strcpy(temp, "时");
if (i==3) strcpy(temp, "分");
if (i>=4)
{
lvColumn.cx = 70;
strcpy(temp,strFieldName);
}
int len = strlen(temp);
lvColumn.iSubItem = i;
lvColumn.pszText = temp;
GetListCtrl().InsertColumn(i, &lvColumn);//insert column
}
long count = 24;
LV_ITEM lvi;
for(i = 0; i < count; i++)
{
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvi.iItem = i;
lvi.iSubItem = 0;
char temp[20] ;
//sprintf(temp,"%d",i+1);
strcpy(temp,"");
lvi.pszText = temp;
lvi.iImage = IID_4;
lvi.stateMask = LVIS_STATEIMAGEMASK;
lvi.state = INDEXTOSTATEIMAGEMASK(1);
GetListCtrl().InsertItem(&lvi);
}
int rtu=ComputeRtuNo(strStaName);
if (rtu<1) return;
int hour;
int ycNum=ComputeParamNo(rtu,strFieldName);
if (ycNum<0) return;
char szDate[20],szFile[50];
char buf[20];
BIDATA bData;
strcpy(szDate,GetDocument()->m_szDate);
CNetDataApp* pApp=(CNetDataApp*)AfxGetApp();
pApp->GetGloParam(&pApp->m_QJCS);
//ODBC
if (pApp->m_QJCS.ExistServer)
{
char buf[10];
buf[0]=szDate[0];
buf[1]=szDate[1];
buf[2]=szDate[2];
buf[3]=szDate[3];
buf[4]=0x00;
int year=atoi(buf);
buf[0]=szDate[5];
buf[1]=szDate[6];
buf[2]=0x00;
int month=atoi(buf);
buf[0]=szDate[8];
buf[1]=szDate[9];
buf[2]=0x00;
int day=atoi(buf);
char SelCmd[200];
sprintf(SelCmd,
"select * from data%04d where 月=%d and 日=%d and RTU号=%d and 参数='%s'",
year,month,day,rtu,strFieldName);
if( m_pRmsSQL->ExecuteSQL(SelCmd)==SQL_SUCCESS )
{
while( m_pRmsSQL->Fetch()==SQL_SUCCESS )
{
CString monbuf=m_pRmsSQL->GetCol(1);
CString daybuf=m_pRmsSQL->GetCol(2);
CString hourbuf=m_pRmsSQL->GetCol(3);
CString minutebuf=m_pRmsSQL->GetCol(4);
int idx=atoi(hourbuf);
GetListCtrl().SetItemText(idx,0,monbuf);
GetListCtrl().SetItemText(idx,1,daybuf);
GetListCtrl().SetItemText(idx,2,hourbuf);
GetListCtrl().SetItemText(idx,3,minutebuf);
CString databuf=m_pRmsSQL->GetCol(7);
GetListCtrl().SetItemText(idx,4,databuf);
}
}
}
//ODBC
else
{
NewFormFileName(rtu,szDate,szFile);
for (hour=0;hour<24;hour++)
{
buf[0]=szDate[5];
buf[1]=szDate[6];
buf[2]=0x00;
GetListCtrl().SetItemText(hour,0,buf);
buf[0]=szDate[8];
buf[1]=szDate[9];
buf[2]=0x00;
GetListCtrl().SetItemText(hour,1,buf);
if (NewReadBinary(szFile, szDate, hour, &bData))
sprintf(buf,"%9.2f",bData.value[ycNum]);
else strcpy(buf,"");
GetListCtrl().SetItemText(hour,4,buf);
sprintf(buf,"%d",hour);
GetListCtrl().SetItemText(hour,2,buf);
sprintf(buf,"%d",0);
GetListCtrl().SetItemText(hour,3,buf);
}
}
*/
}
void CFindView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
m_pImageList = new CImageList();
m_pImageList->Create(IDB_IMAGEFIND, 16, 1, RGB(0,255,0));
}
int CFindView::ComputeRtuNo(LPCTSTR strStaName)
{
CDrawApp* pApp=(CDrawApp*)AfxGetApp();
for(int i = 0; i < pApp->m_QJCS.InstallSta; i++)
{
if (pApp->m_QJCS.StaToRtu[i]>0)
{
int rtu=pApp->m_QJCS.StaToRtu[i];
if (strcmp(Stations[rtu-1]->RtuName,strStaName)==0)
return rtu;
}
}
return -1;
}
void CFindView::EraseList()
{
CListCtrl& ctlList = (CListCtrl&) GetListCtrl();
ctlList.DeleteAllItems();
while(ctlList.DeleteColumn(0));
UpdateWindow();
}
void CFindView::OnFilePrint()
{
CListCtrl& ctlList = (CListCtrl&) GetListCtrl();
PrintListCtrl(ctlList);
}
BOOL CFindView::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszName = WC_LISTVIEW;
cs.style |= LVS_SHOWSELALWAYS | LVS_REPORT;
return CListView::PreCreateWindow(cs);
}
void CFindView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if ((nChar == 113)||(nChar == 81))
{
CMainFrame* pFrame = (CMainFrame*) AfxGetMainWnd();
pFrame->EscapeFullScreen();
}
CListView::OnChar(nChar, nRepCnt, nFlags);
}
void CFindView::OnWindowNew()
{
// TODO: Add your command handler code here
}
void CFindView::OnFileSave()
{
// TODO: Add your command handler code here
}
void CFindView::OnFileSaveAs()
{
// TODO: Add your command handler code here
}