Drawtext Problem - Text wird nciht von Anfang an über Bild gemalt



  • Hallo,

    es ist zum Knochenkot...

    Ich habe ein Bild. In dieses Bild will ich mit Hilfe von Drawtext text malen.
    Ich rufe das ganze in OnPaint auf:

    m_cfmheader ist das Bild.

    void CTagesansicht::OnPaint() 
    {
    
    	CPaintDC dc(this); // device context for painting
    
    	CRect rect; 
    	GetClientRect(&rect); 
    	dc.FillSolidRect(&rect,RGB(231,246,254)); 
    
    	CRect rect_user, rect_datum;
    
    	m_cfmheader.GetClientRect(&rect_user);
    
    	CDC* cdc = m_cfmheader.GetWindowDC();
    
    	cdc->SetBkMode(TRANSPARENT);
    	cdc->DrawText("Test-Text",rect_user,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
    
    }
    

    Der Text wird erst gemalt, sobald ich das ganze Fenster aus dem Bildschirmberecih ziehe und wieder zurückschiebe.

    Verstehe ich nicht.

    Ich weiß, dass mir hier Basics fehlen. Bestimmt irgendetwas mit validate oder ähnlichem...
    Mir ist bis dato nicht klar, warum es überhaupt validate gibt...

    Ist aber sekundär, generell wäre es schön, wenn mein Text von Anfang an auf dem Bild erscheinen würde... 🙂

    Grüße und Danke

    BOA


  • Mod

    Genau! Dir fehlen Grundlagen!

    Wenn Du willst, dass das Fenster neu angezeigt werden sol, weil sich etwas geändert hat, dann solltest Du das mit Invalidate dem Fenster auch mitteilen.

    Nur dann wird ein OnPaint/WM_PAINT neu ausgelöst.

    Siehe auch InvalidateRect/UpdateWindow/RedrawWindow



  • Morgen,

    Danke für die schnelle Antwort.

    Das für mich persönlich unbefriedigende ist, dass ich bis dato keine vernünftigen Quellen für genau diesen Bereich der Basics gefunden habe. Für einen Tip(p) wäre ich dankbar.

    Aber zum Thema.

    Wo wird das Invalidate aufgerufen ?
    Wann soll ich also dem Fenster das mitteilen ?

    Ich male ja in der OnPaint, wie Du siehst. Also muss ich es danach aufrufen, wenn er das erste mal durch ist.

    Nur wo ?

    Grüße und Danke

    Sven


  • Mod

    Lies ein Tutorial!



  • Hi noch einmal,

    ich wäre dankbar für eine gute Quelle. Das Lesen soll nicht das Problem sein.
    Wie ich schon schrieb, ich fand bis dato kein gutes Tutorial...

    Grüße und Danke

    BOA


  • Mod

    BOA schrieb:

    ich wäre dankbar für eine gute Quelle. Das Lesen soll nicht das Problem sein.
    Wie ich schon schrieb, ich fand bis dato kein gutes Tutorial...

    Dann lies die FAQ und suche in diesem Forum nach Tutorial!

    Ich habe keine Lust Basics, die selbst in schlechten Tutorials zu lesen sind durchzukauen.



  • Hallo,

    danke für die klaren Worte.

    Tip meinerseits an Dich. Wenn Dir das alles zu pipi ist, antworte gar nicht erst auf diese Art von Fragen. Denn Deine Antworten bringen niemanden etwas in dieser Form.

    STOP ! Ich will keine Diskussion über Suchen und den Sinn und Zweck von Foren lostreten!!!!

    Denk dran, Deine Zeit ist wertvoller... 😃

    @alle anderen außer Maddin Rischter
    Kann mir jemand nen Tip geben, an welcher Stelle ich das validate setzen muss...?

    Danke und Grüße

    BOA



  • Um das mal einfach zu erklären (ich Versuch das zumindest). In der OnPaint kannst du nur das Zeichnen was zu dem Window (Dialog) gehört. Da deine Variable m_cfmheader sicher ein anderes Window (oder auch CStatic oder was auch immer) ist, mußt du eine entsprechende Klasse dafür ableiten (also wenn es ein CStatic ist dann ne abgeleitete klasse von CStatic) und dort die OnPaint überschreiben.

    Willst du jetzt den Anzeigetext dynamisch ändern, dann erstellst du dir eine Membervariable in deiner abgeleiteten Klasse, setzt den Text neu und Rufst dann Invalidate() auf um das neu Zeichnen des Texttes zu erzwingen, dabei wird automatisch die OnPaint deine abgeleiteten Klasse aufgerufen und der neue text gezeichnet.

    Hoffe das es jetzt einigermaßen verständlich rüber gekommen ist



  • Hi,

    danke, das probiere ich einfach mal und werde berichten. 👍

    Grüße und Danke....

    BOA



  • Hallo Ctecs,

    hat funktioniert.

    Durch Deine Hinweise habe ich erst verstanden, dass ich die falsche onPaint beackert habe.
    Das war der entscheidende Hinweis, der zum Erfolg führte. 👍 👍 👍 👍 👍

    Tausend Dank noch einmal.

    Grüße

    BOA


Anmelden zum Antworten