?? myview.cpp
字號:
// htglxtView.cpp : implementation of the CHtglxtView class
//
#include "stdafx.h"
#include "htglxt.h"
#include "MyDoc.h"
#include "MyView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView
IMPLEMENT_DYNCREATE(CMyView, CScrollView)
BEGIN_MESSAGE_MAP(CMyView, CScrollView)
//{{AFX_MSG_MAP(CHtglxtView)
// 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, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView construction/destruction
CMyView::CMyView()
{
// TODO: add construction code here
m_pos.cx=0;
m_pos.cy=0;
PageRow[1]=0;
}
CMyView::~CMyView()
{
Deffont.DeleteObject();
}
BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView drawing
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
//畫主標(biāo)題
PrintMainCaption(pDC,false);
//畫副標(biāo)題
PrintDeckCaption(pDC,false);
//畫表頭
LVCOLUMN col;
CString stext;
int wid,xpos,ypos;
xpos=30;
ypos=m_pos.cy;
pDC->Rectangle(30,ypos,LogicSize.cx-30,ypos+1);
ypos=ypos+10;
for(int i=0;i<m_ps.Grid->GetCols();i++)
{
col.mask=LVCF_TEXT;
col.pszText=stext.GetBuffer(stext.GetLength());
col.cchTextMax=255;
m_ps.Grid->GetColumn(i,&col);
wid=m_ps.Grid->GetColumnWidth(i);
pDC->TextOut(xpos,ypos,col.pszText);
xpos=xpos+wid;
}
ypos=ypos+ 20;//m_pos向下移動一個(gè)字的寬度
pDC->Rectangle(30,ypos,LogicSize.cx-30,ypos+1);
//畫表格內(nèi)容
ypos=ypos+10;
xpos=30;
for(int r=0;r<m_ps.Grid->GetRows();r++)
{
for(int c=0;c<m_ps.Grid->GetCols();c++)
{
stext=m_ps.Grid->GetItemText(r,c);
wid=m_ps.Grid->GetColumnWidth(c);
pDC->TextOut(xpos,ypos,stext);
xpos=xpos+wid;
}
xpos=30;
ypos=ypos+20;
}
// TODO: add draw code for native data here
}
void CMyView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
CDC* pDC;
pDC=this->GetDC();
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
sizeTotal.cx=100;
GridWidth=0;
for(int i=0;i<m_ps.Grid->GetCols();i++)
{
GridWidth=GridWidth+m_ps.Grid->GetColumnWidth(i);
}
sizeTotal.cy=m_ps.Grid->GetRows()*24+200;
sizeTotal.cx=GridWidth;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView printing
BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
//寬度比率
m_Info=pInfo;
//打印頁數(shù)
pInfo->SetMaxPage(m_ps.Grid->GetCols()*30/LogicSize.cx);
return DoPreparePrinting(pInfo);
}
void CMyView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
LPDEVMODE mode;
mode=pInfo->m_pPD->GetDevMode();
//打印紙大小
PageSize.cx=mode->dmPaperLength;
PageSize.cy=mode->dmPaperWidth;
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
//比率
Ratio.x=(float)LogicSize.cx/(float)PageSize.cx;
Ratio.y=(float)LogicSize.cy/(float)PageSize.cy;
Deffont.CreatePointFont(280*Ratio.x,"宋體",NULL);
}
void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView diagnostics
#ifdef _DEBUG
void CMyView::AssertValid() const
{
CScrollView::AssertValid();
}
void CMyView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CHtglxtView message handlers
void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
//寬度比率
WidthRatio=LogicSize.cx/GridWidth;
//畫邊框
pDC->Rectangle(10*Ratio.x,10*Ratio.y,LogicSize.cx-(10*Ratio.x),LogicSize.cy-(10*Ratio.y));
if(pInfo->m_nCurPage==1)
{
//畫主標(biāo)題
PrintMainCaption(pDC);
//畫副標(biāo)題
PrintDeckCaption(pDC);
//畫表頭
PrintGridHead(pDC);
//畫表格
PrintGridCell(pDC,pInfo);
}
else
{
//畫表頭
PrintGridHead(pDC);
PrintGridCell(pDC,pInfo);
}
PrintPage(pDC,pInfo);
//CScrollView::OnPrint(pDC, pInfo);
}
void CMyView::PrintMainCaption(CDC *pDC,bool bRatio)
{
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
CFont Mainfont;
Mainfont.CreatePointFont(m_ps.MainCaptionFontSize*rRatio.y,"黑體",NULL);
pDC->SelectObject(&Mainfont);
CRect rect(10*rRatio.x,10*rRatio.y,LogicSize.cx-(10*rRatio.x),m_ps.MainCaptionFontSize/4*rRatio.y+(10*rRatio.y));
pDC->DrawText(m_ps.MainCaption,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
m_pos.cy=m_ps.MainCaptionFontSize/4*rRatio.y+(10*rRatio.y);
Mainfont.DeleteObject();
}
void CMyView::PrintDeckCaption(CDC* pDC,bool bRatio)
{
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
CFont Deckfont;
Deckfont.CreatePointFont(m_ps.DeckCaptionFontSize*rRatio.y,"宋體",NULL);
pDC->SelectObject(&Deckfont);
CRect rect;
for(int i=0;i<m_ps.DeckCaptionNumber;i++)
{
m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y;
pDC->TextOut(50*rRatio.x,m_pos.cy,m_ps.DeckCaptions[i]);
}
m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y;
Deckfont.DeleteObject();
}
void CMyView::PrintGridHead(CDC *pDC,bool bRatio)
{
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
pDC->SelectObject(&Deffont);
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
//畫線
pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y);
//畫表頭
LVCOLUMN col;
CString stext;
m_pos.cx=50*rRatio.x;
int wid;
m_pos.cy=m_pos.cy+10*rRatio.y;
for(int i=0;i<m_ps.Grid->GetCols();i++)
{
col.mask=LVCF_TEXT;
col.pszText=stext.GetBuffer(stext.GetLength());
col.cchTextMax=255;
m_ps.Grid->GetColumn(i,&col);
wid=m_ps.Grid->GetColumnWidth(i)*WidthRatio;
pDC->TextOut(m_pos.cx,m_pos.cy,col.pszText);
m_pos.cx=m_pos.cx+wid;
}
m_pos.cy=m_pos.cy+38*rRatio.y;//m_pos向下移動一個(gè)字的寬度
//畫線
pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y);
m_pos.cy=m_pos.cy+ 10*rRatio.y;////m_pos向下移動一條線的寬度
Deffont.DeleteObject();
}
void CMyView::PrintGridCell(CDC *pDC,CPrintInfo* pInfo,bool bRatio)
{
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
pDC->SelectObject(&Deffont);
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
//畫表格
m_pos.cx=50*rRatio.x;
int wid;
CString stext;
if(pInfo->m_nCurPage!=1)
{
m_pos.cx=50*rRatio.x;
m_pos.cy=100*rRatio.y;
}
for(int r=PageRow[pInfo->m_nCurPage];r<m_ps.Grid->GetRows();r++)
{
for(int c=0;c<m_ps.Grid->GetCols();c++)
{
stext=m_ps.Grid->GetItemText(r,c);
wid=m_ps.Grid->GetColumnWidth(c)*WidthRatio;
pDC->TextOut(m_pos.cx,m_pos.cy,stext);
m_pos.cx=m_pos.cx+wid;
}
m_pos.cx=50*rRatio.x;
m_pos.cy=m_pos.cy+40*rRatio.y;//m_pos向下移動一個(gè)字的寬度
if(m_pos.cy+(100*rRatio.y)>LogicSize.cy)
{
pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y);
PageRow[pInfo->m_nCurPage+1]=r+1;
m_pos.cx=50*rRatio.x;
m_pos.cy=40*rRatio.y;
break;
}
}
if(r==m_ps.Grid->GetRows())
{ //畫線
pDC->Rectangle( m_pos.cx,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y);
//畫合計(jì)信息
PrintTotal(pDC,bRatio);
}
m_pos.cx=50*rRatio.x;
m_pos.cy=40*rRatio.y;
Deffont.DeleteObject();
}
void CMyView::PrintPage(CDC *pDC,CPrintInfo* pInfo,bool bRatio)
{
pDC->SelectObject(&Deffont);
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
CString stext;
stext.Format("第%d頁",pInfo->m_nCurPage);
CRect rect(0,LogicSize.cy-(100*rRatio.x),LogicSize.cx,LogicSize.cy);
pDC->DrawText(stext,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
Deffont.DeleteObject();
}
void CMyView::PrintTotal(CDC *pDC, bool bRatio)
{
//是否自動根據(jù)分辨率調(diào)整位置
RatioStruct rRatio;
rRatio.x=0.5;
rRatio.y=0.5;
if(bRatio==true)
rRatio=Ratio;
//邏輯設(shè)備大小
LogicSize.cx=pDC->GetDeviceCaps(HORZRES);
LogicSize.cy=pDC->GetDeviceCaps(VERTRES);
CFont Deckfont;
Deckfont.CreatePointFont(m_ps.DeckCaptionFontSize*rRatio.y,"宋體",NULL);
pDC->SelectObject(&Deckfont);
CRect rect;
if(m_ps.TotalNumber%2!=0)
m_ps.TotalNumber=m_ps.TotalNumber+1;
for(int i=0;i<m_ps.TotalNumber/2+1;i=i+2)
{
m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y;
pDC->TextOut(50*rRatio.x,m_pos.cy,m_ps.Totals[i]);
if(i+1<=m_ps.TotalNumber/2)
pDC->TextOut(LogicSize.cx/2,m_pos.cy,m_ps.Totals[i+1]);
}
m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y;
Deckfont.DeleteObject();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -