CStatic Dynamisch -> Bitmap verschwindet

DJneu

Mitglied
Hi zusammen,

das mit dem VisC++ klappt immer besser aber manchmal :confused:
Bei meinen Bitmap's die ich mit Hilfe Dynamisch angelegter CStatic's realisiere
hab ich das Problem wenn sie von einem Fenster verdeckt waren, bleiben
sie verschwunden!?
Mich wundert dies da ich ja sämtliche meiner Control's (Buttons, Edits, Statictexte)
dynamisch anlege, diese werden aber alle neu gezeichnet?

:suspekt:

Ich generiere diese in OnInitDialog folgendermaßen:

for( index = 0 ; index < 10 ; index ++ )
{
CStatic *OnOff = new CStatic ;
OnOff -> Create ("Test", WS_TABSTOP | WS_CHILD | SS_BITMAP | SS_NOTIFY | WS_VISIBLE, CRect (x1,y1,x2,y2), this, StaticID) ;
HBITMAP hbmp =:: LoadBitmap(AfxGetInstanceHandle (), "Bitmap1") ;
OnOff -> SetBitmap (hbmp) ;
:;DeleteObject (hbmp) ;
}


Fehlt das was mit OnPaint?
Gruß
 
Hallo zusammen,

hab nun mal eine Weile drüber gebrütet...
Viele Versuche sind dabei rausgekommen, aber geholfen hat's nix.....

Hat mir keiner einen Tipp in welche Richtung ich suchen muss

Gruß Dirk
 
Du DeleteObject-est die Bitmap direkt nachdem du dem Static gesagt hast, dass es sich damit darstellen soll. Du kannst das HBITMAP erst zerstören, wenn die Statics auch zerstört werden; sprich, wenn der Dialog zugemacht wird (WM_DESTROY).
 
Hallo,

danke für die Hilfe!
So weit so gut! Hab einmal ein wenig damit herum experimentiert!
Ich habe jetzt komische Effekte!
Ich versuch nochmal zu schildern was ich so treib!

Also ich initialisiere das CStatic am Anfang mit einem Bitmap:


CStatic *dinHiLoBitmap = new CStatic ;
dinHiLoBitmap -> Create ("Test", WS_CHILD | SS_BITMAP | SS_NOTIFY | S_VISIBLE, CRect (X1, Y1, X2, Y2), this, ID) ;
HBITMAP hbmp =:: LoadBitmap(AfxGetInstanceHandle (), "IDB_LED_RD_ON_DOWN") ;
dinHiLoBitmap -> SetBitmap (hbmp) ;


dann ändere ich während der Laufzeit das Bitmap:


CStatic *dinHiLoBitmap = (CStatic*) GetDlgItem (ID) ;
HBITMAP hbmp ;
hbmp = dinHiLoBitmap -> GetBitmap () ;
:;DeleteObject (hbmp) ;
hbmp =:: LoadBitmap (AfxGetInstanceHandle (), "DB_LED_RD_ON_DOWN") ;
dinHiLoBitmap -> SetBitmap (hbmp) ;


und zum Schluss lösche ich das Bitmap beim Programmende:


CStatic *dinHiLoBitmap = (CStatic*) GetDlgItem ( ID ) ;
HBITMAP hbmp ;
hbmp = dinHiLoBitmap -> GetBitmap () ;
:;DeleteObject (hbmp) ;
dinHiLoBitmap -> DestroyWindow() ;
delete dinHiLoBitmap ;


Vom Verständnis ist mir das glaub schon klar, ich muss dem static ein Bitmap zuweisen.
Dann beim ändern muss ich das alte löschen, dann ein neues zuweisen und zum schluss auch wieder alles Löschen!
Ich denke ich mach da einen Fehler beim Löschen des alten Bitmaps mit GetBitmap () ?

Gruß
 
GetBitmap ist da schon richtig, ich würde nur sicherheitshalber das alte HBITMAP erst löschen, nachdem das neue reingesetzt ist.

Welche komischen Effekte hast du denn? Evtl. musst du nach SetBitmap ein Invalidate drauf machen, damit es sofort neu gezeichnet wird.
 
Ok das war’s mit dem Invalidate () ;

Und die "komischen Effekte" hab ich selbst verursacht weil ich manche
neu gezeichnet hatte manche nicht und so weiter.. :).
Mit der Invalidate Erweiterung sieht's jetzt ganz gut aus.

Dank dir!! Aaaaber....

Durch die Lösung mit den CStatic Bitmaps, hast du mich glaub
schon auf eine Fährte für mein nächste Problem gebracht.
Ich hab nämlich ein paar CProgressCtrl's die sich auch etwas seltsam verhalten.
Die werden auch erzeugt. dann gelöscht und mit anderen Werten neu erzeugt.
Nach dem neu Erzeugen zeigen manche gar nix an und manche haben eine
ganz komische Farbe (nicht meine selbst erzeugte :)).

Ich werd mal schauen was ich da rauskriege und meld mich dann noch mal.

Gruß
 
Hab's, eigene Blödheit.....
Man kann einen Control nicht zweimal Initialisieren :) (kann schon, sieht aber komisch aus)
man muss ihn dazwischen deleten.

Gruß Dirk
 
Zurück