windows-nt/Source/XPSP1/NT/printscan/fax/samples/printsdi/printsdivw.cpp
2020-09-26 16:20:57 +08:00

179 lines
4.1 KiB
C++

// PrintSDIView.cpp : implementation of the CPrintSDIView class
//
#include "stdafx.h"
#include "PrintSDI.h"
#include "PrintSDIDoc.h"
#include "PrintSDIView.h"
#include "faxdlg.h"
#include <winfax.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView
IMPLEMENT_DYNCREATE(CPrintSDIView, CView)
BEGIN_MESSAGE_MAP(CPrintSDIView, CView)
//{{AFX_MSG_MAP(CPrintSDIView)
ON_COMMAND(ID_FILE_FAX, OnFileFax)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView construction/destruction
CPrintSDIView::CPrintSDIView()
{
// TODO: add construction code here
}
CPrintSDIView::~CPrintSDIView()
{
}
BOOL CPrintSDIView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView drawing
void CPrintSDIView::OnDraw(CDC* pDC)
{
CPrintSDIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(rect);
pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(rect.right/2, 3*rect.bottom/4,pDoc->m_szText);
CRect rect2( (rect.right-rect.left)/4 ,
(rect.top),
3*(rect.right-rect.left)/4,
(rect.bottom)/2);
POINT pnt = {rect2.right/2,rect2.top};
switch (pDoc->m_polytype) {
case 0:
//circle
pDC->Arc(rect2,pnt,pnt);
break;
case 1:
//sqare
pDC->MoveTo(rect2.left,rect2.top);
pDC->LineTo(rect2.right,rect2.top);
pDC->LineTo(rect2.right,rect2.bottom);
pDC->LineTo(rect2.left,rect2.bottom);
pDC->LineTo(rect2.left,rect2.top);
break;
case 2:
//triangle
pDC->MoveTo(rect.right/2,rect2.top);
pDC->LineTo(rect2.left,rect2.bottom);
pDC->LineTo(rect2.right,rect2.bottom);
pDC->LineTo(rect.right/2,rect2.top);
break;
default:
pDC->Arc(rect2,pnt,pnt);
}
CString dbg;
dbg.Format(TEXT("%d %d %d %d\n"),rect2.left, rect2.top, rect2.right, rect2.bottom);
OutputDebugString(dbg);
}
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView printing
BOOL CPrintSDIView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CPrintSDIView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CPrintSDIView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView diagnostics
#ifdef _DEBUG
void CPrintSDIView::AssertValid() const
{
CView::AssertValid();
}
void CPrintSDIView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CPrintSDIDoc* CPrintSDIView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPrintSDIDoc)));
return (CPrintSDIDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPrintSDIView message handlers
void CPrintSDIView::OnFileFax()
{
FaxDlg dlg;
dlg.DoModal();
FAX_CONTEXT_INFO FaxContextInfo;
FAX_PRINT_INFO FaxPrintInfo = {0};
DWORD JobId;
FaxContextInfo.SizeOfStruct = sizeof(FAX_CONTEXT_INFO);
FaxPrintInfo.SizeOfStruct = sizeof(FAX_PRINT_INFO);
FaxPrintInfo.RecipientNumber = dlg.m_FaxNumber.GetBuffer(MAX_PATH);
FaxPrintInfo.RecipientName = dlg.m_RecipientName.GetBuffer(MAX_PATH);
// use the default FAX printer
if (!FaxStartPrintJob(NULL,&FaxPrintInfo,&JobId,&FaxContextInfo) ) {
CString dbg;
dbg.Format(_T("FaxStartPrintJob failed, ec = %d\n"),GetLastError() );
AfxMessageBox(dbg);
return;
}
// print the document
CDC dc;
dc.Attach(FaxContextInfo.hDC);
OnDraw(&dc);
dc.EndDoc();
}