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)
zu
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
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());
C++:
SetMapMode(MM_ANISOTROPIC);
SetWindowExt(CSize(m_rect_dest.Width(), m_rect_dest.Height()));
SetViewportExt(CSize(m_rect_source.Width(), m_rect_source.Height()));
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