LoadImage et MAKEINTRESOURCE comment ça marche ?

Résolu
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010 - 14 avril 2008 à 17:16
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010 - 16 avril 2008 à 09:02
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 avril 2008 à 22:26
Si tu veux etre sûr, tu remplaces ton g_hInst par GetModuleHandle(0)

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
14 avril 2008 à 17:37
Bonjour,

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

Jean-François
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
14 avril 2008 à 17:43
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 avril 2008 à 17:46
Ou encore de LR_CREATEDIBSECTION qui fait retourner une section DIB au lieu d'un HBITMAP

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
14 avril 2008 à 18:02
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 avril 2008 à 18:18
Tu veux dire : si il faut ajouter quelque chose à resources.h ?

Normalement non.

C++ (@++)<!--
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
14 avril 2008 à 18:25
hBitmap = LoadImage(g_hInst, "resmonimage" ,IMAGE_BITMAP, 0, 0, 0);
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
14 avril 2008 à 18:25
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
0
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
14 avril 2008 à 18:38
Bon, j'ai essayé les deux méthodes et toujours pas, Loadimage renvoi toujours 0...
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
14 avril 2008 à 18:42
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
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
14 avril 2008 à 18:43
Quoique ! dans ce sens là le compilateur devrait signaler qu'il ne trouve pas l'image.

Jean-François
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 avril 2008 à 18:53
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 avril 2008 à 18:55
Question bête, mais l'éditeur de liens prend bien en compte tes ressources?

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

Jean-François
0
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
15 avril 2008 à 20:40
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...
0
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
15 avril 2008 à 20:53
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.
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
15 avril 2008 à 21:02
... 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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 avril 2008 à 21: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
0
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
15 avril 2008 à 22:14
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.
0
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
16 avril 2008 à 09:02
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 !
0
Rejoignez-nous