Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1473 connectés 

  FORUM HardWare.fr
  Programmation

  [VC++] Code tout bête marchant sous win2000 mais pas sous win9x !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Code tout bête marchant sous win2000 mais pas sous win9x !

n°46781
Kyle_Katar​n
Posté le 15-07-2001 à 12:22:14  profilanswer
 

voilà le code
CFileFind find;
CString ModName;
CBitmap bmp;
 
if (bmp.LoadBitmap(IDB_NOPIC)==FALSE) MessageBox("Error" );  
 
c_mod.GetText(c_mod.GetCurSel(),ModName.GetBuffer(255));  
ModName.ReleaseBuffer();  
 
if (find.FindFile(ModPath+ "\\"+ModName+"\\"+ModName+ ".bmp" ))
{
 find.FindNextFile();  
 c_bit.SetBitmap((HBITMAP)LoadImage(0,find.GetFilePath(), IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE));  
}
else
{
 c_bit.SetBitmap(bmp);
}
 
pourquoi le  c_bit.SetBitmap(bmp); ne amrche t il pas sous Win9x (rien ne s'affiche).
De plus, quel que soit l'OS, l'image chargée par cette commande disparait dès que l'appli est cachée alors qu'elle reste afficvhée normalement quand elle est chargée par l'autre commande (cf le début du if) ??
 
merci d'avance..

mood
Publicité
Posté le 15-07-2001 à 12:22:14  profilanswer
 

n°46801
karlkox
Posté le 15-07-2001 à 18:31:03  profilanswer
 

Pour l'image qui ne se réaffiche pas, il faut la redessiner dans le WndProc lorsque tu recoits le message WM_PAINT. Pour le bug, y a un truc bizarre, mais ton HDC il é ou la ??

n°46802
Kyle_Katar​n
Posté le 15-07-2001 à 18:32:55  profilanswer
 

j'ai oublié de la dire on dirait, je suis en MFC et je veut afficher le bitmap dans un CStatic (ca marche au poil avec les images de .bmp externes mais pas avec les bitmap des ressources du projet)

n°46816
Kyle_Katar​n
Posté le 15-07-2001 à 20:03:22  profilanswer
 

c'est tout con, fallait passer le CBitamp en global...

n°46817
verdy_p
Posté le 15-07-2001 à 20:07:16  profilanswer
 

Ton problème est le destructeur de la variable "bmp" déclarée localement.
Quand tu fais:
  c_bit.SetBitmap(bmp);
 
tu assignes à ton objet c_bit une bitmap qui va être détruite.
 
Alors qu'avec:
  c_bit.SetBitmap((HBITMAP)LoadImage(0,find.GetFilePath(), IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE));
 
tu assignes un handle créé par Windows et qui n'est pas dans un objet qui va être détruit...
 
La différence vient du comptage de référence car il semble que sous NT, le Handle de bitmap passé indirectement par c_bit.SetBitmap(bmp); est dupliqué pour être stocké dans l'espace mémoire des ressources... Cette duplication n'a pas lieu sous Windows 9x qui n'en a pas besoin.
 
La solution est de ne pas stocker la bitmap IDB_NOPIC dans une variable locale bmp, mais d'utiliser l'API Windows directement pour stocker cette bitmap dans un handle et non dans un objet CBitmap.
 
1) Enlève le code inutile bmp.LoadBitmap(IDB_NOPIC);
 
2) dans le code du else, assigne directement le handle de bitmap:
c_bit.SetBitmap((HBITMAP)IDB_NOPIC);  
Les identifiants de ressources du programme sont utilisables directement comme handle...

n°46834
Kyle_Katar​n
Posté le 15-07-2001 à 22:23:58  profilanswer
 

merci beaucoup !

n°46838
Kyle_Katar​n
Posté le 15-07-2001 à 22:45:46  profilanswer
 

c_bit.SetBitmap((HBITMAP)IDB_NOPIC);   ne marche pas.
j'ai pas de message d'erreur, tout est ok mais au lieu d'afficher mon bitmap il affiche un paté informe noir ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VC++] Code tout bête marchant sous win2000 mais pas sous win9x !

 

Sujets relatifs
[Java] Un JLabel tout con, tout bete ...Access et code barre !!
Pbm netscape avec le code suivant[html] un espace a pour code html %20 mais quel est le code de '?'
[JAVA] Trouver le code ASCII d'un char ?[VC++] Commet gérer un projet avec plusieurs fichiers de code?
[C++] Peut-on précompiler des bouts de code?Qui pourrais me faire ce code en javascript ?
Quel code permet d'obtenir ca?Besoin pour modifier un code Javascript!
Plus de sujets relatifs à : [VC++] Code tout bête marchant sous win2000 mais pas sous win9x !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR