//=========================================================
//印刷関係の定義
protected:
void MyPrinteDrwTypeV(CDC* pDC, CPrintInfo* pInfo);
void MyPrinteDrwTypeH(CDC* pDC, CPrintInfo* pInfo);
void MyPrinteDrwTypeSecoundV(CDC* pDC, CPrintInfo* pInfo);
void MyPrinteDrwTypeSecoundH(CDC* pDC, CPrintInfo* pInfo);
void PrintPageHeader(CDC* pDC, CPrintInfo* pInfo, CString& strHeader);
void SetPageSize(CSize size);
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo) ;
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnDraw(CDC* /*pDC*/);
virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
public:
virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo = NULL);
最初にヘッダ-ファイル内部に宣言して下さい。取り合えず上記の名前で印刷を組み込むクラスに関数を定義してコンパイルをとうして、後から関数の名前を変更して下さい。
OnUpdate部分にIDS_TO_PRINTEを追加して下さい
void Vew2::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
int cunt=0;
CControlPracticeDoc* pDoc = GetDocument();
//========================================================
switch(lHint){
case ID_FORM_CONTROL_PRAVEW_ID_OK_DIS:
cunt=1;//試験
break ;
case ID_FORM_CONTROL_PRAVEWID_CANCSL_DIS:
cunt=1;//試験
break;
case IDS_TO_PRINT://印刷開始
ControlPracticeView::OnFilePrintPreview();
break;
IDS_TO_PRINTを呼び出してください
一連の関数は自動的にWindowsから呼び出されます。関数の名前でだいたい処理内容は解ると思います。
//=========================================================
//=========================================================
BOOL Vew2_Form::OnPreparePrinting(CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
pInfo->SetMaxPage(2); // the document is two pages long:
// the first page is the title page
// the second is the drawing
BOOL bRet = DoPreparePrinting(pInfo);// default preparation
pInfo->m_nNumPreviewPages =2; // Preview 2 pages at a time
return bRet;
}
//=========================================================
//=========================================================
BOOL Vew2_Form::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
return CFormView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
//TODO: 印刷前の特別な初期化処理を追加してください。
CFormView::OnBeginPrinting(pDC, pInfo);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
CFormView::OnEndPrinting(pDC, pInfo);
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
if(pDC->IsPrinting()) {// Is the DC a printer DC.
CFormView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ISOTROPIC ) ;
CSize sizeDoc = pDoc->GetDocSize();
pDC->SetWindowExt(sizeDoc) ;
}
}
/////////////////////////////////////////////////////////////////////////////
///////////////////// 縦ページ ///////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::MyPrinteDrwTypeV(CDC* pDC, CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
int startPos=pInfo->m_rectDraw.top;
int hight=0;
//---------------------------------
TEXTMETRIC textMetric;
LOGFONT lf;
CFont hFont,* pOldFont ;
//---------------------------------
pDoc->MakeLogFont(&lf,2,2,18);
hFont.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&hFont);
pDC->GetTextMetrics(&textMetric);
hight=(int)textMetric.tmHeight ;
pDC->SetTextAlign(TA_LEFT) ;
//---------------------------------
int span=15;
pDC->TextOut(40 ,span,_T("印刷試験"));
span-=hight+(hight/2);
}
/////////////////////////////////////////////////////////////////////////////
///////////////////////// 横ページ //////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::MyPrinteDrwTypeH(CDC* pDC, CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
int startPos=pInfo->m_rectDraw.top;
int hight=0;
//---------------------------------
TEXTMETRIC textMetric;
LOGFONT lf;
CFont hFont,* pOldFont ;
//---------------------------------
pDoc->MakeLogFont(&lf,2,2,18);
hFont.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&hFont);
pDC->GetTextMetrics(&textMetric);
hight=(int)textMetric.tmHeight ;
pDC->SetTextAlign(TA_LEFT) ;
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::MyPrinteDrwTypeSecoundV(CDC* pDC, CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
int startPos=pInfo->m_rectDraw.top;
int hight=0;
//---------------------------------
TEXTMETRIC textMetric;
LOGFONT lf;
CFont hFont,* pOldFont ;
//---------------------------------
pDoc->MakeLogFont(&lf,2,2,18);
hFont.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&hFont);
pDC->GetTextMetrics(&textMetric);
hight=(int)textMetric.tmHeight ;
pDC->SetTextAlign(TA_LEFT) ;
//---------------------------------
int span=15 ;
int bottomMax=(int)pInfo->m_rectDraw.bottom;
CString val=_T("");
// ctRecipiMem.GetWindowTextW(val);
//---------------------------------
int count=0;
int cs=pInfo->m_rectDraw.right-(textMetric.tmAveCharWidth*2);
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::PrintPageHeader(CDC* pDC, CPrintInfo* pInfo,CString& strHeader)
{
CFoodNutrinetDoc* pDoc = GetDocument();
LOGFONT lf;
CFont hFont,* pOldFont ;
pDoc->MakeLogFont(&lf,0,2,18);
hFont.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&hFont);
// Print a page header consisting of the name of
// the document and a horizontal line
// Draw a line across the page, below the header
TEXTMETRIC textMetric;
pDC->GetTextMetrics(&textMetric) ;
int y = -20 - textMetric.tmHeight; // line 1/10th inch below text
pDC->MoveTo(0, y); // from left margin
pDC->LineTo(pInfo->m_rectDraw.right, y); // to right margin
// Subtract out from the drawing rectange the space used by the header.
y -= 25; // space 1/4 inch below (top of) line
pInfo->m_rectDraw.top += y ;
pDC->SelectObject(pOldFont);
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::SetPageSize(CSize size)
{
CFoodNutrinetDoc* pDoc = GetDocument();
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::OnDraw(CDC* /*pDC*/)
{
CFoodNutrinetDoc* pDoc = GetDocument();
}
/////////////////////////////////////////////////////////////////////////////
void Vew2_Form::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CFoodNutrinetDoc* pDoc = GetDocument();
if (pInfo != NULL && pInfo->m_bPreview){
CString strHeader=_T("");
PrintPageHeader(pDC, pInfo, strHeader);
pDC->SetWindowOrg(pInfo->m_rectDraw.left,-pInfo->m_rectDraw.top);
}
}