// PrintSDIView.cpp : implementation of the CPrintSDIView class // #include "stdafx.h" #include "PrintSDI.h" #include "PrintSDIDoc.h" #include "PrintSDIView.h" #include "faxdlg.h" #include #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(); }