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 personnalisée


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Bon, le seul problème qui reste, c'est en fait le redessin des images en mode Preview : en effet, si je veux me servir de la fenêtre de Preview, il faut que je ferme la boîte d'impression. Mais quand celle-ci est fermée, les images ne peuvent plus se redessiner.

    Cela pose un problème pour :
    - la trace laissée par la boîte avant que celle-ci soit fermée
    - toutes les options de la fenêtre de Preview (page suivante, précédente, zoom, etc.) En effet, à la moindre de ces opérations, les images disparaissent!!!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CMyPrintDlg::OnPrintPreview()
    {
    	UpdatePreviewPrintStructure(); //envoie à la vue les paramètres fixés dans la boîte d'impression
    	PostMessage(WM_COMMAND,ID_FILE_PRINT_PREVIEW);
    	PostMessage(WM_COMMAND,IDCANCEL); //fermer la boîte d'Impression(modale) pour accéder à la fenêtre de Preview
    }

  2. #2
    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,
    j'ai pas tout suivi mais pourquoi tu ne fais pas un EndDialog(IDCANCEL) dans ta boite d'edition ?
    et le postmessage je le ferais aussi a ce moment la en recuperant un pointeur sur la view .
    pourquoi les images ne peuvent plus se redessiner ?
    ça veut dire que dans ce contexte tu as un probleme dans la fonction ondraw.
    c''est tarabiscoté tout ça

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par farscape
    Pourquoi tu ne fais pas un EndDialog(IDCANCEL) dans ta boite d'edition ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void CMyPrintDlg::OnPrintPreview()
    {
    	UpdatePreviewPrintStructure();
    	EndDialog(IDCANCEL); //ça plante que ce soit situé ici ou après le PostMessage.
    	PostMessage(WM_COMMAND,ID_FILE_PRINT_PREVIEW);	
    	//PostMessage(WM_COMMAND,IDCANCEL); //fermer la boîte d'Impression(modale) pour accéder à la fenêtre de Preview
    }
    Donc pour fermer la boîte ça marchait pas; c'est pas grave, le PostMessage convient très bien.


    Citation Envoyé par farscape
    ça veut dire que dans ce contexte tu as un probleme dans la fonction OnDraw.
    Dans OnPrint en l'occurence mais tu as parfaitement raison, le voilà le souci que je trouvais pas :

    J'avais écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
    for(i=0; i<print.nb_images_per_page; i++)
    	{
    		if(print.cur_image_print>print.nb_images_to_print-1)
    			return;	
     
    //affichage de chaque image print.cur_image_print dans la page
    print.cur_image++;
    }
    CView::OnPrint(pDC, pInfo);
    }
    Et donc si c'était valable quand on ne fait qu'un passage, ce n'est plus valable quand on n'arrête pas d'y repasser pour redessiner
    Donc voilà à la place :

    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
     
    OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
    if (pInfo->m_bPreview)
    		print.cur_image_print = (pInfo->m_nCurPage-1)*print.nb_images_per_page;
    for(i=0; i<print.nb_images_per_page; i++)
    	{
    		if(print.cur_image_print>print.nb_images_to_print-1)
    			return;	
     
    //affichage de chaque image print.cur_image_print dans la page
    print.cur_image++;
    }
    CView::OnPrint(pDC, pInfo);
    }
    Et là tout va bien!!


    Une DERNIERE question pour la route (parce qu'évidemment, rien n'est jamais parfait, je sais, ça fait 500 fois que je dis que c'est la dernière)

    Il semblerait que la fonction OnPrint ne "court-circuite" pas totalement la fonction OnDraw :
    en effet, bien que je dessine les images que je dis de dessiner dans OnPrint, il y a en plus dans le coin supérieur gauche l'image que j'ai à l'écran (dessinée par OnDraw donc) qui se superpose.
    C'est valable pour chaque page imprimée

  4. #4
    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
    normal,
    je te renvois a la faq:
    http://c.developpez.com/faq/vc/?page...HowToPrintView
    voir definition de OnPrint...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    C'est con pourtant, si on décide de créer une fonction OnPrint pour dessiner autre chose, c'est bien pour court-circuiter la fonction OnDraw pourtant.
    Enfin ça doit avoir des raisons que j'ignore.

    Du coup dans OnDraw, je rajoute
    if(pDC->IsPrinting())
    return;

    Et bien voilà : THE END.

    Un énorme merci pour ta patience!!!!!

  6. #6
    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 stof
    C'est con pourtant, si on décide de créer une fonction OnPrint pour dessiner autre chose, c'est bien pour court-circuiter la fonction OnDraw pourtant.
    Enfin ça doit avoir des raisons que j'ignore.

    Du coup dans OnDraw, je rajoute
    if(pDC->IsPrinting())
    return;

    Et bien voilà : THE END.

    Un énorme merci pour ta patience!!!!!
    ben non c'est logique ,si tu as lu la faq OnPrint c'est pour completer le traitement du dessin de Ondraw ,classiquement on s'en sert pour mettre les numéros de page,date ,heure etc...
    bon a part ça
    c'est finit !

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [PR-2010] Impression Personnalisable Gantt
    Par vnct01 dans le forum Project
    Réponses: 4
    Dernier message: 09/08/2012, 18h13
  2. l'impression personnalisée par MFC
    Par rgimilio dans le forum MFC
    Réponses: 2
    Dernier message: 05/02/2010, 21h31
  3. Bouton d'impression personnalisée
    Par Herman dans le forum IHM
    Réponses: 1
    Dernier message: 03/07/2007, 11h36
  4. impression personnalisée de DIV
    Par nicerico dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2007, 11h28

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