SetViewportExt mit CMemDC verheiraten geht nicht

pospiech

Grünschnabel
Ich nutze die Klasse CMemDC (double buffering) als dc Ersatz. Nun möchte ich hineinzeichenen, allerdings mit einem anderen Koordinatensystem. Grund ist das ich Daten aus einem Array plotten möchte das nicht die Größe des Windows hat.

Das sollte mit SetViewportExt zu machen sein. Also habe ich in CMemDC die Zeilen
(CMemDC: http://www.codeproject.com/gdi/flickerfree.asp)

C++:
SetMapMode(pDC->GetMapMode());
SetWindowExt(pDC->GetWindowExt());
SetViewportExt(pDC->GetViewportExt());
zu
C++:
SetMapMode(MM_ANISOTROPIC);       
SetWindowExt(CSize(m_rect_dest.Width(), m_rect_dest.Height()));
SetViewportExt(CSize(m_rect_source.Width(), m_rect_source.Height()));
m_rect_source gibt die Größe der Datenquelle und m_rect_dest die Größe des Windows an.

Das ganze funktioniert auch, die Daten werden skaliert, ABER
bei Ausgeben der Daten wird nur die Größe von m_rect_source ausgegeben, bzw. konkret:

Wenn das Window die Größe 100x100 hat die Daten aber nur 50x50 dann werden diese auf 100x100 hochskaliert, davon aber nur 50x50 ausgegeben. Wenn die Daten eine Größe von 300x300 haben dann werden auch diese auf 100x100 skaliert, aber nur der Bereich 33x33 ausgegeben, also immer nur der Teiler.

Ich bin total ratlos was da falsch läuft und bitte um Hilfe.

Matthias
 
Hallo,

so wie ich das sehe, änderst du die Daten, nachdem der DC schon erzeugt wurde. Da der aber vom alten DC abgeleitet wurde, wird hier das Problem liegen. Denn auch die Bitmap wird mit den ClipRect-Daten des alten DC erzeugt. Ob es mit CMemDC überhaupt möglich ist, mit anderer Auflösung in einen DC zu zeichnen, weiß ich nicht, aber der Quelltext läßt eigentlich keine andere Deutung zu.

Mfg

langer
 

Neue Beiträge

Zurück