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 
	 
}