LoadBitmap

Corn51 Messages postés 4 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 27 avril 2004 - 25 avril 2004 à 18:11
Corn51 Messages postés 4 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 27 avril 2004 - 27 avril 2004 à 14:42
Bonjour, Je suis en MFC, je souhaite afficher une image de diode verte lorsque je clique su un bouton et une rouge a la place de la verte, lorsque je reclique sur le bouton. Mais lorsque je clique une nouvelle fois sur le bouton pour réafficher la verte, plantage au niveau du LoadBitmap. Je suppose que cela doit être du au fait que l’image est déjà chargée.
Le problème se pose aussi quand je ferme la fenêtre et que je la rouvre.

Savez vous comment faire une sorte de UnLoadBitmap ?

Voici mon code :

void CAutoDlg::Vert()
{
m_Vert.LoadBitmap(IDB_VERT);

CDC * pDC = GetDC(); //Obtient le contexte de dessin courant
CDC dcMemoire_V; //Crée un Contexte Mémoire
dcMemoire_V.CreateCompatibleDC(pDC); //Rend le contexte mémoire compatible avec le contexte d'écran
dcMemoire_V.SelectObject(&m_Vert); // Sélectionne l'image dans le contexte mémoire

pDC->BitBlt(50,18,40,40,&dcMemoire_V,0,0,SRCCOPY);

ReleaseDC(pDC); //Rend le contexte d'affichage au systéme
}

void CAutoDlg::Rouge()
{
m_Rouge.LoadBitmap(IDB_ROUGE);

CDC * pDC = GetDC(); //Obtient le contexte de dessin courant
CDC dcMemoire_R; //Crée un Contexte Mémoire
dcMemoire_R.CreateCompatibleDC(pDC); //Rend le contexte mémoire compatible avec le contexte d'écran
dcMemoire_R.SelectObject(&m_Rouge); // Sélectionne l'image dans le contexte mémoire

pDC->BitBlt(50,18,40,40,&dcMemoire_R,0,0,SRCCOPY);

ReleaseDC(pDC); //Rend le contexte d'affichage au systéme
}

Merci d’avance a toute personne pouvant m’aider.

3 réponses

bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004
26 avril 2004 à 20:53
Je sais pas comment le faire en VC, mais sous borland c'est assez simple:

1/ Tu charges l'image, mais l'option Visible est false
2/ Lors du click tu la rends visible
3/ lors du reclick tu la rends de nouveau invisible

et tu decharges la bitmap que lorsqu'elle te serve plus :)

T'as essayé cette methode? :p
0
bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004
26 avril 2004 à 21:01
Tiens, un petit exemple en bcb (borland c++ builder):

//Quand on appui sur le Button1
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//On rends l'image visible
Form1->Image1->Visible = true;
}
//---------------------------------------------------------------------------
//Lors de la création de la form
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//On charge l'image
Form1->Image1->Picture->LoadFromFile("monimage.bmp");
//On rends l'image invisible
Form1->Image1->Visible = false;
}


Donc, voilà, c'est assez simple, l'image est chargée et rendue invisible, l'utilisateur ne la voit pas, quand tu cliques sur le boutton, on l'affiche.. c'est pas la peine de charger et decharger million de fois.
0
Corn51 Messages postés 4 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 27 avril 2004
27 avril 2004 à 14:42
Je viens de remarquer qu'il y a un code source !

J'aurais du chercher avant de poser la question. :shy)

Merci quand même bdkiller.
0
Rejoignez-nous