📄 testappview.cpp
字号:
// TestAppView.cpp : implementation of the CTestAppView class
//
#include "stdafx.h"
#include "TestApp.h"
#include "TestAppDoc.h"
#include "TestAppView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestAppView
IMPLEMENT_DYNCREATE(CTestAppView, CView)
BEGIN_MESSAGE_MAP(CTestAppView, CView)
//{{AFX_MSG_MAP(CTestAppView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestAppView construction/destruction
CTestAppView::CTestAppView()
{
// TODO: add construction code here
m_pSetPapersData=NULL;
m_pSetPaper=NULL;
}
CTestAppView::~CTestAppView()
{
delete m_pSetPapersData;
delete m_pSetPaper;
}
BOOL CTestAppView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTestAppView drawing
void CTestAppView::OnDraw(CDC* pDC)
{
PrintReport(pDC);
}
/////////////////////////////////////////////////////////////////////////////
// CTestAppView printing
BOOL CTestAppView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTestAppView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTestAppView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTestAppView diagnostics
#ifdef _DEBUG
void CTestAppView::AssertValid() const
{
CView::AssertValid();
}
void CTestAppView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTestAppDoc* CTestAppView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestAppDoc)));
return (CTestAppDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTestAppView message handlers
void CTestAppView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
PrintReport(pDC, pInfo);
}
void CTestAppView::OnInitialUpdate()
{
CView::OnInitialUpdate();
GetDocument()->SetTitle("试卷报表");//设置文档标题
GetParent()->SetWindowText("试卷报表");//设置子窗口标题
//创建记录集指针,打开记录集
m_pSetPaper=new CPapersSet(NULL);
m_pSetPaper->Open();
m_pSetPapersData=new CPapersDataSet(NULL);
m_pSetPapersData->Open();
}
void CTestAppView::PrintReport(CDC* pDC, CPrintInfo* pInfo)
{
CString str;//用于将数值数据转换为字符串,以便使用TextOut函数输出
CTime time = CTime::GetCurrentTime();//在打印报表时用于在页脚输出日期
int nLineHeight=0;//用于计算每行数据占用高度
int y=0;//用于控制TextOut函数中输出位置的y轴坐标
CFont ftitle/*报表标题字体*/,fdetail/*数据字体*/;
CFont fheader/*字段标题字体*/,ffooter/*报表页脚字体*/;
//创建报表各部分使用的字体
ftitle.CreateFont(100,0,0,0,FW_BOLD,0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_ROMAN,"楷体_GB2312");
fheader.CreateFont(60,0,0,0,FW_SEMIBOLD,0,1,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_ROMAN,"楷体_GB2312");
fdetail.CreateFont(50,0,0,0,FW_NORMAL,0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_ROMAN,"楷体_GB2312");
ffooter.CreateFont(40,0,0,0,FW_NORMAL,0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_ROMAN,"楷体_GB2312");
//if (m_pSet->IsBOF()){
// return;//若记录集没有数据,则直接返回
//}
//如果是打印第一页或在窗体显示数据,则刷新记录集
//这样可从第一条记录开始输出,否则继续接着记录集当前记录输出
//if (!pInfo || pInfo->m_nCurPage==1){
// m_pSet->Requery();//刷新记录集,第一条记录自动成为当前记录输出
//}
pDC->SelectObject(&ftitle);//设置报表标题字体
pDC->TextOut(650,0,"试卷报表");//输出报表标题
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
nLineHeight=tm.tmHeight+tm.tmExternalLeading;//获取行高
y = -nLineHeight-20;//计算字段标题输出的y轴坐标
pDC->SelectObject(&fheader);//设置字段标题字体
//输出字段标题,可根据实际页面情况调整输出的x轴坐标
pDC->TextOut(100,y,"学号");
pDC->TextOut(450,y,"姓名");
pDC->TextOut(710,y,"年龄");
pDC->TextOut(900,y,"性别");
pDC->TextOut(1100,y,"电子邮件");
/*
pDC->GetTextMetrics(&tm);
nLineHeight=tm.tmHeight+tm.tmExternalLeading;//获取新字体下的行高
y-=nLineHeight+20;//计算第一行记录输出的y轴坐标
pDC->SelectObject(&fdetail);//设置记录数据显示字体
pDC->GetTextMetrics(&tm);
nLineHeight=tm.tmHeight+tm.tmExternalLeading;//获取新字体下的行高
//输出数据库表StudentInfo数据
while (!m_pSet->IsEOF())
{
if (pInfo && abs(y)>2700){
//如果是打印或打印预览,不是在窗体中显示数据
//则在一页打满时增加页数,跳出记录集搜索循环
pInfo->SetMaxPage(pInfo->m_nCurPage + 1) ;
break;//记录集搜索循环,停止打印记录数据
}
pDC->TextOut(100,y, m_pSet->m_id);//输出学号
pDC->TextOut(450,y, m_pSet->m_name);//输出姓名
str.Format("%d",m_pSet->m_age);//将年龄数值转换为字符串
pDC->TextOut(760,y, str);//输出年龄
pDC->TextOut(950,y, m_pSet->m_sex);//输出数值
pDC->TextOut(1100,y, m_pSet->m_email);
m_pSet->MoveNext();//使下一条记录成为当前记录
y-=nLineHeight;//计算下一行数据输出的y轴坐标
}
if(pInfo){
//打印报表页脚
pDC->SelectObject(&ffooter);
str.Format("学生信息报表 第 %d 页 %d年%d月%d日",
pInfo->m_nCurPage,
time.GetYear(),time.GetMonth(),time.GetDay());
pDC->TextOut(650,-2809,str);
} */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -