IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Impression et MFC


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 41
    Par défaut Impression et MFC
    Salut à tous,

    Pour mon application qui se base sur une boite de dialogue, j'aimerais savoir commentt je peux faire une impression d'un document (par listing des différentes données de mon application).

  2. #2
    Membre averti
    Homme Profil pro
    Responsable Service Informatique Industrielle
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable Service Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Salut,
    Que veux-tu exactement imprimer ?
    Veux-tu faire une mise en forme de certaines données saisies via ton dialogue et les imprimer, ou bien imprimer l'image de ton dialogue ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 41
    Par défaut
    Imprimer des données saisies dans ma boite de dialogue

  4. #4
    Membre averti
    Homme Profil pro
    Responsable Service Informatique Industrielle
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable Service Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Comme ton appli n'est pas basée sur une architecture Doc/View, tu ne peux pas compter sur les MFC pour gérer l'impression. Il faut que tu fasses tout toi-même. Mais ce n'est pas (trop) compliqué.

    Tu peux aller voir l'article ci-dessous, son auteur est très compétent et digne de confiance.

    http://www.codeproject.com/printing/...wo_docview.asp

    En t'inspirant du code présenté dans l'article, il ne te reste qu'à implémenter la méthode OnPrint() dans laquelle tu vas simplement construire ton impression (créer ta mise en page, présenter tes données).

    Si tu as encore des questions, n'hésite pas !

    Valdeub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 41
    Par défaut
    A propos de mise en page, y a-t-il, une documentation assez correcte pour faire de la présentation avec la classe CDC?

  6. #6
    Membre averti
    Homme Profil pro
    Responsable Service Informatique Industrielle
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable Service Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Je pense à la documentation MFC de MSDN
    (http://msdn.microsoft.com/library/de...ss_members.asp),
    aux bouquins spécialisés MFC, et aux nombreux tutoriels qui doivent exister sur le sujet (à voir dans la partie Cours et Tutoriels peut être ...).

    Ca dépend de ce que tu veux faire. Les bases étant :
    - le texte: TextOut(), DrawText() ...
    - les lignes: MoveTo(), LineTo() ...
    - les rectangles, ellipses, ...
    - les bitmaps,...
    - ...

    il y a de quoi faire ...

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par valdeub
    Comme ton appli n'est pas basée sur une architecture Doc/View, tu ne peux pas compter sur les MFC pour gérer l'impression. Il faut que tu fasses tout toi-même. Mais ce n'est pas (trop) compliqué.

    Valdeub
    ????
    Bien sûr que si !
    Il suffit de gérer le HDC de la boite de dialogue

  8. #8
    Membre averti
    Homme Profil pro
    Responsable Service Informatique Industrielle
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable Service Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Citation Envoyé par mat.M
    Citation Envoyé par valdeub
    Comme ton appli n'est pas basée sur une architecture Doc/View, tu ne peux pas compter sur les MFC pour gérer l'impression. Il faut que tu fasses tout toi-même. Mais ce n'est pas (trop) compliqué.

    Valdeub
    ????
    Bien sûr que si !
    Il suffit de gérer le HDC de la boite de dialogue
    Je n'ai peut être pas été très clair...
    J'entends par "tu ne peux pas compter sur les MFC pour gérer l'impression" le fait que tu ne puisses pas t'appuyer sur les méthodes de la classe CView comme par exemple OnPreparePrinting(), OnBeginPrinting(), OnPrint(), et OnEndPrinting(), qui simplifient énormément les choses !

    Citation Envoyé par mat.M
    Il suffit de gérer le HDC de la boite de dialogue
    Arrète-moi si je me trompe, mais il me semble que pour imprimer, il faut utiliser le DC lié à l'imprimante ... donc je ne vois pas trop à quoi va te servir le DC de ta boite de dialogue si ce n'est à dessiner dans ton dialogue.
    A moins que le dialogue dont tu parles soit du type CPrintDialog ou bien le dialogue obtenu via un PrintDlg(); auquel cas cela revient exactement à la méthode que j'ai indiquée à BigBeni.

    Mais tu as sans doute raison, ma formulation était malhabile ... et ta réponse somme toute justifiée ...

  9. #9
    mat.M
    Invité(e)
    Par défaut
    Arrète-moi si je me trompe, mais il me semble que pour imprimer, il faut utiliser le DC lié à l'imprimante .
    oui mais on peut l'obtenir par certaines API
    oui c'est vrai c'est pas géré directement par MFC peut-être il faut passer par les API win32 mais MFC c'est API win32+ alors

  10. #10
    Membre averti
    Homme Profil pro
    Responsable Service Informatique Industrielle
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable Service Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    On va dire comme ça !

    PS: je te souhaite une journée plus ensoleillée que celle que nous avons eue ici !!!

  11. #11
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par valdeub
    On va dire comme ça !

    PS: je te souhaite une journée plus ensoleillée que celle que nous avons eue ici !!!
    Merci
    Ici à Montréal le ciel est dégagé; par contre il doit faire -5 dehors

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    un petit exemple d'impression independante du context doc/view:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    void CTestDlgDlg::PrintDoc()
    {
     
    	CDC             dc;
        CPrintDialog    printDlg(FALSE);
     
        // selection de l'imprimante.
        if (printDlg.DoModal() == IDCANCEL)   return;
     
     
        dc.Attach(printDlg.GetPrinterDC()); 
     
        dc.m_bPrinting = TRUE; // dc d'impression.
     
        // titre du document = titre application
        CString strTitle="mon document";   
     
        DOCINFO di;
        ::ZeroMemory (&di, sizeof (DOCINFO));
     
        di.cbSize = sizeof (DOCINFO);   
        di.lpszDocName = strTitle;
     
        // debut d'impression
        if(dc.StartDoc( &di )<0)
        {     
    		MessageBox(_T("Erreur d'initialisation de l'imprimante"));
    		return;
    	}
     
    	// demarre une page
    	if (dc.StartPage()< 0)
    	{
    		MessageBox(_T("Impossible de demarrer la page"));
    		dc.AbortDoc();
    		return;
    	}             
     
        // recuperation de la surface d'impression
        CRect rectDraw;
        rectDraw.SetRect(0, 0,
            dc.GetDeviceCaps(HORZRES),
            dc.GetDeviceCaps(VERTRES));        
     
    	// recuperation eventuelle des marges d'impressions
    	//static POINT ptmargins;
    	//dc.Escape(GETPRINTINGOFFSET, 0, NULL, &ptmargins);	
     
    	 CFontEx FontEx;
     
    	 FontEx.GetFont(13,"Arial Bold");
     
    	 CFont* pOldFont = dc.SelectObject(&FontEx);
     
    	 CString strTxt=_T("Salut Bienvenue chez DVP !");
     
    	 CSize size=dc.GetTextExtent( strTxt);
     
         dc.TextOut((rectDraw.Width()-size.cx)/2, (rectDraw.Height()-size.cy)/2,strTxt);
     
         dc.EndPage(); // fin de la page a repeter donc pour chage page.
     
         dc.EndDoc();  // fin du document
     
         dc.SelectObject(pOldFont); 
     
    }
    la classe CFontEx est dans la faq on la trouve aussi dans :
    http://farscape.developpez.com/Sampl...tomListBox.zip

    donc pour chaque page : StartPage / EndPage()
    le reste etant de la manipulation de GDI sur une surface de travail.

  13. #13
    mat.M
    Invité(e)
    Par défaut
    Farscape c'est bien mais je crois que tu as lu trop vite : c'est pour une CDialog pas une CView

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par mat.M
    Farscape c'est bien mais je crois que tu as lu trop vite : c'est pour une CDialog pas une CView
    ben non c'est pour imprimer quelque chose a partir d'une fenetre quelconque
    j'ai precisé:
    un petit exemple d'impression independante du context doc/view:

  15. #15
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Je me permets de faire remonter ce sujet, car j'ai une question subsidiaire.

    Comment faire le découpage en pages ? En clair, faut il faire un ou plusieurs CDC et comment procède-t-on techniquement au niveau des appels itératifs à StartPage/EndPage ?

    J'espère que ma question est assez claire

    Merci d'avance.

  16. #16
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Salut je reviens là-dessus,

    Citation Envoyé par valdeub Voir le message
    Arrète-moi si je me trompe, mais il me semble que pour imprimer, il faut utiliser le DC lié à l'imprimante ... donc je ne vois pas trop à quoi va te servir le DC de ta boite de dialogue si ce n'est à dessiner dans ton dialogue.
    Oui absolument mais il suffit de faire une "copie d'écran" de la CDialog ( un CDC en mémoire en fait ) et avec un StretchBlt copier le CDC de la CDialog vers le CDC qui représente l'imprimante


    Citation Envoyé par TheGzD Voir le message
    Je me permets de faire remonter ce sujet, car j'ai une question subsidiaire.
    Comment faire le découpage en pages ? En clair, faut il faire un ou plusieurs CDC et comment procède-t-on techniquement au niveau des appels itératifs à StartPage/EndPage ?
    J'espère que ma question est assez claire
    Merci d'avance.
    Oui la question est claire mais c'est pour quel type d'application ?
    Une appli qui dessine des graphismes ?
    Pour ce qui est de créer un ou plusieurs HDC tout dépend de ce que tu veux faire.
    Tu n'en dis pas plus.
    Un simple HDC peut suffire en délimitant la zone que l'on veuille imprimer; mais il vaut mieux redéfinir un HDC en mémoire par exemple de 100x100 qui représente une zone de découpage et copier ce HDC en mémoire vers le HDC de l'imprimante avec un StretchBlt ou BitBlt.
    Pour dessiner sur l'imprimante c'est plus complexe il faut obtenir la résolution de l'imprimante en Dot Per Inches et l'adapter à son graphique

  17. #17
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Merci pour ta réponse Mat.M.

    Voici quelques précisions :

    Je cherche à imprimer des documents constitués de texte, mais ces derniers peuvent être sujet à une certaine mise en page (il peut être issu d'un CRichEdit => formatage RTF). Cette mise en page est différente de la présentation que je fais de ces mêmes document à l'écran dans une CDialog.

    Pour chaque impression je souhaite éventuellement imprimer un cartouche d'entête en première page.

    Pour chaque document (et une impression peut en contenir plusieurs) je souhaite aussi que chacun dispose d'un cartouche.

    Évidemment je veux pouvoir imprimer à la suite plusieurs document de façon continue dans une seule impression (de plusieurs pages), et que les "raccords" entre les pages ne dégradent pas le rendu global.

  18. #18
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Bon je m'en suis à peu prêt sorti au prix de maints efforts, il n'y a rien de prémaché dans ce domaine et il faut tout penser et réaliser soi-même.

    Si quelqu'un veut quelques précisions, n'hésitez pas à me demander.

Discussions similaires

  1. [MFC] mise en page d'une impression
    Par Alice9 dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2005, 09h34
  2. [MFC] Maximiser l'impression d'une view sur feuille A4
    Par bigboomshakala dans le forum MFC
    Réponses: 10
    Dernier message: 24/11/2004, 15h58
  3. MFC Impression Direct: Problème d'échelle
    Par thealex321 dans le forum MFC
    Réponses: 8
    Dernier message: 17/11/2004, 22h54
  4. [MFC] Impression d'une boite dialogue
    Par mick74 dans le forum MFC
    Réponses: 5
    Dernier message: 03/06/2004, 10h02
  5. [MFC] Impression + Splitter
    Par Air'V dans le forum MFC
    Réponses: 3
    Dernier message: 14/12/2003, 21h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo