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

Windows Discussion :

Cr�ation d'un fichier .bmp avec PrintWindow


Sujet :

Windows

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par d�faut Cr�ation d'un fichier .bmp avec PrintWindow
    Salut � tous, je suis d�butant en programmation, mais j'apprends vite

    Je sollicite vos comp�tences pour la cr�ation d'un fichier .bmp : J'aimerais faire une copie de fen�tre � l'aide de la fonction PrintWindow, et que cette copie soit mise dans un fichier .bmp cr�� pour l'occasion.
    J'avoue que j'ai du mal � comprendre comment cr�er ce fichier .bmp

    Merci de votre aide

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu dois d'abord capturer le contenu de la fen�tre dans un Bitmap en m�moire, ce que PrintWindow() peut faire (mais il faut cr�er le bitmap et le DC d'abord, avec CreateCompatibleDC(), et CreateCompatibleBitmap() ou CreateDIBSection()).

    Ensuite, tu peux utiliser cette page pour le sauvegarder, mais il y a s�rement plus simple si tu peux utiliser GDI+...
    Storing an Image
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par d�faut
    Merci M�dinoc,
    si j'ai bien compris, il faut charger le bitmap en m�moire avant de cr�er un fichier .bmp
    J'ai �crit les lignes suivantes dans le but de pouvoir copier un bitmap d'une fen�tre � l'autre (j'ai volontairement saut� la cr�ation de fichier); et j'obtiens une fen�tre noire. Qu'est ce que j'ai fait de mal?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            PAINTSTRUCT ps;
            HWND hMozilla = FindWindow("MozillaUIWindowClass",NULL);
            HDC hdc = GetDC(hwnd);
            HDC hdcmem = CreateCompatibleDC(hdc);
            hbitmap = CreateCompatibleBitmap(hdcmem, 640, 480);
            PrintWindow(hMozilla, hdcmem, 0);
    
            hdc = BeginPaint(hwnd, &ps);
            DrawState(hdc,NULL,NULL,(long)hbitmap,NULL,0,0,0,0,DST_BITMAP);
            EndPaint(hwnd, &ps);
            DeleteObject (hbitmap);
            DeleteDC (hdcmem);
            DeleteDC (hdc);

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    1. Pour commencer, tu r�utilises ta variable "hdc".
    2. Ensuite, tu fais un DeleteDC() dessus au lieu de faire un ReleaseDC() (tu l'as obtenu avec GetDC(), je rappelle)...
    3. Et aussi, tu as mal lu la doc de CreateCompatibleBitmap() : Le HDC doit �tre celui d'origine, pas le nouveau, sinon tu obtiens un bitmap monochrome...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par d�faut
    Voil� c'est modifi�,
    Mais �a marche pas mieux

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                    PAINTSTRUCT ps;
                    HWND hMozilla = FindWindow("MozillaUIWindowClass",NULL);
                    HDC hdc = BeginPaint(hwnd, &ps);
                    HDC hdcmem = CreateCompatibleDC(hdc);
                    HBITMAP hbitmap = CreateCompatibleBitmap(hdc, 640, 480);
                    PrintWindow(hMozilla, hdcmem, 0);
                    DrawState(hdc,NULL,NULL,(long)hbitmap,NULL,0,0,0,0,DST_BITMAP);
                    EndPaint(hwnd, &ps);
    
                    DeleteObject (hbitmap);
                    DeleteDC (hdcmem);
                    DeleteDC (hdc);
    Je suppose que c'est parce que PrintWindow copie la fenetre dans hdcmem et non dans hbitmap que �a ne fonctionne pas.
    Qu'en pensez-vous?

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Il manque une paire de SelectObject() (un apr�s avoir cr�� DC et bitmap, un avant de les d�truire).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par d�faut
    J'ai maintenant le code suivant et �a ne marche toujours pas

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                    PAINTSTRUCT ps;
                    HWND hMozilla = FindWindow("MozillaUIWindowClass",NULL);
                    HDC hdc = BeginPaint(hwnd, &ps);
                    HDC hdcmem = CreateCompatibleDC(hdc);
                    HBITMAP hbitmap = CreateCompatibleBitmap(hdc, 640, 480);
                    SelectObject(hdcmem,hbitmap);
                    PrintWindow(hMozilla, hdcmem, 0);
                     DrawState(hdc,NULL,NULL,(long)hbitmap,NULL,0,0,0,0,DST_BITMAP);
                    EndPaint(hwnd, &ps);
                    SelectObject(hdcmem,hbitmap);
                    DeleteObject (hbitmap);
                    DeleteDC (hdcmem);
                    DeleteDC (hdc);
                    return 0;

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    1. Ton second SelectObject() est incorrect: Il doit utiliser la valeur retourn�e par le premier.
    2. Le troisi�me param�tre de DrawState() doit �tre cast� en LPARAM et non en long.
    3. D'apr�s la doc de DrawState(), le second SelectObject() doit avoir lieu avant celui-ci (le bitmap ne doit pas �tre s�lectionn� dans un DC au moment de l'appel � DrawState()).

    PS: V�rifie que PrintWindow() n'�choue pas. Ni le reste, d'ailleurs...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par d�faut
    Merci 1000 milliards de fois , �a marche!!!!!!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 18/02/2008, 07h53
  2. Impossible d'ouvrir un fichier BMP avec fopen
    Par pitistef dans le forum C
    R�ponses: 2
    Dernier message: 25/11/2007, 13h26
  3. cr�ation d'un fichier excel avec ADO
    Par sony351 dans le forum C++Builder
    R�ponses: 1
    Dernier message: 28/02/2007, 15h54
  4. [JDOM] Cr�ation d'un fichier xml avec jdom
    Par fabricew59 dans le forum Format d'�change (XML, JSON...)
    R�ponses: 4
    Dernier message: 09/08/2006, 11h17
  5. Peut-on ouvrir un fichier bmp avec la lib X11 ?
    Par caesarvanou dans le forum C
    R�ponses: 7
    Dernier message: 10/02/2006, 18h32

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