Thông tin tài liệu:
MFC framework tích hợp sẵn kỹ thuật in ấn, thực hiện phần lớn các công việc; giúp người lập trình tiết kiệm rất nhiều công sức và loại bỏ nhiều sự phức tạp như khi sử dụng Windows SDK động tạo và xóa Printer DC
Nội dung trích xuất từ tài liệu:
Lập trình Windows Thư viện đồ họa GDI (phần 4) Kỹ thuật in của MFC Chọn option hỗ trợ in trong AppWizardC4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 61 Kỹ thuật in của MFC Ứng dụng đơn giản có hỗ trợ Print và Print Preview của MFCC4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 62 31 Kỹ thuật in của MFC - Tổng quan Giới thiệu® MFC framework tích hợp sẵn kỹ thuật in ấn, § thực hiện phần lớn các công việc; giúp người lập trình tiết kiệm rất nhiều công sức và loại bỏ nhiều sự phức tạp như khi sử dụng Windows SDK ® Tự động tạo và xóa Printer DC ® Tự động gọi StartDoc/EndDoc, StartPage/EndPage ® Hỗ trợ hộp thoại theo dõi trạng thái của print job; khả năng hủy bỏ in (Abort procedure) ® Khả năng Print Preview,…C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 63 Kỹ thuật in của MFC - Tổng quan…(tt) Giới thiệu…(tt)® Các hàm quan trọng của CView liên quan đến in ấn § Được gọi khi bắt đầu print job. OnPreparePrinting() Xác định số trang in;… Được gọi trước khi việc in bắt đầu. OnBeginPrinting() Định nghĩa các tài nguyên sử dụng cho việc in (Font, Brush,…) Được gọi trước khi in mỗi trang. OnPrepareDC() Thay đổi tính chất của Printer DC Được gọi để thực hiện in mỗi trang. OnPrint() In Header, Footer,… và gọi đến hàm OnDraw để in phần chính của trang Được gọi khi kết thúc print job. OnEndPrinting() Giải phóng các tài nguyênC4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 64 32 Kỹ thuật in của MFC - In trên nhiều trang Tạo 1 ứng dụng bằng MFC AppWizard với các® options Single Document và Print and Print Preview Thêm đoạn lệnh sau vào hàm® CxxxView::OnDraw // Chuyển đổi 1 pixel = 1/100 inch pDC->SetMapMode(MM_LOENGLISH); // m_numRects: s ố hình chữ nhật muốn vẽ // W = H = 100 pixel, kho ảng cách 20 pixel for (int i=0; i < m_numRects; i++) pDC->Rectangle(0, -i*120, 100, -(i+1)*120+20);C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 66 33 Kỹ thuật in của MFC - In trên nhiều trang…(tt) Các hình chữ nhật không hiển thị đúng trên nhiều trang inC4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 67 Kỹ thuật in của MFC - In trên nhiều trang…(tt) Các bước thực hiện để in nhiều trang® B1. Thông báo cho MFC biết số trang cần in § void CxxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) { CxxxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); int pageHeight = pDC->GetDeviceCaps(VERTRES); int logPixelsY = pDC->GetDeviceCaps(LOGPIXELSY); int rectHeight = (int)(1.2 * logPixelsY); int numPages = pDoc->m_numRects*rectHeight/pageHeight + 1; pInfo->SetMaxPage(numPages); }C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 68 34 Kỹ thuật in của MFC - In trên nhiều trang…(tt) Các hình chữ nhật đã hiển thị trên nhiều trang in, nhưng nội dung các trang giống hệt nhauC4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 69 Kỹ thuật in của MFC - In trên nhiều trang…(tt) Các bước thực hiện để in nhiều trang…(tt)® B2. Định nghĩa lại hàm CxxxView::OnPrepareDC § void CxxxView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { if (pDC->IsPrinting()) { int pageHeight = pDC->Ge ...