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 :

[MFC] imprimer un dialogue au format DIB


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Chef de projet NTIC
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par d�faut [MFC] imprimer un dialogue au format DIB
    Malheureusement pour moi le code fourni dans la FAQ ne fonctionne pas, je doit mal effectuer une tache de plus personne ne semble comprendre d'ou viens mon erreur.

    Je me suis donc tourn� vers le site codeProject et j'ai donc trouv� le code suivant :

    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
     
     
     
    void PrintBitmap(LPCTSTR filename) {
     CPrintDialog printDlg(FALSE);
     printDlg.GetDefaults(); 
     // Or get from user:
     // if (printDlg.DoModal() == IDCANCEL)   
     //        return; 
     CDC dc;
     if (!dc.Attach(printDlg.GetPrinterDC())) {
      AfxMessageBox(_T("No printer found!")); return;
     } 
     
     dc.m_bPrinting = TRUE; 
     DOCINFO di;    
     // Initialise print document details
     ::ZeroMemory (&di, sizeof (DOCINFO));
     di.cbSize = sizeof (DOCINFO);
     di.lpszDocName = filename; 
     BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 
     // Get the printing extents
     // and store in the m_rectDraw field of a 
     // CPrintInfo object
     CPrintInfo Info;
     Info.SetMaxPage(1); // just one page 
     int maxw = dc.GetDeviceCaps(HORZRES);
     int maxh = dc.GetDeviceCaps(VERTRES); 
     Info.m_rectDraw.SetRect(0, 0, maxw, maxh); 
     for (UINT page = Info.GetMinPage(); page <= 
          Info.GetMaxPage() && bPrintingOK; page++) {
      dc.StartPage();    // begin new page
      Info.m_nCurPage = page;
      CBitmap bitmap;
      // LoadImage does the trick here, it creates a DIB section
      // You can also use a resource here
      // by using MAKEINTRESOURCE() ... etc. 
      if(!bitmap.Attach(::LoadImage(
       ::GetModuleHandle(NULL), filename, IMAGE_BITMAP, 0, 0, 
       LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE))) {
        AfxMessageBox(_T("Error loading bitmap!")); return;
       } 
       BITMAP bm;
       bitmap.GetBitmap(&bm);
       int w = bm.bmWidth; 
       int h = bm.bmHeight; 
       // create memory device context
       CDC memDC; 
       memDC.CreateCompatibleDC(&dc);
       CBitmap *pBmp = memDC.SelectObject(&bitmap);
       memDC.SetMapMode(dc.GetMapMode());
       dc.SetStretchBltMode(HALFTONE);
       // now stretchblt to maximum width on page
       dc.StretchBlt(0, 0, maxw, maxh, &memDC, 0, 0, w, h, SRCCOPY); 
       // clean up
       memDC.SelectObject(pBmp);
       bPrintingOK = (dc.EndPage() > 0);   // end page
     } 
     if (bPrintingOK)
       dc.EndDoc(); // end a print job
     else dc.AbortDoc();           // abort job. 
    }
    Cette fonction me permet d'imprimer un bitmap � partir d'un chemin je suppose "LPCTSTR filename" alors en faisant fonctionner ma cervelle
    j'ai pens� � combiner le code de FARSCAPE et celui-ci afin de pouvoir reussir mon impression.

    le code de la FAQ s'effectue directement � partir du dialogue courant.
    il se compose des fonctions suivantes.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CBitmap *pBmp=CopyWindowToBitmap(this,true);
    PrintBmp(pBmp);    
    pBmp->DeleteObject();
    delete pBmp;
    or chez moi c'est la fonction PrintBmp(pBmp) qui plante donc � partir de mon dialogue je voudrais savoir si il etait possible de r�cuperer le chemin de mon dialogue courant et qu'il soit du type LPCTSTR

    voila j'espere avoir �t� assez explicite et je vous remercie d'avance pour votre aides

  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,
    tu es quand m�me incroyable , j'ai copi�/coll� le code de la faq dans un nouveau projet SDI.
    fais attention � mettre l'include en haut du source.
    puis j'ai d�clar� les fonctions indiqu�es en static .
    et fait finalement l'appel dans la formview.

    compiler/linker 0 erreurs en 3mn.

    http://farscape.developpez.com/Samples/PrintDialog.zip



  3. #3
    Membre �clair�
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Chef de projet NTIC
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par d�faut
    je te remercie pour t'etre donn� la peine de me realiser cet exemple,
    cependant en analysant ton code je vois que la classe correspondant � ta fenetre printDialogView

    est herit� de cette maniere :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    class CPrintDialogView : public CFormView

    alors que moi le dialog que je veu imprimer est de type :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    class bar_unique : public CDialog
    je sais pas trop si y a une grosse difference en tout cas j'essaye de l'adapter de la meme maniere mais j'ai encore un paquet d'erreur mais en tout cas j'aiau moin un exemple qui marche c'est deja pas mal

    en tout cas 1000 merci � toi FARSCAPE pour ton aide

  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
    et alors on s'en fout .....
    CopyWindowToBitmap accepte un CWnd * non ?
    alors CFormView ou CDialog c'est d�riv� de CWnd .

  5. #5
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par farscape
    et alors on s'en fout .....
    CopyWindowToBitmap accepte un CWnd * non ?
    alors CFormView ou CDialog c'est d�riv� de CWnd .
    Oui mais les CDialog ne fonctionnent pas comme les CView et d�riv�es.

    Une CDialog c'est en win32 ni plus ni moins qu'une classe de dialogue avec une DlgProc c.a.d une fonction de proc�dure de gestion de message ( pas tr�s compr�hensible tout ca je vous l'accorde )

    Donc pour la gestion des graphismes c'est un peu diff�rent

    donc � partir de mon dialogue je voudrais savoir si il etait possible de r�cuperer le chemin de mon dialogue courant et qu'il soit du type LPCTSTR



    GetModuleHandle

    The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process.
    To avoid the race conditions described in the Remarks section, use the GetModuleHandleEx function.
    HMODULE GetModuleHandle( LPCTSTR lpModuleName // module name);

    ou bien pour le r�pertoire sur volume
    GetCurrentDirectory
    The GetCurrentDirectory function retrieves the current directory for the current process.
    DWORD GetCurrentDirectory( DWORD nBufferLength, // size of directory buffer LPTSTR lpBuffer // directory buffer);

  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
    dans le cas pr�sent �a n'a aucune importance ,le but de cette fonction c'est de faire un bitmap de la fenetre pass�e en argument.
    la fenetre servant uniquement a obtenir les coordonn�es sur l'ecran ...

Discussions similaires

  1. [MFC] imprimer une dialogue contenant un graphique
    Par moulefrite dans le forum MFC
    R�ponses: 9
    Dernier message: 27/04/2006, 11h49
  2. R�ponses: 3
    Dernier message: 17/06/2004, 16h59
  3. [MFC] imprimer un bmp ressource
    Par chronos dans le forum MFC
    R�ponses: 6
    Dernier message: 07/06/2004, 17h17
  4. OpenGL - MFC Boite de dialogue
    Par cybertigre dans le forum OpenGL
    R�ponses: 3
    Dernier message: 15/04/2004, 16h09
  5. [MFC] Bo�te de dialogue chronom�tr�e
    Par mdriesbach dans le forum MFC
    R�ponses: 5
    Dernier message: 18/02/2003, 12h40

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