📄 example_3view.cpp
字号:
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 + -