LoadImage et MAKEINTRESOURCE comment ça marche ?

Résolu
Signaler
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010
-
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010
-
Bonjour, je voudrais afficher une image provenant des ressources dans une boite de dialogue.
Dans un premier temps je l'ai fait avec une image local (donc pas en ressources), tout fonctionnait bien mais la j'ai besoin de mettre cette image en ressources et elle ne s'affiche pas,
voila ce que j'ai fait:

//fichier .rc
resmonimage                BITMAP    DISCARDABLE     "monimage.bmp"

//mon programme
HB=(HBITMAP)LoadImage(g_hInst, MAKEINTRESOURCE(resmonimage), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);

Est-ce qu'il faut déclarer quelque chose d'autre ?

Merci

20 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Si tu veux etre sûr, tu remplaces ton g_hInst par GetModuleHandle(0)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

"resmonimage" est une constante ou une chaîne de caractères ?

Jean-François
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Salut,
Essaye en remplacant MAKEINTRESOURCE(resmonimage) par (LPCTSTR)resmonimage
ou encore (LPCTSTR)"resmonimage", sinon ca peut etre aussi a cause du flag
LR_LOADMAP3DCOLORS:
"Do not use this option if you are loading a bitmap with a color depth greater than 8bpp."

Neo_Fr
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Ou encore de LR_CREATEDIBSECTION qui fait retourner une section DIB au lieu d'un HBITMAP

C++ (@++)<!--
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Bon, j'ai esayé un peu toutes vos propositions mais toujours pas... donc procédons par élimination, sachant que mon image se charge bien lorsque je n'utilise pas les ressources on peut mettre de coté les probleme avec LR_LOADMAP3DCOLORS et LR_CREATEDIBSECTION
Pour la question sur resmonimage je suppose que c'est une constante puisque je fais :   resmonimage BITMAP    DISCARDABLE     "monimage.bmp" dans mon fichier .rc non ?
Donc il ne reste plus grand chose, est-ce qu'il faut mettre quelque chose dans resources.h ?

supergrey
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Tu veux dire : si il faut ajouter quelque chose à resources.h ?

Normalement non.

C++ (@++)<!--
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
hBitmap = LoadImage(g_hInst, "resmonimage" ,IMAGE_BITMAP, 0, 0, 0);
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
On peut utiliser un identificateur numérique (une constante) ou un identificateur textuel (chaîne de caractères)

1) Avec identificateur = constante :
- Fichier des identificateurs toto.hpp contenant :
  #define resmonimage 1000
- Fichier des ressources toto.rc contenant :
  #include <toto.hpp>
  ...
  resmonimage BITMAP DISCARDABLE "monimage.bmp"
- Fichier du programme toto.cpp contenant :
  #include <toto.hpp>
  ...
  HB=(HBITMAP)LoadImage(g_hInst,MAKEINTRESOURCE(resmonimage),IMAGE_BITMAP,0,0,0);

2) Avec identificateur = chaîne de caractères :
- Fichier des ressources toto.rc contenant :
  "resmonimage" BITMAP DISCARDABLE "monimage.bmp"
- Fichier du programme toto.cpp contenant :
  HB=(HBITMAP)LoadImage(g_hInst,(LPCTSTR)"resmonimage",IMAGE_BITMAP,0,0,0);

Jean-François
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Bon, j'ai essayé les deux méthodes et toujours pas, Loadimage renvoi toujours 0...
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
L'image est dans le bon répertoire ? Entre le chargement à l'exécution comme avant et le chargement dans les ressources à la compilation, il peut y avoir une différence !

Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Quoique ! dans ce sens là le compilateur devrait signaler qu'il ne trouve pas l'image.

Jean-François
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Dans le cas de l'identifiant non numérique, les quotes sont de trop:

resmonimage BITMAP DISCARDABLE "monimage.bmp"

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Question bête, mais l'éditeur de liens prend bien en compte tes ressources?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Autre question bête ! est-ce que g_hInst est bon ? Il ne servait à rien avec un fichier.

Jean-François
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Ben mince, j'ai répondu hier rrr! Bon donc je disais que le compilateur trouve bien l'image donc ce n'est pas un probleme de chemin, il n'y a pas de quote autour de resmonimage (j'ai essayé les deux methode), les ressources sont bien prise en compte, par exemple la fonction directx D3DXCreateTextureFromResource charge très bien d'autres images, et g_hInst est bon puisque ça fonctionnait sans passer par les resources...
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Sinon, si je crée directement la boite dans les ressources ça marchera peut etre, le problème c'est que j'ai express donc je n'est pas d'éditeur de ressource donc pour créer la boite je devrais pouvoir me débrouiller mais pour l'image je ne sais pas la syntaxe à utiliser.
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
... et g_hInst est bon puisque ça fonctionnait sans passer par les resources...


Justement quand on par les ressources, l'instance ne sert à rieng_hInst est bien valide !

PS: Effectivement pas de quotes autour de resmonimage dans le fichier des ressources ! encore un dégât du copier/coller.

Jean-François
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Pour créer des boîtes de dialogues avec VC++ express, tu peux utiliser l'outil dont le lien est ci-après

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Merci pour resedit j'avais déjà cherché sans trouvé, il a l'air très bien, bon pour l'instant je n'arrive pas à insérer une image mais je vais bien finir par trouver...
Pour le g_hInst donc il ne servait à rien sans utiliser les ressources mais ça marchait quand meme, et la il sert mais il est bon donc le probleme vient d'ailleur si j'ai tout compris.
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Alleluia ! Avec GetModuleHandle(0) ça marche, en fait j'étais assez sûr du g_hInst car il était créé par l'appwizard de directx et tout le programme s'en sert mais le g_hInst=hinstance (dans le winmain) se faisait juste après l'initialisation dans laquelle je créais ma boite de dialogue, je l'ai changé de place maintenant ça fonctionne.
Donc merci à tous !