Click here to Skip to main content
15,895,746 members
Articles / Web Development / HTML

Printing Framework

Rate me:
Please Sign up or sign in to vote.
3.77/5 (10 votes)
22 Nov 20032 min read 65.1K   3.3K   28  
Simple framework for text and graphic Printing/Previewing
/*! 
 *********************************************************************
 * \file       : PrinterAbstract.h
 *
 *  \b Package : dll Printer
 *
 *  \b Author  : Thomas Montembault, Code bas� sur un article                             
 *
 *	\b Date		: 15/03/02
 *
 *  \b Objet   : Un objet qui regroupe le canevas commun � une impression
 *						graphique et � une impression texte.
 *
 *
 *********************************************************************
 * \par Version History:
 *
 *		@li  V 0.10  15.03.02  Cr�ation 
 *		@li  V 0.20  24.03.02  Clarification du r�le de la classe commune pour
 *													 impression texte / impression graphique
 *		@li  V 0.30  24.03.02  Fixation des signatures des m�thodes d'impression
 *		@li  V 0.40  05.04.02  Ajout du support de la pr�visualisation 'hors passage'
 *													 des MFC.
 *		@li  V 0.20  10.05.02  Ajout des m�thodes de personalisation (Margin, size, etc..)
 *		@li  V 0.20  10.05.02  D�finition d'un header et footer par d�fault =>											
 *															void PrintPageHeader(CDC *pDC, CPrintInfo *pInfo);
 *															void PrintPageFooter(CDC *pDC, CPrintInfo *pInfo);
 *		@li  V 0.30  16.04.02  DocTextation
 *
 *********************************************************************
 *
 */
#ifndef AFX_PRINTERABSTRACT_H__E3E10A6D_2564_4DD0_8517_DC254B4749E9__INCLUDED_
#define AFX_PRINTERABSTRACT_H__E3E10A6D_2564_4DD0_8517_DC254B4749E9__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ExportPrinter.h"
#include "PrinterXcpt.h"
#include "DataPrint.h"

namespace printer {

//! Code commum � une impression texte et � une impression graphique.
/*! La classe regroupe le framework commun utilis� pour obtenir une impression 
	texte et une impression graphique.
*/
class _PRINTER_DLLAPI CPrinterAbstract  
{
	friend class CViewPrintPreview;  /*!< Pour initialiser les 'private' de la pr�visualisation */
public:

	/*! \par Objet :
		Constructeur
		\warning A cause du linkage dans la dll (???) , il faut un constructeur 
		malgr�s les virtuelles pures...
	*/
	CPrinterAbstract(UINT IDR_MENU);

	/*! \par Objet :
		Destructeur 
	*/
	virtual ~CPrinterAbstract();

//@{
/*! \name Impression et Pr�visualisation
//
//		Les m�thodes suivantes doivent �tre appel�es sur les messages,
//	ID_FILE_PRINT_DIRECT, ID_FILE_PRINT et ID_FILE_PRINT_PREVIEW.		
//*/

	/*! \par Objet :
		Affichage de la bo�te d'impression standard et impression de la fen�tre.
	*/
	void Print();
  
	/*! \par Objet :
		Pr�visualisation de la fen�tre.
	*/
	void Preview();

//@}

//@{
/*! \name Personnalisation de l'impression
//
//		Les m�thodes suivantes permettent de configurer l'impression et
//	la bo�te de dialogue associ�e.
//*/

	/*! \par Objet :
		Sp�cification de la fen�tre de travail
		\param pWnd : Un pointeur sur la fen�tre � imprimer ou recopier
	*/
	void  SetWindow(CWnd* pWnd); 

	/*! \par Objet :
		Sp�cification du nom du job dans la file d'impression
		\param lpszTitleDoc : Le titre du docText dans la file d'impression
	*/
	void SetTitleDoc(LPCTSTR lpszTitleDoc);

	/*! \par Objet :
		Sp�cification des marges. Il s'agit de marges supl�mentaires en plus de 
		celles physiques impos�es par le support. Elles sont exprim�es en nombre de 
		caract�res moyens.
		\param nLeft : marge gauche
		\param nTop	 : marge haute
		\param nRight : marge droite
		\param nBottom : marge basse
	*/
	void SetMargins(int nLeft, int nTop, int nRight, int nBottom);

	
	/*! \par Objet :
		Sp�cification de la premi�re page apparaissant dans le dialogue d'impression.
		\param nPage : Le num�ro de la page
	*/
	void SetMinPage(int nPage);

	/*! \par Objet :
		Sp�cification de la derni�re page apparaissant dans le dialogue d'impression.
		\param nPage : Le num�ro de la page
	*/
	void SetMaxPage(int nPage);

	/*! \par Objet :
		Sp�cification de la taille de la police utilis�e pour l'impression.
		\param nSize : La taille de la police
		\warning Cette taille intervient �galement pour le calcul des marges, hauts
		et bas de pages : ils s'expriment en nombre de caract�res moyens.
	*/
	void SetPoliceSize(int nSize);

	/*! \par Objet :
		Accesseur 
		\return Le nom du job dans la file d'impression
	*/
	LPCTSTR GetTitleDoc() const;
//@}

//@{
/*! \name Ent�te et bas de page
//
//		D�finition de du bas et du haut de page.
//*/
	
	/*! \par Objet :
		Pour chaque page, Impression de l'ent�te. 
	
		Le principe de fonctionnement est le suivant : OnPrint est charg�e de 
		l'impression de la page courante, elle se contente d'un appel aux 3 m�thodes
		virtuelles, PrintPageHeader, PrintPageFooter et PrintPage (m�thode retard�e).
		
		PrintPageHeader propose une impl�mentation par d�faut qui utilise une marge
		haute de 2  caract�res. L'ent�te se compose simplement du titre donn� par 
		SetTitleDoc et d'une ligne de s�paration.
		\param pPrinter : Un pointeur sur l'objet charg� de l'impression
		\param pDC : Un pointeur sur le  contexte (�cran ou imprimante)
		\param pInfo : Un pointeur sur les param�tres d'impression
	*/
	virtual void PrintPageHeader(CPrinterAbstract* pPrinter, CDC *pDC, CPrintInfo *pInfo);

	/*! \par Objet :
		Pour chaque page, Impression du bas de page. 
	
		Le principe de fonctionnement est le suivant : OnPrint est charg�e de 
		l'impression de la page courante, elle se contente d'un appel aux 3 m�thodes
		virtuelles, PrintPageHeader, PrintPageFooter et PrintPage (m�thode retard�e).
		
		PrintPageFooter propose une impl�mentation par d�faut qui utilise une marge
		basse de 2 caract�res. Le bas de page se compose simplement d'une ligne de 
		s�paration suivi par le nombre page � gauche et la date d'impression � 
		droite.

		\param pPrinter : Un pointeur sur l'objet charg� de l'impression
		\param pDC : Un pointeur sur le contexte (�cran ou imprimante)
		\param pInfo : Un pointeur sur les param�tres d'impression
	*/
	virtual void PrintPageFooter(CPrinterAbstract* pPrinter, CDC *pDC, CPrintInfo *pInfo);
//@}

//@{
/*! \name Utilitaires pour surcharge Header & Footer ...
//*/

	/*! \par Objet :
		Accesseur 
		\return Un pointeur sur la fen�tre � imprimer.
	*/
	CWnd* GetWindow() const;
	

	/*! \par Objet :
		Accesseur
		\return La page courante sous la forme ; "page nCur/nMax"
	*/
	CString GetPage(CPrintInfo *pInfo );

	/*! \par Objet :
		Accesseur
		\return La date syst�me.
	*/
	CString GetDate (void);

	/*! \par Objet :
		Accesseur
		\return La structure SDataPrint associ�e � l'objet d'impression.
	*/
	SDataPrint* GetDataPrint();

	/*! \par Objet :
		Accesseur 
		\param value : Un bool�en qui indique si l'impression
		a lieu depuis l'aper�u.
	*/
	void SetPrintFromPreview(bool value);

	/*! \par Objet :
		Cr�ation d'une police.
		\param pFont : Un pointeur sur la police a cr��
		\param pDC : Un pointeur sur le contexte
		\param size : La taille de la police
		\param nWeight : La graisse de la police
	*/
	void InitFont(CFont* pFont, CDC* pDC, int size, int nWeight);
//@}

protected:

//@{
/*! \name Encapsulation du framework MFC
//
//		Les m�thodes suivantes ont la m�me signature et la m�me signification
//	que celles de CView. Print et Preview ont �t� r��crites pour utiliser ces
//	m�thodes.
//*/
	
	/*! \par Objet :
		Calcul du nombre de pages, Initialisation du contexte.
		\param pInfo : Un pointeur sur le param�trage du contexte
		\exception  NON
	*/
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo)=0;

	/*! \par Objet :
		Initialisation du contexte suite. 
		\param pDC : Un pointeur sur le contexte
		\param pInfo : Un pointeur sur le param�trage du contexte d'impression
		\exception  OUI
	*/
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)=0;

	/*! \par Objet :
		Impression de la page courante. Elle se contente d'un appel aux 3 m�thodes 
		virtuelles, PrintPageHeader, PrintPageFooter et PrintPage (m�thode retard�e).
		\param pDC : Un pointeur sur le contexte 
		\param pInfo : Un pointeur sur le param�trage du contexte 
		\exception  OUI
	*/
	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
	
	/*! \par Objet :
		Impression de la partie utilisateur de la page courante. Elle est appel�e 
		par OnPrint apr�s les appels de PrintPageHeader et PrintPageFooter.
		\param pDC : Un pointeur sur le contexte d'impression.
		\param pInfo : Un pointeur sur le param�trage du contexte d'impression
		\exception  OUI
	*/
	virtual void PrintPage(CDC *pDC, CPrintInfo *pInfo) = 0;

	/*! \par Objet :
		Nettoyage du contexte d'impression et lib�ration des ressources.
		\param pDC : Un pointeur sur le contexte d'impression.
		\param pInfo : Un pointeur sur le param�trage du contexte d'impression
		\exception  OUI
	*/
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)=0;
//@}



private:

	/*! \par Objet :
		Accesseur
		\return Le num�ro de la premi�re page � imprimer.
	*/
	int GetMinPage() const;

	/*! \par Objet :
		Accesseur
		\return Le num�ro de la derni�re page � imprimer.
	*/
	int GetMaxPage() const;

	int m_nMinPage;										/*!< Le nombre minimum de page */	
	int m_nMaxPage;										/*!< Le nombre maximum de page */
	CWnd* m_pWnd;											/*!< Un pointeur sur la fen�tre � copier */
	CString m_strTitleDoc;						/*!< Le titre du job dans la file d'impression */
	CSingleDocTemplate*	m_pTemplate;	/*!< DocTemplate pour construire une nouvelle vue de pr�visualisation */
	UINT m_IDR_MENU;									/*!< La ressource �quivalent � IDR_MAINFRAME (128 g�n�ralement) */
	CPrinterXcpt m_exceptInPrintPreview; /*!< Un objet pour r�cup�rer une exception */ 
	SDataPrint m_dataPrint;						/*!< Une structure SDataPrint */
	bool m_bPrintFromPreview;					/*!< Marquer le passage Preview -> Print */
};

}
#endif // !defined(AFX_PRINTERABSTRACT_H__E3E10A6D_2564_4DD0_8517_DC254B4749E9__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions