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] C++ 6: imprimante [Fait]


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut [MFC] C++ 6: imprimante
    Bonjour,

    Je dois créer ma propre boite de dialogue pour une imprimante, dans des certains cas, nous ne voulons pas utiliser la boite de dialogue de Windows.

    est-il possible que je puisse remplir un combo box avec les imprimantes disponibles ainsi que la taille des papiers????? et je dois choisir l'orientation du papier

    Ci-joint une image de la boite de dialogue que je dois remplir

    Merci
    Images attachées Images attachées  

  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 ,
    oui c'est possible dans l'ordre :
    1)le parcours des imprimantes.
    2)la recuperation des infos d'une imprimante.
    3)le remplissage de la combobox.


    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
     
    int GetPrinterList(CComboBox *pCombo)
    {
     
        PRINTER_INFO_2*    list;
        DWORD            cnt = 0;
        DWORD            sz = 0;
        int            i;
        int            sl;    
     
        EnumPrinters( PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &sz, &cnt );
     
        if ( (list = (PRINTER_INFO_2*) malloc( sz )) == 0 )    return 0;
     
        if (!EnumPrinters( PRINTER_ENUM_LOCAL, NULL, 2, (LPBYTE)list, sz, &sz, &cnt))
        {
            free( list );
            return 0;
        }
     
        CString str,strSize;    
        HANDLE  hDriver;        
        for ( i = 0, sl = 0; i < (int)cnt; i++ )
        {
            // load printer driver        
            if(!OpenPrinter(list[i].pPrinterName,&hDriver,NULL)) continue;
            if(!hDriver) continue;
     
            DWORD       dwBufSize = 0;       
            LPDEVMODE   lpDM;
     
            // get DEVMODE stuff from driver
            dwBufSize =DocumentProperties( NULL,
                                      (HANDLE)hDriver,
                                      (LPSTR)list[i].pPrinterName,
                                      (LPDEVMODE)NULL,
                                      (LPDEVMODE)NULL,
                                      (DWORD) 0); 
            // alloc space for devmode stuff
            HANDLE    hDevMode= GlobalAlloc(GMEM_MOVEABLE, dwBufSize);
            lpDM = (LPDEVMODE)GlobalLock(hDevMode);
     
            dwBufSize =DocumentProperties(NULL,
                                     (HANDLE)hDriver,
                                     (LPSTR)list[i].pPrinterName,
                                     (LPDEVMODE)lpDM, 
                                     (LPDEVMODE)NULL,
                                     (DWORD)DM_COPY);
            strSize="Autre"; // a faire ...
            if(lpDM->dmPaperSize==DMPAPER_A4 ) strSize="A4";
     
            ClosePrinter(hDriver);
     
            ::GlobalFree(hDevMode);
     
            str=list[i].pPrinterName;
            str+=" ";
            str+=strSize;        
            pCombo->AddString(str);
     
        }
     
        free( list );
        return cnt;
    }
    j'ai mis en place le principe a toi de completer/adapter....
    pour modifier les parametres voir cet autre post c'est le meme principe.
    http://www.developpez.net/forums/sho...86#post1202986
    on recupere un DEVMODE sur l'imprimante et on modifie les proprietés ,et on crée le dc d'impression avec ce DEVMODE ...


  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Merci farscape,

    Je veux lire et essayer...

    Je te remercie énormément

    Mirna

Discussions similaires

  1. [MFC/C++6] Savoir si imprimante existe
    Par Mirna dans le forum Visual C++
    Réponses: 1
    Dernier message: 19/08/2006, 16h37
  2. [MFC] C++ 6: imprimante
    Par Mirna dans le forum Visual C++
    Réponses: 2
    Dernier message: 26/07/2006, 16h46
  3. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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