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

 


Dernière réponse
Sujet : [VC++] Code tout bête marchant sous win2000 mais pas sous win9x !
Kyle_Katarn 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 ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Kyle_Katarn 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 ...
Kyle_Katarn merci beaucoup !
verdy_p 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...
Kyle_Katarn c'est tout con, fallait passer le CBitamp en global...
Kyle_Katarn 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)
karlkox 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 ??
Kyle_Katarn 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..

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)