| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600 |
- // 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;i<m_nVarNumber;i++ )
- m_ValueList[i].clear();
- m_nVarNumber = 0;
- CString sVarID,sDevName,sTime,sVarName,sVarDesc,sValue;
- CString strStartDate, strEndDate,sTemp;
-
- CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->GetMainWnd();
- 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<VAR_INFO>::iterator value_it = pView->m_VarInfoList.begin();
- for( int m=0;m<nSize;m++)
- {
- sVarID = (*value_it).sVarID;
- sDevName = (*value_it).sDevName;
- sTime = (*value_it).sTime;
- sVarName = (*value_it).sVarName;
- sVarDesc = (*value_it).sVarDesc;
- sValue = (*value_it).sVarValue;
- if( sTime.Left(2)!="20" )
- sTime = "20"+sTime;
- DATA_STRUCT tmp;
- tmp.sDevName = sDevName;
- tmp.sVarDesc = sVarDesc;
- tmp.sTime = sTime;
- tmp.dValue = atof( sValue );
- int nIndex = GetVarIndex( sVarDesc );
- if( nIndex>=VAR_MAX_SIZE )
- continue;
- m_ValueList[nIndex].push_back(tmp);
- m_nVarNumber = m_nVarNumber<nIndex+1 ? nIndex+1 : m_nVarNumber;
- value_it++;
- }
-
- m_ListItem.clear();
- int INDEX=0;
- CString sMinValue,sMaxValue,sAverageValue;
- CString sAlarmTimes,sCause,sDealWith,sRemarks;
- double dMinValueCurve=1000,dMaxValueCurve=0;
- for( int i=0;i<m_nVarNumber;i++ )
- {
- int nCount = 0;//在单位时间段内数据个数,为了得到平均值
- int nYear1,nMonth1,nDay1;
- int nH,nM,nS;
- sscanf(strStartDate,"%d-%d-%d %d:%d:%d",&nYear1,&nMonth1,&nDay1,&nH,&nM,&nS);
- sTemp.Format( "%04d%02d%02d",nYear1,nMonth1,nDay1 );
- int nTimeS = atoi( sTemp );
- int nTimeE = 0;
- CString sTimeInsert = g_NextTime( m_nDateType,nTimeS,nTimeE,false );
- double dMinValue=1000,dMaxValue=0;
- double dValueSum = 0;
- CString sTimeOld;//保留上一次数据的时间,为了得到这个平均值是那个时间段的
- int nSize = m_ValueList[i].size();
- std::list<DATA_STRUCT>::iterator value_it = m_ValueList[i].begin();
- for( int m=0;m<nSize;m++)
- {
- double dValue = (*value_it).dValue;
- sTime = (*value_it).sTime;
- sVarDesc = (*value_it).sVarDesc;
- value_it++;
- int nYear,nMonth,nDay;
- sscanf(sTime,"%d-%d-%d %d:%d:%d",&nYear,&nMonth,&nDay,&nH,&nM,&nS);
- sTemp.Format( "%04d%02d%02d",nYear,nMonth,nDay );
- int nTimeN = atoi( sTemp );
- if( nTimeN>=nTimeS && nTimeN<=nTimeE )
- {
- nCount++;
- dValueSum += dValue;//和
- dMinValue = dMinValue<dValue ? dMinValue : dValue;//最小值
- dMaxValue = dMaxValue>dValue ? 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 = dMaxValueCurve<atoi(sAverageValue) ? atoi(sAverageValue) : dMaxValueCurve;
- /////////////////////////////////////////////////////////////////////////////////
- nCount = 1;
- dMinValue = dValue;
- dMaxValue = dValue;
- dValueSum = dValue;
- sTimeInsert = g_NextTime( m_nDateType,nTimeS,nTimeE );
- }
- else
- {
- nCount = 1;
- dMinValue = dValue;
- dMaxValue = dValue;
- dValueSum = dValue;
- sTimeInsert = g_NextTime( m_nDateType,nTimeS,nTimeE );
- }
- sTimeOld = sTime;
- if( m==nSize-1 && 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 = dMaxValueCurve<atoi(sAverageValue) ? atoi(sAverageValue) : dMaxValueCurve;
- /////////////////////////////////////////////////////////////////////////////////
- nCount = 1;
- dMinValue = dValue;
- dMaxValue = dValue;
- dValueSum = dValue;
- sTimeInsert = g_NextTime( m_nDateType,nTimeS,nTimeE );
- }
- }
- }
- m_wndScope.SetMaxMinData( dMinValueCurve,dMaxValueCurve );
- Invalidate();
- m_nCurPage = 1;
- nSize = m_ListItem.size();
- m_nMaxPage = nSize/m_nListPageRowSize;
- if( nSize%m_nListPageRowSize!=0 )
- m_nMaxPage++;
- HomePage();
- pView->m_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<VAR_MAX_SIZE;i++ )
- {
- if( m_ValueList[i].empty() )
- {
- nRet = i;
- break;
- }
- std::list<DATA_STRUCT>::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<LIST_ITEM>::iterator value_it = m_ListItem.begin();
-
- int nIndexStart = m_nListPageRowSize * iPageIndex;
- int nIndexEnd = m_nListPageRowSize * ( iPageIndex+1);
- nIndexEnd = nIndexEnd<nSize?nIndexEnd:nSize;
- for( int m=0;m<nIndexEnd;m++)
- {
- if( m>=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_nCurPage<m_nMaxPage && m_nCurPage<m_nToPage )
- ShowPage( m_nCurPage );
-
- //TCHAR *pszTitle[7]={"Time","数值1","数值2","数值3","数值4","数值5","数值6"};
- //pOldFont=pDC->SelectObject(&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;i<m_nMaxPage;i++ )
- // {
- // CString sFileIndex;
- // sFileIndex.Format( "(第%d页)",i+1 );
- // CString sFileName = m_sFileSaveName;
- // sFileName.Insert( sFileName.GetLength()-4,sFileIndex );
- // CString sFilePath = m_sFileSavePath;
- // sFilePath.Replace( m_sFileSaveName,sFileName );
- // LPCWSTR p = CA2W( sFilePath );
- // SaveJpg( p,rect.left,rect.top,rect.Width(),rect.Height()-6,100 );
- //
- // m_nCurPage = i;
- // ShowPage( m_nCurPage );
- // //Sleep( 4000 );
- // }
- //
- // m_sFileSavePath = "";
- //
- //}
- }
- CDialog::OnTimer(nIDEvent);
- }
- DWORD WINAPI CDlg_Report::ThreadSavePic( CDlg_Report *pDlg )
- {
- do
- {
- if( pDlg->m_sFileSavePath!="" )
- {
- CRect rect;
- pDlg->m_ReportFrame.GetWindowRect( rect );
- pDlg->ScreenToClient( &rect );
- for( int i=0;i<pDlg->m_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<wssMysheets.GetCount()-1;i++)
- //{
- // wsMysheet = wsMysheet.GetNext();
- // str1.Format("第%d页",i+2);
- // wsMysheet.SetName(str1);
- //}
- //wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1页")),true);
- //得到全部Cells,此时,rgMyRge是cells的集合
- rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
- //设置1行1列的单元的值
- CString str=_TEXT("21:12");
- //标题
- rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t(m_sReportTitle));
- //打印日期
- rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(m_sPrintDate));
- //编制单位
- rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)5),_variant_t(m_sMakeUnit+m_sMakeUnitName));
- //编制单位
- rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t(m_sChooseDate));
- //编制单位
- rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)5),_variant_t(m_sAddress+m_sAddressName));
- int nSize = m_ListItem.size();
- std::list<LIST_ITEM>::iterator value_it = m_ListItem.begin();
- CString sIndex;
- for( int i=0;i<nSize;i++ )
- {
- sIndex.Format( "%d",i+1 );
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)1),_variant_t( sIndex ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)2),_variant_t( (*value_it).sVarDesc ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)3),_variant_t( (*value_it).sTime ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)4),_variant_t( (*value_it).sValueMin ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)5),_variant_t( (*value_it).sValueMax ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)6),_variant_t( (*value_it).sValueAverage ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)7),_variant_t( (*value_it).sAlarmTimes ));
- rgMyRge.SetItem(_variant_t((long)(5+i)),_variant_t((long)8),_variant_t( (*value_it).sRemarks ));
- value_it++;
- }
- //将表格保存
- CString strPath;
- CString strDate = "20111111";
- strPath = sExcelPath;//m_strPath + "\\" + strDate + "\.xls";
- wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,
- vtMissing,vtMissing,vtMissing,vtMissing);
- ExcelApp.SetVisible(false);
- //wbMyBook.PrintPreview(_variant_t(false));
- //释放对象
- rgMyRge.ReleaseDispatch();
- wsMysheet.ReleaseDispatch();
- wssMysheets.ReleaseDispatch();
- //wbMyBook.ReleaseDispatch();
- wbsMyBooks.ReleaseDispatch();
- //ExcelApp.ReleaseDispatch();
- ExcelApp.Quit();
- AfxMessageBox("生成成功!");
- }
- void CDlg_Report::ShowType( int iShowType )
- {
- m_nReportType = iShowType;
- if( iShowType==0 )
- {
- m_List_Report.ShowWindow( true );
- m_wndScope.ShowWindow( false );
- }
- else if( iShowType==1 )
- {
- m_List_Report.ShowWindow( false );
- m_wndScope.ShowWindow( true );
- m_wndScope.Invalidate();
- }
- else if( iShowType==2 )
- {
- m_List_Report.ShowWindow( false );
- }
- }
- BOOL CDlg_Report::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: 在此添加专用代码和/或调用基类
- if( pMsg->message == WM_KEYDOWN )
- {
- if(pMsg->wParam==VK_RETURN||pMsg->wParam==VK_ESCAPE)
- {
- return TRUE;
- }
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
|