?
Tut mir leid dass ich jetzt erst schreibe.
Aber gestern konnte ich nicht mehr schreiben.
Ich würde an deiner Stelle mit einer fixen Größe von CImage arbeiten.
Dass erleichtert die Umrechnung der Daten und man muß das Bild nicht immer wieder neu zeichnen.
Außerdem ist dann nicht dass Problem dass beim Verkleinern des Bildes Daten verliert.
Passe einfach die Größe des Bildes mit StretchBlt an die Fenstergröße an.
Ein kleines Beispiel:
//OnDraw/OnPaint bzw. OnEraseBkgnd
if (!cMapImage.IsNull())
{
// Damit wird dass Bild schöner, braucht aber ein wenig mehr Rechnerleistung
dc.SetStretchBltMode(HALFTONE);
// Das Bild/die Linien auf den Bildbereich klatschen und dabei die Größe anpassen
StretchBlt(dc.GetSafeHdc(),
0,
0,
Anzeigebreite,
Anzeigehöhe,
cMapImage.GetDC(),
0,
0,
cMapImage.GetWidth(),
cMapImage.GetHeight(),
SRCCOPY);
cMapImage.ReleaseDC();
}
void CChildView::OnSize(UINT nType, int cx, int cy)
{
CWnd ::OnSize(nType, cx, cy);
Anzeigebreite = cx;
Anzeigehöhe = cy;
Invalidate();
UpdateWindow();
}
// Diese Funktion wird nur beim Starten des Programms -> Ein Ausführen in OnSize,... ist nicht nötig
void CChildView::InitScreen()
{
if (!cMapImage.IsNull())
{
cMapImage.Destroy();
}
cMapImage.Create(500,500,24);
CDC* dc = CDC::FromHandle(cMapImage.GetDC());// DC zum malen holen.
CBrush cBrush;// Pinsel deffinieren
cBrush.CreateSolidBrush(COLORREF(0x0000FF));// Die Farbe rot wählen
CBrush* cOldBrush = dc->SelectObject(&cBrush);
dc->Rectangle(0,0,cMapImage.GetWidth(),cMapImage.GetHeight());
// Aufräumen nicht vergessen
dc->SelectObject(cOldBrush)
}