⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testappview.cpp

📁 < Visual C++数据库经典开发实例精解>>的实例源码
💻 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 + -