Control neuzeichnen
-
Hi,
ich habe eben schon gesucht (google und hier), nur irgendwie leider nix gefunden.
Benutze wohl die falschen Suchbegriffe.Ich habe ein eigenes Control von CWnd abgeleitet und in der OnPaint
dann was gezeichnet. Das ganze in nem Dialog eingebunden.Es aktualisiert (überlappende Fenster/Menüs) sich alles auf dem Dialog
bis auf mein eigenes Control.
Bei welcher msg muss ich das Invalidate() aufrufen damit sich auch mein
Control neu zeichnet?
-
Wann soll es sich denn aktualisieren?
-
Normalerweise erledigt das 'Aktualisieren' die OnPaint() ...
Gruß
:: NoName ::
-
Hi,
es soll halt immer wenn es zu sehen ist auch gezeichnet sein. Wenn ich momentan ein Fenster "drüberziehe" dann zeichnet es sich halt nicht neu.
verschiebe ich aber das ganze Fenster dann zeichnet sich das control auch mit neu. Schieb ich wieder irgendein anderes Fenster drüber weg fehlen halt die Stellen die verdeckt waren.
Also: Ein Teil von mir war verdeckt, ich muss mich neuzeichnen. Der restliche Dialog macht es richtig.
@NoName: genau, da steht auch alles drin, beim verschieben des Dialogs klappts ja auch.
-
Wenn ich momentan ein Fenster "drüberziehe" dann zeichnet es sich halt nicht neu
Das ist nicht normal.
Zeig mal deine OnPaint.
-
void CDiagramm::OnPaint() { // DC holen um darin zeichnen zu können CPaintDC myDC(this); // Fläche des Dialogs bestimmen CRect CClientRect; GetClientRect(&CClientRect); // Rechteck um eins in jeder Richtung erhoehen da die // rechte untere Kante nicht mitgezeichnet wird! CClientRect.bottom++; CClientRect.right++; // CBrush CBkBrush; CBkBrush.CreateSolidBrush(RGB(255,255,255)); // Rechteck nun ausfuellen myDC.FillRect(&CClientRect,&CBkBrush); // Variable zum sichern das ausgewählten Stiftes CPen *pCOldPen; // Stift erzeugen CPen CBlackPen (PS_SOLID, 1, RGB(255,0,0)); // Stift auswählen und alten merken pCOldPen = myDC.SelectObject (&CBlackPen); myDC.MoveTo(10,CClientRect.bottom); myDC.LineTo(10,CClientRect.bottom - m_Wert[0]); myDC.MoveTo(12,CClientRect.bottom); myDC.LineTo(12,CClientRect.bottom - m_Wert[1]); myDC.MoveTo(14,CClientRect.bottom); myDC.LineTo(14,CClientRect.bottom - m_Wert[2]); myDC.MoveTo(16,CClientRect.bottom); myDC.LineTo(16,CClientRect.bottom - m_Wert[3]); // Alten Stift wieder setzen myDC.SelectObject (pCOldPen); }
there it is..
mehr wird eigentlich auch nicht gemacht, ausser im Konstruktur das Array mit Werten belegt. Er malt es ja auch. Nur wenn ich was drüberziehe wird ned neu gezeichnet