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 :

DC dans OnPreparePrinting


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 91
    Par défaut DC dans OnPreparePrinting
    est-il possible de récupérer un pDC de l'imprimante par défaut dans OnPreparePrinting d'une CView?
    La méthode ne renvoie que CPrintInfo et le code suivant ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       CDC dc;
       AfxGetApp()->CreatePrinterDC(dc);
        if (!dc.m_hDC)
        {
            TRACE("Failed to get printer DC\n");
            return FALSE;
        }
        dc.SaveDC();

  2. #2
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Si tu veux utiliser le CDC avant l'impression. Utilise le dans OnBeginPrinting()

  3. #3
    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,
    dans OnPreparePrinting le dc est accessible comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ASSERT(pInfo->m_pPD->m_pd.hDC != NULL);
    CDC *pdc = CDC:: FromHandle(pInfo->m_pPD->m_pd.hDC);

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 91
    Par défaut
    le hDC est aussi égal à NULL avec cette méthode.
    En fait j'ai besoin du DC dans OnPreparePrinting pour pouvoir calculer le nombre de pages et ainsi pouvoir l'afficher dans la boite de dialogue de l'impression.
    Lorsqu'on clique sur le bouton print, l'ordre d'appel des fonctions est le suivant :
    - OnPreparePrinting
    - Affichage de la dialogue d'impression
    - OnBeginPrinting
    Il me faut donc faire le calcul dans OnPreparePrinting pour pouvoir initaliser pInfo->SetMaxPage()

  5. #5
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Comment te serts-tu du DC pour calculer le nombre de page :
    Le seul endroit possible où tu as un DC valide avant l'impression est dans OnBeginPrinting().

    Est-tu sûr que tu peux déterminer le nombre de pages? Si ce n'est pas le cas tu peux imprimer les pages au fur et à mesure en fixant soigneusement le membre CPrintInfo::m_ContinuePrinting à TRUE à moins que tu sache détecter la fin du document pour le fixer à FALSE.
    Ce paramêtre, tu le fixes dans OnPrepareDC()

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 91
    Par défaut
    Voici ce que je fais dans OnBeginPrinting
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	CRect rcStr;
    	pDC->DrawText(str, rcStr, DT_CALCRECT);
     
    	pg.iTextHeight = rcStr.Height();
    	pg.iPageHeight = pDC->GetDeviceCaps(VERTRES) - 4 * (rcStr.Height() + 6);
    Ca me permet de calculer le decoupage des bitmaps que j'imprime.
    Mais si je veux pouvoir donner le nombre de pages à la boite de dialogue d'impression, il faut que je le fasse dans OnPreparePrinting.
    D'où ma question, comment récupérer un CDC valide dans OnBeginPrinting?

  7. #7
    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
    essaye la chose suivante:
    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
     
    CWinApp* pApp = AfxGetApp();
    if (pInfo->m_pPD->m_pd.hDC == NULL)
    {
      if(!pApp->GetPrinterDeviceDefaults(&pInfo->m_pPD->m_pd))
      {
    	return FALSE;
      }
      if (pInfo->m_pPD->m_pd.hDC == NULL)
      {
         if (pInfo->m_pPD->CreatePrinterDC() == NULL)
    		return FALSE;
      }
    }
    ASSERT(pInfo->m_pPD->m_pd.hDC != NULL);
    CDC *pdc = CDC:: FromHandle(pInfo->m_pPD->m_pd.hDC);

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 91
    Par défaut
    Génial, ça marche!!!!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  2. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  3. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59

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