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

📄 example_3view.cpp

📁 基于mfc的ODBC数据库连接编程,并包含图形的报表的生成以及动态表格报表的建模
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void CExample_3View::OnIndex1() 
{
	// TODO: Add your command handler code here
	m_option=1;
	n=1;
	fdn="国民生产总值";
	Dline(n,fdn);
}

void CExample_3View::OnIndex2() 
{
	// TODO: Add your command handler code here
	m_option=1;
	n=2;
	fdn="国内生产总值";
	Dline(n,fdn);
}

void CExample_3View::OnIndex3() 
{
	// TODO: Add your command handler code here
	m_option=1;
	n=3;
	fdn="人均国内生产总值";
	Dline(n,fdn);
}

BOOL CExample_3View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	m_option=0;
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

int CExample_3View::Ptable(CDC *pDC)
{
	CExample_3Doc* pDoc=GetDocument();
	ASSERT_VALID(pDoc);
	int vs=0;
	pDoc->m_pRs->MoveFirst();
	if(pDoc->m_pRs->BOF||pDoc->m_pRs->EndOfFile)
		return(-vs);

	pDC->SetMapMode(MM_TWIPS);

	LOGFONT logFont[2];

	logFont[0].lfHeight=460;
	logFont[0].lfWidth=0;
	logFont[0].lfEscapement=0;
	logFont[0].lfOrientation=0;
	logFont[0].lfWeight=FW_NORMAL;
	logFont[0].lfItalic=0;
	logFont[0].lfUnderline=0;
	logFont[0].lfStrikeOut=0;
	logFont[0].lfCharSet=ANSI_CHARSET;
	logFont[0].lfOutPrecision=OUT_DEFAULT_PRECIS;
	logFont[0].lfClipPrecision=OUT_DEFAULT_PRECIS;
	logFont[0].lfQuality=PROOF_QUALITY;
	logFont[0].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
	strcpy(logFont[0].lfFaceName,"Times New Roman");
	
	
	logFont[1].lfHeight=360;
	logFont[1].lfWidth=0;
	logFont[1].lfEscapement=0;
	logFont[1].lfOrientation=0;
	logFont[1].lfWeight=FW_NORMAL;
	logFont[1].lfItalic=0;
	logFont[1].lfUnderline=0;
	logFont[1].lfStrikeOut=0;
	logFont[1].lfCharSet=ANSI_CHARSET;
	logFont[1].lfClipPrecision=CLIP_DEFAULT_PRECIS;
	logFont[1].lfQuality=PROOF_QUALITY;
	logFont[1].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
	strcpy(logFont[0].lfFaceName,"Times New Roman");

	CFont font[2];

	font[0].CreateFontIndirect(&logFont[0]);
	font[1].CreateFontIndirect(&logFont[1]);
	CFont *oldFont=pDC->SelectObject(&font[0]);

	int vs1,vs2,vs3,vs4;
	int hs;//开始的横坐标	
	int rw;//列宽
	int mlh;//max line height
	int pn,ph,ph0;//ph 应该是paper height ,pn应该是paper number
	int loopn;

	vs1=-900;
	vs2=-600;
	vs3=-400;
	vs4=-2400;

	hs=1100;

	rw=1237;

	pn=0;
	ph0=14031+2780;
	RECT Rect0,Rect[8];

	Rect0.left=hs;
	Rect0.right=Rect0.left+rw*8;
	Rect0.top=vs1;
	Rect0.bottom=Rect0.top+vs2;

	Rect[0].left=hs;
	Rect[0].right=Rect[0].left+rw;
	Rect[0].top=Rect0.bottom+vs3;
	Rect[0].bottom=Rect[0].top+vs4;
	loopn=0;
	while(loopn<6)
	{
		Rect[loopn+1].left=Rect[loopn].right;
		Rect[loopn+1].right=Rect[loopn+1].left+rw;
		Rect[loopn+1].top=Rect[0].top;
		Rect[loopn+1].bottom=Rect[0].bottom;
		loopn=loopn+1;
	}
	
	UINT nFormat1,nFormat2,nFormat3;
	nFormat1=DT_CENTER;
	nFormat2=DT_CENTER|DT_WORDBREAK;
	nFormat3=DT_CENTER|DT_WORDBREAK|DT_CALCRECT;

	CString Title,fth[11];
	Title="某地区各种物价总指数(上年=100)";
	fth[0]="年份";
	fth[1]="商品零售价格指数";
	fth[2]="居民消费价格指数";
	fth[3]="城市居民消费价格指数";
	fth[4]="农村居民消费价格指数";
	fth[5]="农产品收购价格指数";
	fth[6]="农村工业品零售价格指数";
	fth[7]="工农业商品综合比价指数";
	
	pDC->DrawText(Title,-1,&Rect0,nFormat1);//写第一页的表头	

	pDC->SelectObject(&font[1]);

	vs=Rect[0].top+160;
	pDC->MoveTo(Rect[0].left,vs);//这两句是画表头下的横线
	pDC->LineTo(hs+rw*8,vs);

	loopn=0;
	while(loopn<=7)
	{
		pDC->DrawText(fth[loopn],-1,&Rect[loopn],nFormat2);
		loopn=loopn+1;
	}
	
	mlh=1550;
	CString fs[8];
	while(!pDoc->m_pRs->BOF && !pDoc->m_pRs->EndOfFile)
	{
		vs=vs-mlh-100;
		pDC->MoveTo(Rect[0].left,vs);//这两句是画表项下的横线
		pDC->LineTo(hs+rw*8,vs);

		fs[0].Format("%ld",pDoc->m_rsRecSet.m_Cfy);
		fs[1].Format("%g",pDoc->m_rsRecSet.m_Cf1);
		fs[2].Format("%g",pDoc->m_rsRecSet.m_Cf2);
		fs[3].Format("%g",pDoc->m_rsRecSet.m_Cf3);
		fs[4].Format("%g",pDoc->m_rsRecSet.m_Cf4);
		fs[5].Format("%g",pDoc->m_rsRecSet.m_Cf5);
		fs[6].Format("%g",pDoc->m_rsRecSet.m_Cf6);
		fs[7].Format("%g",pDoc->m_rsRecSet.m_Cf7);

		mlh=0;
		loopn=0;
		while(loopn<=7)
		{
			fs[loopn].TrimRight();
			if(fs[loopn].GetLength()==0)
				fs[loopn]=" ";
			if(fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat3))>=mlh)
				mlh=int(fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat3)));
			loopn=loopn+1;
		}
		
		Rect[0].left=hs;
		Rect[0].right=Rect[0].left+rw;
		loopn=0;

		while(loopn<=6)
			{
				Rect[loopn+1].left=Rect[loopn].right;
				Rect[loopn+1].right=Rect[loopn+1].left+rw;
				loopn=loopn+1;
			}
			ph=vs+pn*ph0-1300;

			if(-ph>=ph0)
			{
				pn=pn+1;
				loopn=0;
				while(loopn<=6)
				{
				pDC->MoveTo(hs+(loopn+1)*rw-50,Rect0.bottom+vs3+160);
				pDC->LineTo(hs+(loopn+1)*rw-50,vs);
				loopn=loopn+1;
				}
				vs1=-900-ph0;

				Rect0.top=vs1;
				Rect0.bottom=Rect0.top+vs2;

				Rect[0].top=Rect0.bottom+vs3;
				Rect[0].bottom=Rect[0].top+vs4;

				loopn=0;
				while(loopn<=6)
				{
					Rect[loopn+1].top=Rect[0].top;
					Rect[loopn+1].bottom=Rect[0].bottom;
					loopn=loopn+1;
				}
				pDC->DrawText(Title,-1,&Rect0,nFormat1);//写第二页的表头
				pDC->SelectObject(&font[1]);

			    vs=Rect[0].top+160;
	
				pDC->MoveTo(Rect[0].left,vs);
				pDC->LineTo(hs+rw*8,vs);

				loopn=0;
				while(loopn<=7)//写第二页的表项
				{
					pDC->DrawText(fth[loopn],-1,&Rect[loopn],nFormat2);
					loopn=loopn+1;

				}
				mlh=1550;
				vs=vs-mlh-100;
				pDC->MoveTo(Rect[0].left,vs);
				pDC->LineTo(hs+rw*8,vs);
			}
			Rect[0].top=vs-80;
			Rect[0].bottom=Rect[0].top+vs4;
			loopn=1;
			while(loopn<=7)
			{
			Rect[loopn].top=Rect[0].top;
			Rect[loopn].bottom=Rect[0].bottom;
			loopn=loopn+1;

			}
			mlh=0;
			loopn=0;
			while(loopn<=7)
			{
			fs[loopn].TrimRight();
			if(fs[loopn].GetLength()==0)
				fs[loopn]=" ";
			if(fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat2))>=mlh)
				mlh=int(fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat2)));
			loopn=loopn+1;

			}
			
			pDoc->m_pRs->MoveNext();//目前为止,个人觉得和上章没有区别
		
		}
		vs=vs-mlh-100;
		pDC->MoveTo(Rect[0].left,vs);//这两句是画第一行数据下的横线
		pDC->LineTo(hs+rw*8,vs);

		loopn=0;
		while(loopn<=6)//此循环用于画从竖线
		{
			pDC->MoveTo(hs+(loopn+1)*rw-50,Rect0.bottom+vs3+160);
			pDC->LineTo(hs+(loopn+1)*rw-50,vs);
			loopn=loopn+1;

		}
		pDC->SelectObject(oldFont);
		
		return(-vs);

		
	
}

void CExample_3View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CScrollView::OnPrepareDC(pDC, pInfo);
	CScrollView::OnPrepareDC(pDC, pInfo);
	if(pInfo==NULL)
		return;
	int CurRow=pInfo->m_nCurPage/m_NumCols+(pInfo->m_nCurPage%m_NumCols>0);
	int CurCol=(pInfo->m_nCurPage-1)%m_NumCols+1;

	pDC->SetViewportOrg
		(-m_PageWidth*(CurCol-1),
		-m_PageHeight*(CurRow-1));
}

void CExample_3View::OnFilePrintDirectly()
{
	AfxGetMainWnd()->PostMessage(WM_COMMAND,ID_FILE_PRINT_DIRECT);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -