Zeichnung verschwindet einfach
-
Hallo.
Ich habe auf meinem Dialog ein Picture Controll drauf mit folgenden eigenschaften:
Abgesenkt: FALSE
Benachritigen: FALSE
Bild zentrieren: FALSE
Clientkante: FALSE
Dateien annehmen: FALSE
Deaktiviert: FALSE
Echt Bildgröße: FALSE
Farbe: weiß
Gruppe: FALSE
Hilfe-ID: FALSE
ID: IDC_Zeichenflaeche
Modaler Rahmen: FALSE
Rahmen: FALSE
Rechtsbündig: FALSE
Sichtbar: TRUE
Statische Kante: FALSE
Tabstopp: FALSE
Transparent: FALSE
Typ: RechteckIn meinem Programm lass ich dann per Buttonklick eine Grafik drauf erzeugen (Statistische Auswertung mit Balkendiagramm etc).
Funktioniert auch alles wunderbar. Wenn ich jetzt aber ein anderes Programm aufrufen möchte und dabei unten in der Task auf Start klicke, und irgendwas mein Dialogfenster überlappt, ist dort, wo die überlappung war, das gezeichnete weg.
Ich hab keine Ahnung woran das liegt. Völlig egal was ich mache. Sobald irgendwas (neues Fenster etc.) meine Zeichnung überlappt, ist das weg und ich muss neu Zeichnen.
Bitte um eure Hilfe.
Achja, erzeugen und zeichnen tue ich so:
CWnd *wp; CDC *pDC; wp = GetDlgItem(IDC_Zeichenflaeche); pDC = wp->GetDC(); wp->GetWindowRect(&Rect); pDC->MoveTo... pDC->LineTo...
-
OnPaint
-
also den ganzen zeichnungskram in die OnPaint und von dem button aus dann die OnPaint aufrufen?
-
MSS-Software schrieb:
von dem button aus dann die OnPaint aufrufen?
Nein. Niemals OnPaint aufrufen. Vom Button aus ein Flag setzen, das du in OnPaint prüfst.
-
aso
sowas wie
BOOL Zeichnen;
--> Button klick --> Zeichnen = TRUE;
//On Paint
if ( Zeichnen == TRUE )
{
...
}Zeichnen = FALSE;
-
MSS-Software schrieb:
Zeichnen = FALSE;
Nein, das Flag muss schon gesetzt bleiben, sonst hast du ja wieder denselben Effekt.
-
lern doch erstmal die grundlagen über ein buch!
-
demnach zu folge müsste er doch dann die ganze zeit die on paint ausführen, oder?
-
MSS-Software schrieb:
demnach zu folge müsste er doch dann die ganze zeit die on paint ausführen, oder?
Nein. Wie kommst du darauf, dass du damit irgendwie beeinflusst, wie oft OnPaint aufgerufen wird?
-
achso
jetzt versteh ich das
wenn ich den button klicke, müssen da noch ganz normal die grafikfunktionen drinstehen und die on paint wird erst aufgerufen, wenn ich das Fenster verschiebe oder es neu aufgebaut werden muss
ich sag einfach mal: wenn es einen neuen focus erhält
jaja, jetzt versteh ich.
danke euch
-
MSS-Software schrieb:
wenn ich den button klicke, müssen da noch ganz normal die grafikfunktionen drinstehen
Nein, müssen sie nicht und sollten sie auch nicht. Du solltest in deiner Buttonfunktion ein Neuzeichnen auslösen, z.B. mit Invalidate. Dann wird OnPaint aufgerufen und alles ist gut.
-
achso. sorry
also mit Invalidate
ich schau mal, ob ich dazu was finde. hab damit noch nicht gearbeitet. ist das erste mal mit GDI
-
ha
this.Invalidate();
war ganz easy
ich danke euch
-
wenn schon this->Invalidate();
-
Einfach nur Invalidate();
-
(*this).Invalidate();
-
this[0].Invalidate();
-
Pellaeon schrieb:
this[0].Invalidate();
-
0[this].Invalidate();
-
nice