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 :

Afficher une image provenant d'une ressource


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut Afficher une image provenant d'une ressource
    Bonjour,

    Je voudrais afficher une image dans un de mes programmes, elle est située dans un fichier rc inclus dans mon projet (je travaille sous devc++), le problème, c'est que dans la fonction loadImage le premier argument doit être l'instance de la fenetre dans laquelle on affiche l'image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoadImage(hThisInstance,"IMAGE",IMAGE_BITMAP,0,0,NULL);
    Donc si je la met dans ma fonction d'écoute des messages (case WM_PAINT:...) on me dit que hThisInstance n'est pas déclaré (ben oui)

    De + cette fenetre est ouverte par une autre fenetre (c'est une fonction appele par ma fenetre principale) donc si j'utilise la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hdc=GetDC(hwnd);	// obtient un handle de contexte de périphérique
    ...			// affichage de bitmap,pixel…
    ReleaseDC(hwnd,hdc);	// libère l'handle
    l'image n'apparait pas, il faudrait que je la mette das une boucle mais je ne vois pas du tout comment faire

    Je vous remercie d'avance de votre aide.

  2. #2
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    le problème, c'est que dans la fonction loadImage le premier argument doit être l'instance de la fenetre dans laquelle on affiche l'image
    Non c'est l'instance du module qui contient l'image.
    donc si elle fait partie de ton application c'est l'instance de ton application.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    C'est à dire??! Je n'ai pas compris ce qu'est un module exactement, en fait j'ai appris à me servir de l'api Win32 avec un tutoriel très incomplet, j'ai téléchargé recemment votre tutoriel sur l'api Win32 en PDF et effectivement il me semble bien mieux expliqué et surtout plus complet que le précédent.

    Pouvez vous me dire ou est déclaré ce module? Quel nom lui donne dt-on généralement et de quel type est-il.

    Merci d'avance

  4. #4
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    Si ton image est dans ton application le handle d'instance de ton application est dans le 1er paramètre de WinMain.

    Si ton image avait été dans une dll son handle d'instance serai obtenu
    par la valeur de retour de LaodLibrary

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    C'est bien ce que je pensais seulement mon programme se divise en deux parties : la fonction WinMain et ma fonction d'écoute des messages (la fameuse WindowProcedure) or pour que l'image contenue dans ma fenetre soit redessinée (ex: si une autre fenetre la recouvre ou si on la réduit) il me faut placer l'image dans la fonction d'écoute des messages et alors mon compilateur me renvoie une erreur comme quoi l'instance de mon programme n'est pas déclarée (normal non?) il fudrait que j'affiche les images à l'intérieur de ma fonction WinMain mais si ma fenetre est redessinée les images ne le sont pas elles, il faudrait que je fasse une boucle du genre de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(...)
    {
    hDC=GetDC(fenetre_p);
    image=(HBITMAP)LoadImage(hThisInstance,"image",IMAGE_BITMAP,0,0,NULL); 
    hdcMemory=CreateCompatibleDC(NULL); 
    SelectObject(hdcMemory,image);
    GetObject(image,sizeof(bm),&bm);
    				BitBlt(hDC,20,100,bm.bmWidth,bm.bmHeight,hdcMemory,0,0,SRCCOPY);
    DeleteDC(hdcMemory);
    ReleaseDC(fenetre_p,hDC);
    }
    Mais je ne vois pas du tout comment faire ni si il peut y avoir une autre solution.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    A j'ai peut-etre une autre idée même deux :

    1) arriver à retourner l'instance de mon programme (je n'arrive à retourner que des int, malheureusement (return int).

    2) Arriver à récupérer une instance de la même manière qu'un menu avec GetMenu()(une fonction genre GetInstance(), je sais ca n'existe pas!!)

    Si vous connaissez une fonction de ce genre merci d'avance de m'en faire part.

  7. #7
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    mon programme se divise en deux parties
    Tu veut dire deux fichier séparé ou deux fonctions une WinMain et la procédure de fenêtre.
    Tu peut utiliser une variable globale pour le mémoriser.



    2) Arriver à récupérer une instance de la même manière qu'un menu avec GetMenu()(une fonction genre GetInstance(), je sais ca n'existe pas!!)
    Si ça existe ! GetWindowLong

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    J'ai également trouvé ceci et ca marche!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetModuleHandle(0)
    Merci à tous!

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Attention, ca te donne le handle de l'exe. Ca ne marche pas si tu développes une dll.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/07/2014, 11h30
  2. Réponses: 31
    Dernier message: 11/07/2013, 14h39
  3. Afficher une image provenant d'une base de données
    Par aljessy dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 04/11/2011, 09h34
  4. source d'une image provenant d'une db
    Par darkbob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/06/2007, 17h34
  5. Convertir une image jpeg en une image .ico. .
    Par sonja dans le forum Imagerie
    Réponses: 5
    Dernier message: 14/05/2007, 18h41

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