Problem mit CDC
-
Hey guys,
ich hab da eine assertion mit CDC und weiss nich wieso.
ASSERT(m_hDC != NULL);Diese assert tritt auf, wenn ich die Fenstergrösse meiner View veränder (durch mausclick) und nebenbei in einem Thread mit pDC male.
ich habe auch ein mutex um das zeichnen gepackt, doch leider tritt mit und ohne mutex diese assert auf. Kann mir da jemand weiterhelfen oder hat einen Tipp wonach ich schauen könnte?Thx in advance,
Mike
-
Es sit schon gefährlich, im Hauptthread außerhalb der OnPaint() etwas auf den Monitor malen zu wollen - erst recht endet es in einer Katastrophe, wenn du aus einem anderen Thread dein Fenster übermalen willst. Bau lieber dein Programm um und konzentriere die Direktausgaben dorthin, wo sie hingehören - in die OnPaint().
-
hmm ok.
also es it so, dass ich nicht im Thread mit pDC->x() zeichne.
Ich benutze eine gekapselte "zeichnen" klasse. Diese besitzt eine methode, "update()" welche wiederrum dann intern in der "zeichnen" klasse irgendetwas macht und die objekct in meiner view dementsprechend aktualisiert.
So wäre absolut falsch, ich sollte die "update()" in die OnPaint() meines Hauptthreads packen? so?
cheers,
mike
-
so ich habs nun so um gestalltet...

es tratt noch keine assertion auf, müsste das aber noch etwas länger testen.
Jetzt wird das update nicht mehr in einem thread aufgerufen sondern in der OnPaint(), dadurch ruckelt mein fenster nun wenn ich die grösse mit der maus veränder.
Sollte das so sein? Oder hab ich deinen Vorschlag doch falsch verstanden?
-
Das update() kannst du schon dort ausführen, wo es benötigt wird - allerdings sollte die "zeichnen-Klasse" nicht als Reaktion darauf auf den Monitor malen.
(du kannst dir einen eigenen MemoryDC anlegen, in den zu zeichnest - und dessen Inhalt du in der OnPaint()-Verarbeitung zum Monitor kopierst)