(C++) Bild in List-Control

markus1234

Banned
Dabei seit
Sep. 2006
Beiträge
3.897
Hallo.
Erstmal muss ich sagen, dass ich mich nur ab und zu ein bisschen mit C++ auseinandersetze und auf learning by doing mache. Infolgedessen kenne ich KAUM bis KEINE Fachausdrücke und bitte euch das bei einer Antwort zu berücksichtigen (weil ich logischerweise NIX damit anfangen kann) ;)

Also, ich suche eine Möglichkeit ein Bild als Hintergrund in einer List-Control darzustellen.
So habe ich das schon versucht:

Code:
	CBitmap Bitmap;
	Bitmap.LoadBitmap(IDB_LISTBKG);     
	[B]liste[/B].SetBkImage(Bitmap,TRUE);

Das funktioniert sogar - bis ein Objekt in der Liste angezeigt wird. Dann verschwindet das Hintergrundbild komplett und taucht erst wieder auf, nachdem die Liste leer ist.
Der Text selbst ist transparent, Hintergrundfarbe funktioniert wunderbar.
Wenn ich den Hintergrund hinzufüge, und bei "SetBkImage" ein FALSE angebe, erscheint das Bild links oben ausgerichtet EINMAL. Die restliche Liste erstrahlt in der List-Farbe, falls einige denken das wäre das Problem.

Ich suche nun weitere Möglichkeiten, die ich auch verstehen kann ohne mir 5 Bucher anzeignen :)

mfg,
Markus
 
*Auffrischung*, weiß niemand Rat?
 
Ein bisschen mehr code wär schon nötig, um da ernsthaft was zu sagen...;)
 
leist meinst du mit liste ? ein "struct" ? nen "vektor" ? ein "map" ?
 
Dann nehm ich die Struct :)

Am Besten wäre ein kleines Beispielprogramm wo ich mir das nötigste rausfischen könnte.
Danke schonmal für die Antwort, die mich mit Hoffnung erfüllt :)
 
ich weiss garnicht genau was du eigentlich machen willst ;)
 
Ich habe eine "List Control", das ist eine Liste in die Items kommen.
Und in dieser Liste will ich ein Bild als Hintergrund plazieren.

Mit dem obrigen Code funktioniert das - so lange bis ein Item in die Liste kommt. Dann wird das Bild entfernt und kommt erst wieder, wenn die Liste leer ist. Ich möchte aber, dass das Bild immer in der Liste bleibt, ein permanenter Listen-Hintergrund (zu vergleichen mit dem Windows-XP Ordnerhintergrund wenn z.B. nur Bilder drin sind, erscheint rechts unten ein Polaroid-Foto-Bild als Hintergrund).

So unverständlich ist das doch garnicht :)
 
was isn das fürn datentyp ?
 
wenn ich mich richtig erinner ist ein controll nur ein pointer ... kann es sein das du versuchst die adresse auszugeben anstatt den inhalt ?
 
Was meinst du damit schon wieder .... Ich möchte ein Bild in eine Liste quetschen, als Hintergrund ... es ist mir egal ob Bitmap, Jpeg oder Gif ;)

Wie gesagt funktioniert es BIS ein Item in die Liste kommt, was aber nichts mit der Aktualisierung an sich zu tun hat, da das Bild sofort wieder da ist, wenn die Items aus der Liste raus sind.

Bitte .. wenn du eine Frage hast dann frag in Deutsch, Wie gesagt mach pfusche ich nur ein bisschen rum und wäre froh, wenn ich damit auch weiterkommen würde :)

Auf Codeguru gibt es sogar ein Beispiel dafür. Leider sehr unüberschaubar!
 
wenn ud c++ programmieren willst dann schau dir an as pointer sin dund wie die funktionieren da quasi alles mit pointern irgendwann zutun hat
 
das hilft mir jetzt gerade ja leider nicht weiter ... vielleicht kannste mir das ja erläutern - denn wie gesagt es funktioniert so lange bis ein objekt, text, ein icon oder sonstwas in die liste kommt.

für bücher hab ich keine zeit ... ich will es ja nicht "lernen", ich will es nur wissen :)
Und wenn sich das mit dem Wissen erledigt hab ichs schon gelernt ..heh.
 
Wenn Du ein Beispiel hast, wo ist dann das Problem? Bzw. zeige doch mal den Code aus dem Beispiel, was Du daran nicht verstehst.

Prinzipiell musst Du nur die WM_PAINT (bzw. OnPaint) Methode überladen und darin ein Bild anzeigen. Ist die besagte OnPaint Methode in einem Standard Windows Control musst Du eben davon eine Klasse ableiten, darin die OnPaint Methode überladen und auch mit dem Objekt der abgeleiteten Klasse arbeiten.

Das hängt dann davon ab wie der Dialog aussieht mit dem Du arbeitest. Da hilft dann eventuell die Funktion CWnd::SubclassDlgItem.

Was bei Deinem Beispiel fehlt ist der Datentyp der Variablen liste, sowie in welcher Methode du den Code aufrufst. Da die CBitmap wahrscheinlich lokal ist, wird ein folgender Bildschirmupdate das angezeigt Bild überschreiben.

Also ein bisschen mehr Code und Info wäre hilfreich.

Es kann auch sein das das Listcontrol den kompletten Bildschirmbereich für sich nutzt, so das der Weg mit SetBkImage gar nicht funktionieren kann.
Wie Du ja selber sagst, sobald Items in der Liste sind ist das Bild weg. Daraus folgt dann das das nur mit einem Ownerdraw Listcontrol geht.
D.h. Du musst die Items sowie das Control selber zeichnen. Dann funktioniert auch das Hintergrundbild.

Und ums lernen kommst Du glaube ich nicht herum :-).

MfG

Arnd
 
Zuletzt bearbeitet:
Zurück
Top