31 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM61 Kỹ thuật in của MFC Chọn option hỗ trợ in trong AppWizard Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM62 Kỹ thuật in của MFC Ứng dụng đơn giản cóhỗtrợ Print vàPrint Preview của MFC 32 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM63 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,… Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM64 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 kết thúc print job. Giải phóng các tài nguyên OnEndPrinting() Được gọi để thực hiện in mỗi trang. In Header, Footer,…vàgọi đến hàm OnDraw để in phần chính của trang OnPrint() Được gọi trước khi in mỗi trang. Thay đổi tính chất của Printer DC OnPrepareDC() Được gọi trước khi việc in bắt đầu. Định nghĩa các tài nguyên sử dụng cho việc in (Font, Brush,…) OnBeginPrinting() Được gọi khi bắt đầu print job. Xác định số trang in;… OnPreparePrinting() 33 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM66 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); 34 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM67 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 in Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM68 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); } 35 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM69 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 nhau Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM70 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->GetDeviceCaps(VERTRES); int originY = pageHeight * (pInfo->m_nCurPage -1); pDC->SetViewportOrg(0, -originY); } CView::OnPrepareDC(pDC, pInfo); } 36 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM71 Kỹ thuật in của MFC -In trên nhiều trang…(tt) Dùng ClassWizard định nghĩa lại hàm OnPrepareDC Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM72 Kỹ thuật in của MFC -In trên nhiều trang…(tt) Các hình chữ nhật đã hiển thị đúng trên nhiều trang 37 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM73 Cám ơn -Hỏi & Đáp . 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM63 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. 31 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM61 Kỹ thuật in của MFC Chọn option hỗ trợ in trong AppWizard Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM62 Kỹ. -(i+1)*120+20); 34 Summer 2004C4W -GDI -Nguyen Tri Tuan -DH.KHTN Tp.HCM67 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 in Summer 2004C4W -GDI -Nguyen Tri