// Dlg_Report.cpp : 实现文件 // #include "stdafx.h" #include "StoneuReport.h" #include "Dlg_Report.h" #include ".\dlg_report.h" #include "Dlg_ChangeReport.h" #include "excel9.h" #include "DateFun.h" #include "global.h" #include "SysLib.h" #include "MainFrm.h" #include "StoneuReportDoc.h" #include "StoneuReportView.h" #define WM_SAVEPIC ( WM_USER+60000 ) extern HANDLE g_hRunObject; // CDlg_Report 对话框 IMPLEMENT_DYNAMIC(CDlg_Report, CDialog) CDlg_Report::CDlg_Report(CWnd* pParent /*=NULL*/) : CDialog(CDlg_Report::IDD, pParent) { m_sReportTitle = "日报表"; m_sPrintDate = "打印日期:"; m_sChooseDate = "时间段:"; m_sCheckPeople = "复核人:"; m_sMakePeople = "制表人:"; m_sMakeUnit = "编制单位:"; m_sMakeUnitName = ""; m_sAddress = "地点:"; m_sAddressName = ""; m_sCheckPeopleName = ""; m_sMakePeopleName = ""; m_sPageShow = "0/0 页"; m_TitleBrush.CreateSolidBrush( RGB(189,184,238) ); m_PanelBrush.CreateSolidBrush( RGB(255,255,255) ); m_ContentBrush.CreateSolidBrush( RGB(204,255,255) ); m_WhileBrush.CreateSolidBrush( RGB(255,255,255) ); m_FontTitle.CreateFont(30,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"宋体"); m_FontDate.CreateFont(18,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"宋体"); m_nDateType = REPORT_DAY; m_nListOneRowHeight = 30; m_nListPageRowSize = 1; m_nMaxPage = 1; m_nCurPage = 1; m_nToPage = 0; m_nReportType = 0; } CDlg_Report::~CDlg_Report() { } void CDlg_Report::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_STA_REPORT, m_ReportFrame); DDX_Control(pDX, IDC_LIST_REPORT, m_List_Report); DDX_Control(pDX, IDC_STA_CHECKPEOPLENAME, m_Sta_CheckPeopleName); DDX_Control(pDX, IDC_STA_MAKEPEOPLENAME, m_Sta_MakePeopleName); DDX_Control(pDX, IDC_STA_REPORTTITLE, m_Sta_ReportTitle); DDX_Control(pDX, IDC_STA_MAKEUNIT, m_Sta_MakeUnit); DDX_Control(pDX, IDC_STA_ADDRESS, m_Sta_Address); DDX_Control(pDX, IDC_SCOPE, m_wndScope); } BEGIN_MESSAGE_MAP(CDlg_Report, CDialog) ON_WM_CTLCOLOR() ON_WM_ERASEBKGND() ON_WM_PAINT() ON_WM_LBUTTONDBLCLK() ON_WM_LBUTTONDOWN() ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting) ON_MESSAGE(WM_END_PRINTING,OnEndPrinting) ON_MESSAGE(WM_MY_PRINT,OnMyPrint) ON_WM_TIMER() END_MESSAGE_MAP() // CDlg_Report 消息处理程序 BOOL CDlg_Report::OnInitDialog() { CDialog::OnInitDialog(); //// TODO: 在此添加额外的初始化 //m_List_Report.SetHeaderBKColor(79,129,189,0);//(204,255,255,0); //设置头部背景色 ////m_List_Report.SetFontHW(50,0); //设置字体高度,和宽度,0表示缺省宽度 //m_List_Report.SetHeaderTextColor( RGB(255,255,255) ); ////m_List_Rule.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色 ////m_List_Rule.SetItemTextColor(3,1,RGB(255,0,0)); //设置单元格字体颜色 //int screenx=GetSystemMetrics(SM_CXSCREEN); //int screeny=GetSystemMetrics(SM_CYSCREEN); //int n=0; //m_List_Report.InsertColumn(n++,"编号",LVCFMT_CENTER,60); ////m_List_Report.InsertColumn(n++,"区域",LVCFMT_CENTER,110); //m_List_Report.InsertColumn(n++,"名称",LVCFMT_CENTER,130); //m_List_Report.InsertColumn(n++,"时间",LVCFMT_CENTER,130); //m_List_Report.InsertColumn(n++,"最小值",LVCFMT_CENTER,70 ); //m_List_Report.InsertColumn(n++,"最大值",LVCFMT_CENTER,70); //m_List_Report.InsertColumn(n++,"平均值",LVCFMT_CENTER,70); //m_List_Report.InsertColumn(n++,"报警次数",LVCFMT_CENTER,80); ////m_List_Report.InsertColumn(n++,"原因",LVCFMT_CENTER,340); ////m_List_Report.InsertColumn(n++,"处理",LVCFMT_CENTER,150); //m_List_Report.InsertColumn(n++,"备注",LVCFMT_CENTER,110); //m_List_Report.SetExtendedStyle(m_List_Report.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); ////m_List_Report.SetBkColor( RGB( 204,232,207 ) ); ////SetWindowLong(m_ctrlList.m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE); ////m_ctrlList.SetExtendedStyle(LVS_EX_GRIDLINES); //设置扩展风格为网格 ////::SendMessage(m_ctrlList.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); //m_List_Report.SetRowHeigt( m_nListOneRowHeight ); SYSTEMTIME st; GetLocalTime( &st ); CString s; s.Format( "%d-%02d-%02d",st.wYear,st.wMonth,st.wDay ); m_sPrintDate += s; CString sTemp; g_IniFile.GetVarStr( "report","ReportTitle",sTemp ); if( sTemp!="" ) m_sReportTitle = sTemp; g_IniFile.GetVarStr( "report","UnitName",sTemp ); if( sTemp=="" ) m_sMakeUnitName = "双击修改"; else m_sMakeUnitName = sTemp; g_IniFile.GetVarStr( "report","Address",sTemp ); if( sTemp=="" ) m_sAddressName = "双击修改"; else m_sAddressName = sTemp; g_IniFile.GetVarStr( "report","CheckPeople",sTemp ); if( sTemp=="" ) m_sCheckPeopleName = "双击修改"; else m_sCheckPeopleName = sTemp; g_IniFile.GetVarStr( "report","MakePeople",sTemp ); if( sTemp=="" ) m_sMakePeopleName = "双击修改"; else m_sMakePeopleName = sTemp; UpdateData( false ); //SetTimer( 1,1000,NULL ); //SetTimer( 2,1000,NULL ); m_hSavePic = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadSavePic,this,0,NULL); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } HBRUSH CDlg_Report::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; } BOOL CDlg_Report::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rect, rect2,rect3; this->GetWindowRect(&rect); ScreenToClient(&rect); pDC->FillRect(rect,&m_PanelBrush); m_ReportFrame.GetWindowRect( rect2 ); ScreenToClient(&rect2); pDC->FillRect(rect2,&m_ContentBrush); rect3.left = rect2.left; rect3.right = rect2.right; rect3.top = rect2.top; rect3.bottom = rect3.top+65; pDC->FillRect(rect3,&m_TitleBrush); return TRUE; //return CDialog::OnEraseBkgnd(pDC); } void CDlg_Report::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint()m_sPrintDate if( m_nReportType==0 ) { CRect rc; CRect rcFrame; m_ReportFrame.GetWindowRect( rcFrame ); ScreenToClient( &rcFrame ); CRect rcReportList; m_List_Report.GetWindowRect( rcReportList ); ScreenToClient( &rcReportList ); CFont *pFont; pFont = dc.SelectObject(&m_FontTitle); dc.SetTextAlign(TA_CENTER|TA_TOP); dc.SetBkMode(TRANSPARENT); dc.SetTextColor( RGB( 0,0,255 ) ); //报表标题 dc.TextOut( rcFrame.left+rcFrame.Width()/2,rcFrame.top+5,m_sReportTitle ); pFont = dc.SelectObject(&m_FontDate); dc.SetTextAlign(TA_LEFT|TA_BOTTOM); //打印时间 dc.TextOut( rcFrame.left+5,rcReportList.top-28,m_sPrintDate ); //时间段 dc.TextOut( rcFrame.left+5+19,rcReportList.top-5,m_sChooseDate ); //制表单位 dc.SetTextAlign(TA_LEFT|TA_BOTTOM); dc.TextOut( rcFrame.left+rcFrame.Width()/2+100,rcReportList.top-28,m_sMakeUnit ); m_Sta_MakeUnit.GetWindowRect( rc ); ScreenToClient( &rc ); dc.SetTextAlign(TA_LEFT|TA_TOP); dc.TextOut( rc.left,rc.top,m_sMakeUnitName ); //地点 dc.SetTextAlign(TA_LEFT|TA_BOTTOM); dc.TextOut( rcFrame.left+rcFrame.Width()/2+100+38,rcReportList.top-5,m_sAddress ); m_Sta_Address.GetWindowRect( rc ); ScreenToClient( &rc ); dc.SetTextAlign(TA_LEFT|TA_TOP); dc.TextOut( rc.left,rc.top,m_sAddressName ); dc.SetTextAlign(TA_LEFT|TA_TOP); //复核人 dc.TextOut( rcFrame.left+5,rcReportList.bottom+5,m_sCheckPeople ); m_Sta_CheckPeopleName.GetWindowRect( rc ); ScreenToClient( &rc ); dc.TextOut( rc.left,rc.top,m_sCheckPeopleName ); //制表人 dc.TextOut( rcFrame.left+rcFrame.Width()/2+100,rcReportList.bottom+5,m_sMakePeople ); m_Sta_MakePeopleName.GetWindowRect( rc ); ScreenToClient( &rc ); dc.TextOut( rc.left,rc.top,m_sMakePeopleName ); if( m_nCurPage+1>m_nMaxPage ) m_nCurPage--; m_sPageShow.Format( "%d/%d 页",m_nCurPage+1,m_nMaxPage ); dc.TextOut( rcFrame.left+rcFrame.Width()-100,rcReportList.bottom+5,m_sPageShow ); dc.SelectObject(pFont); } } void CDlg_Report::GetListRowHeightAndPageRowSize( int iListHeight,int &iListRowHeight,int &iListPageRowSize ) { iListHeight -= 1; int nRowHeight1=30,nRowHeight2=29,nRowHeight3=28,nRowHeight4=27,nRowHeight5=26,nRowHeight6=25,nRowHeight7=24; int n1,n2,n3,n4,n5,n6,n7; n1 = iListHeight % nRowHeight1; n2 = iListHeight % nRowHeight2; n3 = iListHeight % nRowHeight3; n4 = iListHeight % nRowHeight4; n5 = iListHeight % nRowHeight5; n6 = iListHeight % nRowHeight6; n7 = iListHeight % nRowHeight7; int nMin = n1; if( nMin>n2 ) nMin = n2; if( nMin>n3 ) nMin = n3; if( nMin>n4 ) nMin = n4; if( nMin>n5 ) nMin = n5; if( nMin>n6 ) nMin = n6; if( nMin>n7 ) nMin = n7; if( nMin==n1 ) { iListRowHeight = nRowHeight1; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n2 ) { iListRowHeight = nRowHeight2; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n3 ) { iListRowHeight = nRowHeight3; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n4 ) { iListRowHeight = nRowHeight4; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n5 ) { iListRowHeight = nRowHeight5; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n6 ) { iListRowHeight = nRowHeight6; iListPageRowSize = iListHeight / iListRowHeight; } else if( nMin==n7 ) { iListRowHeight = nRowHeight7; iListPageRowSize = iListHeight / iListRowHeight; } } void CDlg_Report::SetPos( CRect rect ) { CRect rc1; rc1.left = 0; rc1.right = rc1.left+rect.Width(); rc1.top = 0; rc1.bottom = rc1.top+rect.Height()-4; this->MoveWindow( rc1 ); CRect rcReportFrame; rcReportFrame.left = rc1.left+0; rcReportFrame.right = rc1.right-0; rcReportFrame.top = rc1.top+0; rcReportFrame.bottom = rc1.bottom-0; m_ReportFrame.MoveWindow( rcReportFrame ); m_wndScope.MoveWindow( rcReportFrame ); CRect rcReportTitle; rcReportTitle.left = rcReportFrame.left+rcReportFrame.Width()/2 - 100; rcReportTitle.right = rcReportTitle.left+200; rcReportTitle.top = rcReportFrame.top+5; rcReportTitle.bottom = rcReportTitle.top+25; m_Sta_ReportTitle.MoveWindow( rcReportTitle ); int bottom = rcReportFrame.bottom-35; int top = rcReportFrame.top+120; int H = bottom - top - 23; GetListRowHeightAndPageRowSize( H,m_nListOneRowHeight,m_nListPageRowSize); //m_nListPageRowSize = H/m_nListOneRowHeight; //if( H%m_nListOneRowHeight + 5>=m_nListOneRowHeight ) //{ // m_nListPageRowSize++; // m_nListOneRowHeight--; //} //bottom -= H%m_nListOneRowHeight; CRect rcReportList; rcReportList.left = rcReportFrame.left+0; rcReportList.right = rcReportFrame.right-0; rcReportList.top = top; rcReportList.bottom = bottom; m_List_Report.MoveWindow( rcReportList ); CRect rcStaCheckPeople; rcStaCheckPeople.left = rcReportFrame.left+80; rcStaCheckPeople.right = rcStaCheckPeople.left+100; rcStaCheckPeople.top = rcReportList.bottom+3; rcStaCheckPeople.bottom = rcStaCheckPeople.top+20; m_Sta_CheckPeopleName.MoveWindow( rcStaCheckPeople ); CRect rcStaMakePeople; rcStaMakePeople.left = rcReportFrame.left+rcReportFrame.Width()/2+100+80; rcStaMakePeople.right = rcStaMakePeople.left+100; rcStaMakePeople.top = rcReportList.bottom+3; rcStaMakePeople.bottom = rcStaMakePeople.top+20; m_Sta_MakePeopleName.MoveWindow( rcStaMakePeople ); CRect rcMakeUnit; rcMakeUnit.left = rcReportFrame.left+rcReportFrame.Width()/2+100+100; rcMakeUnit.right = rcMakeUnit.left+200; rcMakeUnit.top = rcReportList.top-48; rcMakeUnit.bottom = rcMakeUnit.top+25; m_Sta_MakeUnit.MoveWindow( rcMakeUnit ); CRect rcAddress; rcAddress.left = rcReportFrame.left+rcReportFrame.Width()/2+100+100; rcAddress.right = rcAddress.left+200; rcAddress.top = rcReportList.top-22; rcAddress.bottom = rcAddress.top+25; m_Sta_Address.MoveWindow( rcAddress ); ////////////////////////////////////////////////////////////////////////////////////////////// // TODO: 在此添加额外的初始化 m_List_Report.SetHeaderBKColor(79,129,189,0);//(204,255,255,0); //设置头部背景色 //m_List_Report.SetFontHW(50,0); //设置字体高度,和宽度,0表示缺省宽度 m_List_Report.SetHeaderTextColor( RGB(255,255,255) ); //m_List_Rule.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色 //m_List_Rule.SetItemTextColor(3,1,RGB(255,0,0)); //设置单元格字体颜色 int W = (rcReportList.Width()-6)/8; int nMod = rcReportList.Width()%8; int n=0; m_List_Report.InsertColumn(n++,"编号",LVCFMT_CENTER,W-30); //m_List_Report.InsertColumn(n++,"区域",LVCFMT_CENTER,110); m_List_Report.InsertColumn(n++,"名称",LVCFMT_RIGHT,W+30); m_List_Report.InsertColumn(n++,"时间",LVCFMT_CENTER,W); m_List_Report.InsertColumn(n++,"最小值",LVCFMT_CENTER,W ); m_List_Report.InsertColumn(n++,"最大值",LVCFMT_CENTER,W); m_List_Report.InsertColumn(n++,"平均值",LVCFMT_CENTER,W); m_List_Report.InsertColumn(n++,"报警次数",LVCFMT_CENTER,W); //m_List_Report.InsertColumn(n++,"原因",LVCFMT_CENTER,340); //m_List_Report.InsertColumn(n++,"处理",LVCFMT_CENTER,150); m_List_Report.InsertColumn(n++,"备注",LVCFMT_CENTER,W+nMod); m_List_Report.SetExtendedStyle(m_List_Report.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); //m_List_Report.SetBkColor( RGB( 204,232,207 ) ); //SetWindowLong(m_ctrlList.m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE); //m_ctrlList.SetExtendedStyle(LVS_EX_GRIDLINES); //设置扩展风格为网格 //::SendMessage(m_ctrlList.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); m_List_Report.SetRowHeigt( m_nListOneRowHeight ); ////////////////////////////////////////////////////////////////////////////////////////////////// } void CDlg_Report::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 SetListRowNoChoose(); CDialog::OnLButtonDown(nFlags, point); } void CDlg_Report::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rect[10]; m_Sta_ReportTitle.GetWindowRect( rect[0] ); ScreenToClient( &rect[0] ); m_Sta_CheckPeopleName.GetWindowRect( rect[1] ); ScreenToClient( &rect[1] ); m_Sta_MakePeopleName.GetWindowRect( rect[2] ); ScreenToClient( &rect[2] ); m_Sta_MakeUnit.GetWindowRect( rect[3] ); ScreenToClient( &rect[3] ); m_Sta_Address.GetWindowRect( rect[4] ); ScreenToClient( &rect[4] ); int nIndex = -1; for( int i=0;i<10;i++ ) { if( rect[i].PtInRect( point ) ) { nIndex = i; break; } } if( nIndex!=-1 ) { CDlg_ChangeReport dlg; switch( nIndex ) { case 0: dlg.m_sEdit_Content = m_sReportTitle; break; case 1: dlg.m_sEdit_Content = m_sCheckPeopleName; break; case 2: dlg.m_sEdit_Content = m_sMakePeopleName; break; case 3: dlg.m_sEdit_Content = m_sMakeUnitName; break; case 4: dlg.m_sEdit_Content = m_sAddressName; break; } if( dlg.DoModal()==IDOK ) { switch( nIndex ) { case 0: { m_sReportTitle = dlg.m_sEdit_Content; g_IniFile.SetVarStr( "report","ReportTitle",m_sReportTitle ); break; } case 1: { m_sCheckPeopleName = dlg.m_sEdit_Content; g_IniFile.SetVarStr( "report","CheckPeople",m_sCheckPeopleName ); break; } case 2: { m_sMakePeopleName = dlg.m_sEdit_Content; g_IniFile.SetVarStr( "report","MakePeople",m_sMakePeopleName ); break; } case 3: { m_sMakeUnitName = dlg.m_sEdit_Content; g_IniFile.SetVarStr( "report","UnitName",m_sMakeUnitName ); break; } case 4: { m_sAddressName = dlg.m_sEdit_Content; g_IniFile.SetVarStr( "report","Address",m_sAddressName ); break; } } Invalidate( ); } } CDialog::OnLButtonDblClk(nFlags, point); } void CDlg_Report::InsertToList( CString sVarName,CString sTime,CString sMinValue,CString sMaxValue,CString sAverageValue, CString sAlarmTimes,CString sCause,CString sDealWith,CString sRemarks,bool bColor ) { CString sIndex; int nSize = m_List_Report.GetItemCount(); sIndex.Format( "%d",nSize+m_nCurPage*m_nListPageRowSize+1 ); m_List_Report.InsertItem(nSize, sIndex); m_List_Report.SetItemText(nSize, 1, sVarName ); m_List_Report.SetItemText(nSize, 2, sTime); m_List_Report.SetItemText(nSize, 3, sMinValue); m_List_Report.SetItemText(nSize, 4, sMaxValue); m_List_Report.SetItemText(nSize, 5, sAverageValue ); m_List_Report.SetItemText(nSize, 6, sAlarmTimes ); m_List_Report.SetItemText(nSize, 7, sCause ); m_List_Report.SetItemText(nSize, 8, sDealWith ); m_List_Report.SetItemText(nSize, 9, sRemarks ); COLORREF color1 = RGB(219,229,239);//RGB(181,202,227); COLORREF color2 = RGB(230,249,249); if( nSize%2==1 )//if( bColor )// { m_List_Report.SetItemColor( 0,nSize,color1 ); m_List_Report.SetItemColor( 1,nSize,color1 ); m_List_Report.SetItemColor( 2,nSize,color1 ); m_List_Report.SetItemColor( 3,nSize,color1 ); m_List_Report.SetItemColor( 4,nSize,color1 ); m_List_Report.SetItemColor( 5,nSize,color1 ); m_List_Report.SetItemColor( 6,nSize,color1 ); m_List_Report.SetItemColor( 7,nSize,color1 ); m_List_Report.SetItemColor( 8,nSize,color1 ); m_List_Report.SetItemColor( 9,nSize,color1 ); //m_List_Report.SetItemTextColor( 0,nSize,RGB(255,255,255) ); //m_List_Report.SetItemTextColor( 1,nSize,RGB(255,255,255) ); //m_List_Report.SetItemTextColor( 2,nSize,RGB(255,255,255) ); //m_List_Report.SetItemTextColor( 3,nSize,RGB(255,255,255) ); //m_List_Report.SetItemTextColor( 4,nSize,RGB(255,255,255) ); //m_List_Report.SetItemTextColor( 5,nSize,RGB(255,255,255) ); } else { m_List_Report.SetItemColor( 0,nSize,color2 ); m_List_Report.SetItemColor( 1,nSize,color2 ); m_List_Report.SetItemColor( 2,nSize,color2 ); m_List_Report.SetItemColor( 3,nSize,color2 ); m_List_Report.SetItemColor( 4,nSize,color2 ); m_List_Report.SetItemColor( 5,nSize,color2 ); m_List_Report.SetItemColor( 6,nSize,color2 ); m_List_Report.SetItemColor( 7,nSize,color2 ); m_List_Report.SetItemColor( 8,nSize,color2 ); m_List_Report.SetItemColor( 9,nSize,color2 ); } } void CDlg_Report::InsertDataToReport() { if( g_OperateFlag.bReportOperate ) return; g_OperateFlag.bReportOperate = true; for( int i=0;iGetMainWnd(); CStoneuReportView* pView = (CStoneuReportView*)(pFrame->GetActiveView()); if( !pView->GetCtrlTime( strStartDate,strEndDate ) ) return; m_nDateType = pView->m_pDlg_DateFilt->m_nDateType; GetReportTitle(); m_wndScope.Clear(); m_wndScope.m_nDateUnit = pView->m_pDlg_DateFilt->m_nDateType; m_wndScope.SetStartEndTime( strStartDate,strEndDate ); int nMinValue=1000,nMaxValue=0; int nYear1,nMonth1,nDay1; int nYear2,nMonth2,nDay2; int nH,nM,nS; sscanf(strStartDate,"%d-%d-%d %d:%d:%d",&nYear1,&nMonth1,&nDay1,&nH,&nM,&nS); sscanf(strEndDate,"%d-%d-%d %d:%d:%d",&nYear2,&nMonth2,&nDay2,&nH,&nM,&nS); m_sChooseDate.Format( "时间段:%d-%02d-%02d 至 %d-%02d-%02d",nYear1,nMonth1,nDay1,nYear2,nMonth2,nDay2 ); int nSize = pView->m_VarInfoList.size(); std::list::iterator value_it = pView->m_VarInfoList.begin(); for( int m=0;m=VAR_MAX_SIZE ) continue; m_ValueList[nIndex].push_back(tmp); m_nVarNumber = m_nVarNumber::iterator value_it = m_ValueList[i].begin(); for( int m=0;m=nTimeS && nTimeN<=nTimeE ) { nCount++; dValueSum += dValue;//和 dMinValue = dMinValuedValue ? dMaxValue : dValue;//最大值 } else if( nCount>1 ) { sVarName = sVarDesc; sMinValue.Format( "%.1f",dMinValue ); sMaxValue.Format( "%.1f",dMaxValue ); sAverageValue.Format( "%.1f",dValueSum/nCount ); //sAlarmTimes.Format( "%d",nCount );//测试 //InsertToList( sVarName,sTimeInsert,sMinValue,sMaxValue,sAverageValue,sAlarmTimes,sCause,sDealWith,sRemarks,bColor ); INDEX++; LIST_ITEM tag; tag.sID.Format( "%d",INDEX ); tag.sVarDesc = sVarName; tag.sTime = sTimeInsert; tag.sValueMin = sMinValue; tag.sValueMax = sMaxValue; tag.sValueAverage = sAverageValue; tag.sAlarmTimes = sAlarmTimes; tag.sCause = sCause; tag.sDealWith = sDealWith; tag.sRemarks = sRemarks; m_ListItem.push_back(tag); ///////////////////////////////////////////////////////////////////////////////// m_wndScope.AddValue( sDevName,sVarDesc,g_DateCentreTime( m_nDateType,sTimeOld ),atof(sAverageValue) ); dMinValueCurve = dMinValueCurve>atoi(sAverageValue) ? atoi(sAverageValue) : dMinValueCurve; dMaxValueCurve = dMaxValueCurve1 ) { sVarName = sVarDesc; sMinValue.Format( "%.1f",dMinValue ); sMaxValue.Format( "%.1f",dMaxValue ); sAverageValue.Format( "%.1f",dValueSum/nCount ); //sAlarmTimes.Format( "%d",nCount );//测试 //InsertToList( sVarName,sTimeInsert,sMinValue,sMaxValue,sAverageValue,sAlarmTimes,sCause,sDealWith,sRemarks,bColor ); INDEX++; LIST_ITEM tag; tag.sID.Format( "%d",INDEX ); tag.sVarDesc = sVarName; tag.sTime = sTimeInsert; tag.sValueMin = sMinValue; tag.sValueMax = sMaxValue; tag.sValueAverage = sAverageValue; tag.sAlarmTimes = sAlarmTimes; tag.sCause = sCause; tag.sDealWith = sDealWith; tag.sRemarks = sRemarks; m_ListItem.push_back(tag); ///////////////////////////////////////////////////////////////////////////////// m_wndScope.AddValue( sDevName,sVarDesc,g_DateCentreTime( m_nDateType,sTimeOld ),atof(sAverageValue) ); dMinValueCurve = dMinValueCurve>atoi(sAverageValue) ? atoi(sAverageValue) : dMinValueCurve; dMaxValueCurve = dMaxValueCurvem_pDlg_Schedule->m_nShowType = 0; pView->m_pDlg_Schedule->ShowWindow( SW_HIDE ); //m_List_Report.SetColumnWidth( 1,LVSCW_AUTOSIZE ); return ; } int CDlg_Report::GetVarIndex( CString sVarDesc ) { int nRet=0; for( int i=0;i::iterator value_it = m_ValueList[i].begin(); if( (*value_it).sVarDesc==sVarDesc ) { nRet = i; break; } } return nRet; } void CDlg_Report::GetReportTitle() { switch( m_nDateType ) { case REPORT_DAY: m_sReportTitle = "日报表"; break; case REPORT_WEEK: m_sReportTitle = "周报表"; break; case REPORT_MONTH: m_sReportTitle = "月报表"; break; case REPORT_YEAR: m_sReportTitle = "年报表"; break; } } void CDlg_Report::SetListRowNoChoose() { m_List_Report.SetItemState( -1,0,LVIS_SELECTED|LVIS_FOCUSED ); } void CDlg_Report::SavePic( ) { SetListRowNoChoose(); DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; LPSTR lpszFilter = "JPG Files (*.jpg)|*.jpg||"; CString sFilePath,sFileName; CFileDialog dlg(FALSE,NULL,m_sReportTitle,dwFlags,lpszFilter); //dlg.m_pOFN->nFilterIndex = INDEX; if(dlg.DoModal()==IDOK) { sFilePath = dlg.GetPathName(); sFileName = dlg.GetFileName(); if( sFilePath.Right(4)!=".jpg" ) { sFilePath += ".jpg"; sFileName += ".jpg"; } } else return; Sleep( 500 ); m_sFileSavePath = sFilePath; m_sFileSaveName = sFileName; //SendMessage( WM_SAVEPIC,*(LPARAM*)&sFilePath,0 ); //SavePic( rect ); } // 将当前屏幕保存成为jpg图片 // 参数 xs = 图象x岽笮? ys = 图象y轴大小, quality = jpeg图象质量 void CDlg_Report::SaveJpg(LPCWSTR pszFileName, int iX,int iY, int iW, int iH, int quality) { //HWND hwnd = ::GetDesktopWindow(); //HDC hdc = GetWindowDC(NULL); /* int x = GetDeviceCaps(hdc, HORZRES); int y = GetDeviceCaps(hdc, VERTRES); */ //Invalidate(); HDC hdc = ::GetDC( this->GetSafeHwnd() ); HBITMAP hbmp = ::CreateCompatibleBitmap(hdc, iW, iH), hold; HDC hmemdc = ::CreateCompatibleDC(hdc); hold = (HBITMAP)::SelectObject(hmemdc, hbmp); BitBlt(hmemdc, 0, 0, iW, iH, hdc, iX, iY, SRCCOPY); SelectObject(hmemdc, hold); Bitmap bit(iW, iH), bit2(hbmp, NULL); Graphics g(&bit); g.ScaleTransform( 1,1 );//(float)xs/x, (float)ys/y); g.DrawImage(&bit2, 0, 0); CLSID encoderClsid; EncoderParameters encoderParameters; encoderParameters.Count = 1; encoderParameters.Parameter[0].Guid = EncoderQuality; encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; encoderParameters.Parameter[0].Value = &quality; GetEncoderClsid(L"image/jpeg", &encoderClsid); bit.Save(pszFileName, &encoderClsid, &encoderParameters); DeleteObject( hdc ); ::DeleteObject(hbmp); ::DeleteObject(hmemdc); return; } int CDlg_Report::GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } free(pImageCodecInfo); return -1; // Failure } void CDlg_Report::Print( ) { if( m_nReportType==0 ) { PrintList(); } else { CRect rect; m_ReportFrame.GetWindowRect( rect ); ScreenToClient( &rect ); PrintCurve( rect ); } } void CDlg_Report::PrintList( ) { SetListRowNoChoose(); CRect rect; m_ReportFrame.GetWindowRect( rect ); ScreenToClient( &rect ); //PrintPic( rect ); CPrintFrame *pFrame = new CPrintFrame; pFrame->m_pCallerDlg = this; pFrame->Create(NULL,"Curvefdfd Print",WS_POPUP,CRect(0,0,100,100)); //pFrame->ShowWindow( SW_HIDE ); //pFrame->MoveWindow( CRect(-100,-100,100,20) );//WS_OVERLAPPEDWINDOW pFrame->m_pView->OnMyPrint(); } void CDlg_Report::PrintCurve( CRect Rect ) { CPrintDialog dlg(FALSE, PD_NOPAGENUMS|PD_NOSELECTION, this); CPaintDC pDC(this); int m_nClientWidth = Rect.Width();// int m_nClientHeight = Rect.Height()-6;// CDC memDC ; CBitmap memBitmap ; CBitmap* oldBitmap ; // bitmap originally found in CMemDC BITMAP bm; memDC.CreateCompatibleDC(&pDC) ; memBitmap.CreateCompatibleBitmap(&pDC, m_nClientWidth, m_nClientHeight) ; oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ; memBitmap.GetObject(sizeof(bm),&bm); memDC.StretchBlt(0, 0, m_nClientWidth+30, m_nClientHeight, &pDC, Rect.left, Rect.top, m_nClientWidth+30, m_nClientHeight, SRCCOPY); if (dlg.DoModal() == IDOK) { CDC dc; dc.Attach(dlg.GetPrinterDC());//把打印设备环境附加到DC对象 DEVMODE* dm = dlg.GetDevMode(); // 提取缺省打印机的DEVMODE数据 dm->dmOrientation = DMORIENT_LANDSCAPE; // 重新修改纸张的打印方向(横向打印) //dm-> dmOrientation = DMORIENT_PORTRAIT; // 重新修改纸张的打印方向(纵向打印) dc.ResetDC(dm); //int xPrintDPI = GetDeviceCaps(dc,LOGPIXELSX);//屏幕DPI(沿屏幕宽度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同) //int yPrintDPI = GetDeviceCaps(dc,LOGPIXELSY);//屏幕DPI(沿屏幕高度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同) //int xPrintWidth = GetDeviceCaps(dc,HORZSIZE);//物理屏幕的宽度(毫米) //int yPrintHight = GetDeviceCaps(dc,VERTSIZE);//物理屏幕的高度(毫米) int xPrint = GetDeviceCaps(dc,HORZRES);//屏幕宽(像素) int yPrint = GetDeviceCaps(dc,VERTRES);//屏幕高(像素) DOCINFO di; di.cbSize = sizeof(DOCINFO); di.lpszDocName = "SimplePrintDoc"; di.lpszOutput = NULL; di.lpszDatatype = NULL; di.fwType = 0; dc.StartDoc(&di); //通知打印机驱动程序执行一新的打印任务 dc.StartPage();//通知打印机驱动程序打印新页 dc.SetMapMode(MM_TEXT);//设置当前影射模式为:单位0.001英寸,X方向向右增加,Y方向向上增加 //CRect rectPrint(0, 0, // dc.GetDeviceCaps(HORZRES),//返回设备的.以毫米为单位的物理显示宽度 // dc.GetDeviceCaps(VERTRES));//返回设备的.以毫米为单位的物理显示高度 dc.DPtoLP(&Rect);//设备物理单位转化为逻辑单位 //dc.SetWindowOrg(-rect.left, -rect.top);//设置原点 int spaceWidth = (xPrint%m_nClientWidth)/2; int spacehight = (yPrint%m_nClientHeight)/2; //dc.SetWindowOrg(-spaceWidth, -spacehight);//设置原点 dc.SetWindowOrg(-spaceWidth-500, -spacehight-300);//设置原点 if (memDC.GetSafeHdc() != NULL) { //memDC.BitBlt(0, 0, m_nClientWidth+30, m_nClientHeight,&pDC, -3, -30, SRCCOPY); //通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并 //dc.BitBlt(0,0,m_nClientWidth, m_nClientHeight,&memDC, 0, 0, SRCCOPY); dc.StretchBlt(0,0,(m_nClientWidth+30)*((xPrint)/(m_nClientWidth+30)), m_nClientHeight*((xPrint)/(m_nClientWidth+30)), &memDC, 0, 0, m_nClientWidth+30, m_nClientHeight, SRCCOPY); memDC.SelectObject(oldBitmap) ; } else { memDC.SelectObject(oldBitmap) ; } dc.EndPage(); //通知打印机驱动程序页结束 dc.EndDoc();//通知打印机驱动程序打印完毕 DeleteDC(dc.Detach()); } else { memDC.SelectObject(oldBitmap) ; } } void CDlg_Report::PrintPreview() { CPrintFrame *pFrame = new CPrintFrame; pFrame->m_pCallerDlg = this; pFrame->Create(NULL,"Curve Print Preview",WS_OVERLAPPEDWINDOW,CRect(0,0,0,0)); pFrame->m_pView->OnMyPrintPreview(); } bool CDlg_Report::IsCanHomePage() { bool bRet=true; if( m_nCurPage==0 ) bRet = false; return bRet; } bool CDlg_Report::IsCanPrePage() { bool bRet=true; if( m_nCurPage==0 ) bRet = false; return bRet; } bool CDlg_Report::IsCanNextPage() { bool bRet=true; if( m_nCurPage>=m_nMaxPage-1 ) bRet = false; return bRet; } bool CDlg_Report::IsCanLastPage() { bool bRet=true; if( m_nCurPage>=m_nMaxPage-1 ) bRet = false; return bRet; } void CDlg_Report::HomePage() { if( !IsCanHomePage() ) return; m_nCurPage = 0; ShowPage( m_nCurPage ); } void CDlg_Report::PrePage() { if( !IsCanPrePage() ) return; m_nCurPage--; ShowPage( m_nCurPage ); } void CDlg_Report::NextPage() { if( !IsCanNextPage() ) return; m_nCurPage++; ShowPage( m_nCurPage ); } void CDlg_Report::LastPage() { if( !IsCanLastPage() ) return; m_nCurPage = m_nMaxPage-1; ShowPage( m_nCurPage ); } void CDlg_Report::ShowPage( int iPageIndex ) { m_List_Report.DeleteAllItems(); int nSize = m_ListItem.size(); std::list::iterator value_it = m_ListItem.begin(); int nIndexStart = m_nListPageRowSize * iPageIndex; int nIndexEnd = m_nListPageRowSize * ( iPageIndex+1); nIndexEnd = nIndexEnd=nIndexStart ) { InsertToList( (*value_it).sVarDesc,(*value_it).sTime,(*value_it).sValueMin,(*value_it).sValueMax,(*value_it).sValueAverage, (*value_it).sAlarmTimes,(*value_it).sCause,(*value_it).sDealWith,(*value_it).sRemarks,true ); } value_it++; } CRect rc; CRect rcFrame; m_ReportFrame.GetWindowRect( rcFrame ); ScreenToClient( &rcFrame ); CRect rcReportList; m_List_Report.GetWindowRect( rcReportList ); ScreenToClient( &rcReportList ); CRect rect( rcFrame.left+rcFrame.Width()-100,rcReportList.bottom,rcFrame.right,rcFrame.bottom ); InvalidateRect( rect );//();// } /////////////////////////////////////////////////////////////////// 打印函数 /////////////////////////////////////////////////////////// void CDlg_Report::PrintPageHeader(CDC* pDC, UINT nPageNumber, CPrintInfo* pInfo) { CFont *pOldFont; CFont fontHeader; fontHeader.CreatePointFont(100,"FixedSys",pDC); pOldFont=(CFont *)(pDC->SelectObject(&fontHeader)); int nPosY,nPosX; nPosY=3*m_cyPrinter; nPosX=m_cxOffset; pDC->TextOut(nPosX,nPosY,CString("南京航空航天大学")); CString str; str.Format("第 %d 页 / 共 %d 页",nPageNumber,pInfo->GetMaxPage()); CSize size=pDC->GetTextExtent(str); nPosX=m_cxOffset+m_cxWidth-size.cx; pDC->TextOut(nPosX,nPosY,str); pDC->MoveTo(m_cxOffset,4*m_cyPrinter); pDC->LineTo(m_cxOffset+m_cxWidth,4*m_cyPrinter); pDC->SelectObject(pOldFont); fontHeader.DeleteObject(); } LRESULT CDlg_Report::OnBeginPrinting(WPARAM wParam,LPARAM lParam) { CDC* pDC = (CDC*)wParam; CPrintInfo* pInfo = (CPrintInfo *)lParam; if(m_fontPrinter.m_hObject==NULL) m_fontPrinter.CreatePointFont(120,"FixedSys",pDC); TEXTMETRIC tm; CFont* pOldFont = pDC->SelectObject (&m_fontPrinter); pDC->GetTextMetrics (&tm); m_cyPrinter = tm.tmHeight + tm.tmExternalLeading; CSize size = pDC->GetTextExtent (_T ("---------1---------2---------" \ "3---------4---------5---------6---------7---------8---"), 81); pDC->SelectObject (pOldFont); m_cxWidth = size.cx; m_nLinesPerPage = (pDC->GetDeviceCaps (VERTRES) - (m_cyPrinter * (3 + (2 * PRINTMARGIN)))) / m_cyPrinter; pInfo->SetMaxPage (2); m_cxOffset = 0;//(pDC->GetDeviceCaps (HORZRES) - size.cx) / 2; return TRUE; } LRESULT CDlg_Report::OnEndPrinting(WPARAM wParam,LPARAM lParam) { if(m_fontPrinter.m_hObject!=NULL) m_fontPrinter.DeleteObject (); return TRUE; } LRESULT CDlg_Report::OnMyPrint(WPARAM wParam,LPARAM lParam) { UINT gl_uNumOfPoints = 52; CDC* pPrintDC = (CDC*)wParam; CPrintInfo* pInfo = (CPrintInfo *)lParam; int nPageNumber = pInfo->m_nCurPage; int i,j; CFont *pOldFont; CFont DataFont; //DataFont.CreatePointFont(120,"宋体",pPrintDC); CRect Rect; m_ReportFrame.GetWindowRect( Rect ); ScreenToClient( &Rect ); //ShowPage( nPageNumber-1 ); //Sleep( 1000 ); //if(nPageNumber==1) { int nClientWidth = Rect.Width();// int nClientHeight = Rect.Height()-6;// CDC memDC ; CBitmap memBitmap ; CBitmap* oldBitmap ; // bitmap originally found in CMemDC BITMAP bm; CPaintDC pDC2(this); memDC.CreateCompatibleDC(&pDC2) ; memBitmap.CreateCompatibleBitmap(&pDC2, nClientWidth, nClientHeight) ; oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ; memBitmap.GetObject(sizeof(bm),&bm); memDC.StretchBlt(0, 0, nClientWidth+30, nClientHeight, &pDC2, Rect.left, Rect.top, nClientWidth+30, nClientHeight, SRCCOPY); pPrintDC->SetMapMode(MM_TEXT);//设置当前影射模式为:单位0.001英寸,X方向向右增加,Y方向向上增加 pPrintDC->DPtoLP(&Rect);//设备物理单位转化为逻辑单位 int xPrint = GetDeviceCaps(pPrintDC->GetSafeHdc(),HORZRES);//屏幕宽(像素) int yPrint = GetDeviceCaps(pPrintDC->GetSafeHdc(),VERTRES);//屏幕高(像素) //dc.SetWindowOrg(-rect.left, -rect.top);//设置原点 int spaceWidth = (xPrint%(nClientWidth*1))/2; int spacehight = (yPrint%(nClientHeight*1))/2; pPrintDC->SetWindowOrg(-spaceWidth-500, -spacehight-300);//设置原点 if (memDC.GetSafeHdc() != NULL) { //memDC.BitBlt(0, 0, m_nClientWidth+30, m_nClientHeight,&pDC, -3, -30, SRCCOPY); //通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并 //dc.BitBlt(0,0,m_nClientWidth, m_nClientHeight,&memDC, 0, 0, SRCCOPY); pPrintDC->StretchBlt(0,0,(nClientWidth+30)*((xPrint)/(nClientWidth+30)), nClientHeight*((xPrint)/(nClientWidth+30)), &memDC, 0, 0, nClientWidth+30, nClientHeight, SRCCOPY); //pPrintDC->MoveTo( 0,0 ); //pPrintDC->LineTo( (nClientWidth+30)*((xPrint)/(nClientWidth+30)), nClientHeight*((xPrint)/(nClientWidth+30)) ); memDC.SelectObject(oldBitmap) ; } else { memDC.SelectObject(oldBitmap) ; } m_nCurPage++; if( m_nCurPageSelectObject(&DataFont); //pDC->Rectangle(m_cxOffset,(int)((2.5 + PRINTMARGIN)*m_cyPrinter),m_cxOffset+m_cxWidth,(m_nLinesPerPage+3 + PRINTMARGIN)*m_cyPrinter+20); //for(i=1;i<7;i++) //{ // pDC->MoveTo(m_cxOffset+i*m_cxWidth/7,(int)((2.5 + PRINTMARGIN)*m_cyPrinter)); // pDC->LineTo(m_cxOffset+i*m_cxWidth/7,(3 +m_nLinesPerPage+PRINTMARGIN)*m_cyPrinter+20); //} //pDC->MoveTo(m_cxOffset,(4 + PRINTMARGIN)*m_cyPrinter); //pDC->LineTo(m_cxOffset+m_cxWidth,(4 + PRINTMARGIN)*m_cyPrinter); //for(i=0;i<7;i++) //{ // pDC->TextOut(m_cxOffset+50+i*m_cxWidth/7,(int)((2.8 + PRINTMARGIN)*m_cyPrinter),CString(pszTitle[i])); //} //for(i=0;i<(int)m_nLinesPerPage-1;i++) //{ // CString str[7]; // int nIndex = (nPageNumber-1)*(m_nLinesPerPage-1)+i; // if(nIndex<(int)gl_uNumOfPoints) // { // str[0].Format("%.3f",(double)(i+1)); // str[1].Format("%.3f",1+sin((float)i)); // str[2].Format("%.3f",1+cos((float)i)); // str[3].Format("%.3f",1+sin(0.5*i)); // // str[4].Format("%.3f",1+cos(0.5*i)); // str[5].Format("%.3f",1+sin(0.1*i)); // str[6].Format("%.3f",1+cos(0.1*i)); // // // for(j=0;j<7;j++) // { // pDC->TextOut(m_cxOffset+50+j*m_cxWidth/7,(4 + PRINTMARGIN+i)*m_cyPrinter+5,str[j]); // } // } //} //pDC->SelectObject (pOldFont); } //if(nPageNumber==2) //{ // HBITMAP hBitmap=::LoadBitmap(AfxGetInstanceHandle(),(LPCTSTR)IDB_BITMAP1); // BITMAP bitmap; // ::GetObject(hBitmap,sizeof(BITMAP),&bitmap); // double dScale=(double)m_cxWidth/bitmap.bmWidth; // int nScaledWidth=m_cxWidth; // int nScaledHeight=(int)(bitmap.bmHeight*dScale); // // HDC dcMem; // dcMem=::CreateCompatibleDC(pDC->m_hDC); // HBITMAP hOldBmp=(HBITMAP)::SelectObject(dcMem,hBitmap); // // int nVertCenterPos = pDC->GetDeviceCaps (VERTRES) / 2; // ::StretchBlt(pDC->m_hDC,m_cxOffset,(4 + PRINTMARGIN)*m_cyPrinter,nScaledWidth,nScaledHeight,dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); // // // ::SelectObject(dcMem,hOldBmp); // ::DeleteDC(dcMem); // ::DeleteObject(hBitmap); //} //if(m_bPrintHead) // PrintPageHeader(pPrintDC,pInfo->m_nCurPage, pInfo); return TRUE; } /////////////////////////////////////////////////////////////// 打印函数 结束 ///////////////////////////////////////////////////////////// LRESULT CDlg_Report::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: 在此添加专用代码和/或调用基类 switch( message ) { case WM_SAVEPIC: { CString sFilePath; sFilePath = *(CString*)(WPARAM*)&wParam; CRect rect; m_ReportFrame.GetWindowRect( rect ); ScreenToClient( &rect ); LPCWSTR p = CA2W( sFilePath ); SaveJpg( p,rect.left,rect.top,rect.Width(),rect.Height()-6,100 ); } } return CDialog::WindowProc(message, wParam, lParam); } void CDlg_Report::OnTimer(UINT nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if( nIDEvent==1 ) { //if( m_sFileSavePath!="" ) //{ // CRect rect; // m_ReportFrame.GetWindowRect( rect ); // ScreenToClient( &rect ); // for( int i=0;im_sFileSavePath!="" ) { CRect rect; pDlg->m_ReportFrame.GetWindowRect( rect ); pDlg->ScreenToClient( &rect ); for( int i=0;im_nMaxPage;i++ ) { pDlg->m_nCurPage = i; pDlg->ShowPage( pDlg->m_nCurPage ); Sleep( 500 ); CString sFileIndex; sFileIndex.Format( "(第%d页)",i+1 ); CString sFileName = pDlg->m_sFileSaveName; sFileName.Insert( sFileName.GetLength()-4,sFileIndex ); CString sFilePath = pDlg->m_sFileSavePath; sFilePath.Replace( pDlg->m_sFileSaveName,sFileName ); LPCWSTR p = CA2W( sFilePath ); pDlg->SaveJpg( p,rect.left,rect.top,rect.Width(),rect.Height()-6,100 ); } pDlg->m_sFileSavePath = ""; pDlg->MessageBox( "保存图片完成","提示" ); } Sleep( 1000 ); }while( WaitForSingleObject( g_hRunObject, 1000L ) == WAIT_TIMEOUT ); return 0; } void CDlg_Report::Save() { SetListRowNoChoose(); DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; LPSTR lpszFilter = "JPG Files (*.jpg)|*.jpg|XLS Files (*.xls)|*.xls||"; char Filter[][9] = {".jpg",".xls",""};//文件类型数组 CString sFilePath,sFileName; CFileDialog dlg(FALSE,NULL,m_sReportTitle,dwFlags,lpszFilter); //dlg.m_pOFN->nFilterIndex = INDEX; if(dlg.DoModal()==IDOK) { DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个 CString file_ext = Filter[filter_num-1];//获得文件类型的名称 sFilePath = dlg.GetPathName(); sFileName = dlg.GetFileName(); if( sFilePath.Right(4)!=file_ext ) { sFilePath += file_ext; sFileName += file_ext; } } else return; if( -1 != sFilePath.Find( ".jpg" ) ) { Sleep( 500 ); m_sFileSavePath = sFilePath; m_sFileSaveName = sFileName; } else SaveExcel( sFilePath ); } void CDlg_Report::SaveExcel( CString sExcelPath ) { //ExportListToExcel( &m_List_Report,sExcelPath );return; _Application ExcelApp; Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wsMysheet; Range rgMyRge; //创建Excel 2000服务器(启动Excel) if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) { ExportListToExcel( &m_List_Report,sExcelPath ); return; //AfxMessageBox("创建Excel服务失败!"); //exit(1); } ExcelApp.SetVisible(false); //利用模板文件建立新文档 CString strModelPath; strModelPath.Format( "%s\\%s\\report.xlt", g_strDirectory,REPORT_TEMPLATE ); wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strModelPath))); //得到Worksheets wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); //得到sheet1 wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("报表")),true); //添加模板个数 //for(int i=0;i<1;i++) //{ // wsMysheet.Copy(vtMissing,_variant_t(wsMysheet)); //} CString strVarName = "温湿度"; CString str1; wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("报表")),true); str1 = "报表"; wsMysheet.SetName(str1); //for(i=0;i::iterator value_it = m_ListItem.begin(); CString sIndex; for( int i=0;imessage == WM_KEYDOWN ) { if(pMsg->wParam==VK_RETURN||pMsg->wParam==VK_ESCAPE) { return TRUE; } } return CDialog::PreTranslateMessage(pMsg); }