📄 printdbview.cpp
字号:
// PrintDBView.cpp : implementation of the CPrintDBView class
//
#include "stdafx.h"
#include "PrintDB.h"
#include "StandardPrint.h"
#include "PrintDBDoc.h"
#include "PrintDBView.h"
#include "AdvanceQuery.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CPrintDBApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPrintDBView
IMPLEMENT_DYNCREATE(CPrintDBView, CFormView)
BEGIN_MESSAGE_MAP(CPrintDBView, CFormView)
//{{AFX_MSG_MAP(CPrintDBView)
ON_COMMAND(ID_StandardPrint, OnStandardPrint)
ON_BN_CLICKED(IDC_TOTALNUM, OnTotalnum)
ON_UPDATE_COMMAND_UI(ID_StandardPrint, OnUpdateStandardPrint)
ON_BN_CLICKED(IDC_Print, OnPrintDB)
ON_COMMAND(ID_Today, OnToday)
ON_UPDATE_COMMAND_UI(ID_Today, OnUpdateToday)
ON_COMMAND(ID_AdvancedQuery, OnAdvancedQuery)
ON_UPDATE_COMMAND_UI(ID_AdvancedQuery, OnUpdateAdvancedQuery)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrintDBView construction/destruction
CPrintDBView::CPrintDBView()
: CFormView(CPrintDBView::IDD)
{
//{{AFX_DATA_INIT(CPrintDBView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CPrintDBView::~CPrintDBView()
{
}
void CPrintDBView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPrintDBView)
DDX_Control(pDX, IDC_SUMLIST, m_SumList);
DDX_Control(pDX, IDC_LIST, m_List);
//}}AFX_DATA_MAP
}
BOOL CPrintDBView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CPrintDBView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
IsLinkTable=FALSE;
iScreen1=iScreen2=iScreen3=iScreenDayNum=iCone1=iCone2=iCone3=iConeDayNum=0;
CanUseTotal=FALSE;
HaveSum=FALSE;
PrintType=0;
}
/////////////////////////////////////////////////////////////////////////////
// CPrintDBView printing
BOOL CPrintDBView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
if (PrintType==1)
{
pInfo->SetMaxPage(1);
}else if(PrintType==2)
{
pInfo->SetMaxPage(ReturnPrintPages());
}
return DoPreparePrinting(pInfo);
}
void CPrintDBView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
if (PrintType==2)
{
circle=1;
}
// TODO: add extra initialization before printing
}
void CPrintDBView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CPrintDBView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: add customized printing code here
if (PrintType==1)
{
if (CanUseTotal==TRUE)
{
CString sTitle="玻 壳 数 据 库 查 询 系 统";
CString sCompany="津京玻壳股份有限公司";
CString sDate="打印时间:";
CFont titleFont,dataFont;
int iCharWidth,iCharHeight;
TEXTMETRIC tm;
CTime cutTime=CTime::GetCurrentTime();
CString sdate;
CString string="";
CString sComment="注:表中'时间段'内的时间为该时间段结束时间,该时间段的起始时间实为上一时间段内的时间!";
sdate.Format("%d/%d/%d-%d:%d:%d",cutTime.GetYear(),cutTime.GetMonth(),cutTime.GetDay(),cutTime.GetHour(),cutTime.GetMinute(),cutTime.GetSecond());
sDate+=sdate;
dataFont.CreateFont(80,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_MODERN,"宋体");
titleFont.CreateFont(120,0,0,0,900,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_MODERN,"宋体");
pDC->SelectObject(&dataFont);
pDC->GetTextMetrics(&tm);
iCharWidth=tm.tmAveCharWidth;
iCharHeight=tm.tmHeight;
pDC->SelectObject(&titleFont);
pDC->TextOut(38*iCharWidth,4*iCharHeight,sTitle);
pDC->SelectObject(&dataFont);
pDC->TextOut(15*iCharWidth,7*iCharHeight,sCompany);
pDC->TextOut(72*iCharWidth,7*iCharHeight,sDate);
//表格中的数据
for (int i=0;i<31;i++)
{
m_List.GetText(i,string);
pDC->TextOut((15+2)*iCharWidth,(int)((10+2*i+0.5)*iCharHeight),string);
}
//统计表格中的数据
if (HaveSum==TRUE)
{
for (i=0;i<4;i++)
{
m_SumList.GetText(i,string);
pDC->TextOut((15+2)*iCharWidth,(int)((62+10+2*i+0.5)*iCharHeight),string);
}
}
pDC->TextOut(15*iCharWidth,(int)(80.5*iCharHeight),sComment);
//画表格的竖线
for ( i=0;i<8;i++)
{
pDC->MoveTo(15*iCharWidth+i*12*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth+i*12*iCharWidth,80*iCharHeight);
}
//画表格的横线
for (i=0;i<36;i++)
{
pDC->MoveTo(15*iCharWidth,(10+2*i)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*i)*iCharHeight);
}
//一下代码,仅仅是表格的装饰效果
CPen pen(PS_SOLID,7,RGB(0,0,0));
pDC->SelectObject(&pen);
//描黑竖边框
pDC->MoveTo(15*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth,80*iCharHeight);
pDC->MoveTo(15*iCharWidth+7*12*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth+7*12*iCharWidth,80*iCharHeight);
//描黑横边框
pDC->MoveTo(15*iCharWidth,(10)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+70)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+70)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2*10)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*10)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2*21)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*21)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2*31)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*31)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2*34)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*34)*iCharHeight);
// delete &pen;
// delete &titleFont;
// delete &dataFont;
// delete &tm;
}
else
{
return;
}
}
else if(PrintType==2)
{
if (CanUseTotal==TRUE)
{
int nPrintPages=ReturnPrintPages();
CString sTitle="玻 壳 数 据 库 查 询 系 统";
CString sCompany="津京玻壳股份有限公司";
CString sDate="打印时间:";
CFont titleFont,dataFont;
int iCharWidth,iCharHeight;
TEXTMETRIC tm;
CTime cutTime=CTime::GetCurrentTime();
CString sdate;
CString string="";
CString sComment="注:表中'时间段'内的时间为该时间段结束时间,该时间段的起始时间实为上一时间段内的时间!";
sdate.Format("%d/%d/%d-%d:%d:%d",cutTime.GetYear(),cutTime.GetMonth(),cutTime.GetDay(),cutTime.GetHour(),cutTime.GetMinute(),cutTime.GetSecond());
sDate+=sdate;
dataFont.CreateFont(80,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_MODERN,"宋体");
titleFont.CreateFont(120,0,0,0,900,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_MODERN,"宋体");
pDC->SelectObject(&dataFont);
pDC->GetTextMetrics(&tm);
iCharWidth=tm.tmAveCharWidth;
iCharHeight=tm.tmHeight;
int k=circle;
pDC->StartPage();
pDC->SelectObject(&titleFont);
pDC->TextOut(38*iCharWidth,4*iCharHeight,sTitle);
pDC->SelectObject(&dataFont);
pDC->TextOut(15*iCharWidth,7*iCharHeight,sCompany);
pDC->TextOut(72*iCharWidth,7*iCharHeight,sDate);
if (k<nPrintPages)
{
//表格中的数据
for (int i=0;i<35;i++)
{
m_List.GetText(i+35*(k-1),string);
pDC->TextOut((15+2)*iCharWidth,(int)((10+2*i+0.5)*iCharHeight),string);
}
}
else
{
int residue;
residue=m_List.GetCount()-(nPrintPages-1)*35;
//表格中的数据
for (int i=0;i<residue;i++)
{
m_List.GetText(i+(nPrintPages-1)*35,string);
pDC->TextOut((15+2)*iCharWidth,(int)((10+2*i+0.5)*iCharHeight),string);
}
//统计表格中的数据
if (HaveSum==TRUE)
{
m_SumList.GetText(3,string);
pDC->TextOut((15+2)*iCharWidth,(int)((10+2*i+0.5)*iCharHeight),string);
}
}
pDC->TextOut(15*iCharWidth,(int)(80.5*iCharHeight),sComment);
//画表格的竖线
for (int i=0;i<8;i++)
{
pDC->MoveTo(15*iCharWidth+i*12*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth+i*12*iCharWidth,80*iCharHeight);
}
//画表格的横线
for (i=0;i<36;i++)
{
pDC->MoveTo(15*iCharWidth,(10+2*i)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2*i)*iCharHeight);
}
//一下代码,仅仅是表格的装饰效果
CPen pen(PS_SOLID,7,RGB(0,0,0));
pDC->SelectObject(&pen);
//描黑竖边框
pDC->MoveTo(15*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth,80*iCharHeight);
pDC->MoveTo(15*iCharWidth+7*12*iCharWidth,10*iCharHeight);
pDC->LineTo(15*iCharWidth+7*12*iCharWidth,80*iCharHeight);
//描黑横边框
pDC->MoveTo(15*iCharWidth,(10)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+70)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+70)*iCharHeight);
pDC->MoveTo(15*iCharWidth,(10+2)*iCharHeight);
pDC->LineTo((15+84)*iCharWidth,(10+2)*iCharHeight);
// delete &pen;
// delete &titleFont;
// delete &dataFont;
// delete &tm;
circle++;
}
else
{
return;
}
}
else
return;
}
/////////////////////////////////////////////////////////////////////////////
// CPrintDBView diagnostics
#ifdef _DEBUG
void CPrintDBView::AssertValid() const
{
CFormView::AssertValid();
}
void CPrintDBView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CPrintDBDoc* CPrintDBView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPrintDBDoc)));
return (CPrintDBDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPrintDBView message handlers
void CPrintDBView::OnStandardPrint()
{
// TODO: Add your command handler code here
_variant_t var;
CString sdate;
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveLast();
else
{
AfxMessageBox("表内数据为空");
return;
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
var = m_pRecordset->GetCollect("年/月/日");
sdate = (LPCSTR)_bstr_t(var);
CStandardPrint dlg;
if (dlg.DoModal()==IDOK)
{
if (CStringCompare(sdate,dlg.m_sDate))
{
Query(dlg.m_sDate);
}
else
{
AfxMessageBox("您查询的日期晚于数据库中的最新记录,请您更新数据库或者重新核对日期!");
return;
}
}
}
void CPrintDBView::Query(CString sdate)
{
// TODO: Add your control notification handler code here
_variant_t var;
CString str1,str2;
CString date,section,cping,czhui,mp,fzhui,fping;
// 清空列表框
str1=str2="";
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
while (!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("年/月/日");
str1 = (LPCSTR)_bstr_t(var);
////////////////////////////////////////////////////////////////
if (str1==sdate)
{
m_List.ResetContent();
iScreen1=iScreen2=iScreen3=iScreenDayNum=iCone1=iCone2=iCone3=iConeDayNum=0;
while (str1==sdate)
{
m_pRecordset->Move(-1);
var=m_pRecordset->GetCollect("年/月/日");
str1=(LPCSTR)_bstr_t(var);
}
m_pRecordset->Move(10);
CString a,b,c,d,e,f,g;
a="年/月/日";b="时间段";c="成型玻屏";
d="成型玻锥";e="磨抛投型";f="封接投锥";g="封接投屏";
m_List.AddString(FilStrWithNul(a,11)+FilStrWithNul(b,12)+FilStrWithNul(c,12)+FilStrWithNul(d,12)+FilStrWithNul(e,12)+FilStrWithNul(f,12)+FilStrWithNul(g,12));
for (int i=1;i<31;i++)
{
var = m_pRecordset->GetCollect("年/月/日");
if(var.vt != VT_NULL)
date = (LPCSTR)_bstr_t(var);
else
date="";
var = m_pRecordset->GetCollect("时间段");
if(var.vt != VT_NULL)
section = (LPCSTR)_bstr_t(var);
else
section="";
var = m_pRecordset->GetCollect("成型玻屏");
if(var.vt != VT_NULL)
cping = (LPCSTR)_bstr_t(var);
else
cping="0";
var = m_pRecordset->GetCollect("成型玻锥");
if(var.vt != VT_NULL)
czhui = (LPCSTR)_bstr_t(var);
else
czhui="0";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -