Bilder (Bitmap) in StaticFeld Anzeigen? Dynamisch?

rano

Mitglied
Ich habe eine Dialogbasierteanwendung erstellt und möchte auf Static Feld Bilder dynamisch anzeigen und ausblenden (bedingte Anzeige). zuerst will ich nur einen Bild Anzeigen und dann wenn eine Bedingung stimmt das Bild durch einmen anderen ersetzen.
die Bilder sind Als Ressourcen gespeichert.

ich habe im Forum gesucht und dieses Code gefunden den ich in mein BOOL CReadfileDlg::OnInitDialog() eingefügt habe. Leider wird das Bild nicht angezeigt.

was mache ich falsch.(bin newebe mit MFC)


CBitmap bild;

CWnd* wp = GetDlgItem(IDC_STATICB);
CDC *pDC = wp->GetDC();
CDC imageDC;

imageDC.CreateCompatibleDC(pDC);

bild.LoadBitmap(IDB_BITMAP0); //hier müsstest du dann vorher eine abfrage machen welches ressourcen_bmp der laden soll

imageDC.SelectObject( &bild);

//hier groesse und offset des bildes angeben
pDC->BitBlt(100,100, 400 , 400, &imageDC, 0, 0, SRCCOPY);


imageDC.DeleteDC();

wp->ReleaseDC(pDC);
 
Hi,

mag sein das ich mich jetzt irre, weil ich deinen Code noch nicht getestet habe, aber bei Static Dialogen muss man meines Wissens immer ein

UpdateData(false);

hinterher aufrufen, da sonst das Static Objekt nicht aktualisiert wird.

Evtl gehts ja so ;)
 
Vielleicht solltest du mal die CPicture Klasse benutzen. Ich glaube die kann dir dabei helfen. Einfach mal nach CPicture googeln findest du sicher was.

Wenn Probleme auftreten immer weiter Fragen hab mich auch ein wenig damit befasst.;)
 
Danke für dein Tip. Habe die CPicture aber sie Ist mehr für SDI Anwendungen und ich habe nur einen Dialoganwendung. Ausserdem weiss ich nicht wie ich das Bild auf dem Static feld anzeigen kann. Bitte mehr details wäre super.

Danke
 
Setze beim Static den Stil Benutzerzeichnung (SS_OWNERDRAW).

Da Studio diesen Stil seit Jahren im Ressource-Editor unterschlägt, mach das am besten in OnInitDialog per Hand (meinStatic.ModifyStyle( 0, SS_OWNERDRAW ).

Trenne das Laden und das Darstellen (ein CBitmap als Member, wo die einzelnen Bilder reingeladen werden können).

Lass dir vom AppWizard bzw. Klassenassistenten eine OnDrawItem von der Static anlegen. Dort packst du die reine Darstellung rein. Benutze zum Darstellen das HDC, das du im Parameter übergeben kriegst.

Beim Laden genügt es nach LoadBitmap ein meinStatic.Invalidate() aufzurufen. Das ruft dann indirekt OnDrawItem auf, deine Bitmap wird dargestellt und es regnet Smarties und Zuckerstangen.
 
Tja SDI Anwendung hin oder her ich habe es auch auf meine Dialogbox basierten Programme angewendet. Ist zwar Speicher verschwendend hoch 3 aber wenn man bedenkt das Leute 2048 DDR Ram in ihrem PC haben war mir das auch egal.

Also zurück auf wichtigeres:

Ich habe das etwa so gemacht:

CClientDC pDC(this);
CPicture Picture;
CRect RL;
RL.bottom = xxx; \\ Die größe die es haben soll
RL.top = xxx;
RL.left = xxx;
RL.right = xxx;

Picture.Load(/*Dateipfad*/);
Picture.Show(&pDC,RL);
Picture.FreePictureData();

Natürlich Header Datei bzw. *.cpp Datei einbinden. Und das war es dann auch schon.
Weiterführende Fragen? Wenn ja dann Meld dich;)
 
Zu erst Danke für die Mühe.

Die Benutzung von CPIcture werde ich dann als letzte Möglichkeit einbeziehen. Grund dafür ist nachdem ich das Programm geschrieben habe soll ich in ein Vortrag es Erläutern (Schrittweise) Mit CPicture wäre mir das zu viel zu Erklären. auuserdem habe ich eine Haufen Fehler (Konvertierungsfehler error C2664.

Endurion: kannst mir Bitte mher Details geben eine Code wäre noch besser.

PS: Alle Schritte und Funktionen, die ich für in das Programm benutzen werde soll ich Im Vortragf erklären. deswegen brauche ich auch das gut zu verstehen.

Gruß rano
 
Ich kann dir heut Abend mal nen einfachen Quelltext schicken, um Bilder aus den recourcen zu laden. Ob das das richtige ist weis ich aber net.
 

Neue Beiträge

Zurück