Hallo, Leute. Ich brauche dringend Ihre Hilfe.
Eine MDI-Anwendung.In neuem Fenster wird ein Bild
geladen und über dieses Bild soll eine Kurve
gezeichnet werden. Bild ist ziemlich groß.
Deshalb ich habe den VScrollView benutze.
Eigentlich alles funktioniert, aber überhaupt nicht so,
wie ich es wollte. Kurve, die gezeichnet wird
über Bild, ist auch sehr Gross. Um Sie zusehen
muss auch geschrollt werden. Und hier kommt das Problem.
Sobald ich Fenstergröße geändere, pasiert alles,
wie ich es wollte. Aber wenn ich klicke auf
den Pfeil des Schrollleiste,Bild schrollt aber Linie sofort verschwindet.
Wenn ich schreibe:
pDoc->UpdateAllViews(NULL);
Linie bleibt, aber das Fenster fackelt
wie verrückt. Hier ist meine Code.
Bestimmt gibt's andere Lösung für dieses Problem.
Ich kenn ihn aber nicht. Und wäre dankbar für jeder Hilfe.
P.S. Um Bilde zu anzeigen, ich benutze CImage.
--------------------------------------------------------------------------------
Eine MDI-Anwendung.In neuem Fenster wird ein Bild
geladen und über dieses Bild soll eine Kurve
gezeichnet werden. Bild ist ziemlich groß.
Deshalb ich habe den VScrollView benutze.
Eigentlich alles funktioniert, aber überhaupt nicht so,
wie ich es wollte. Kurve, die gezeichnet wird
über Bild, ist auch sehr Gross. Um Sie zusehen
muss auch geschrollt werden. Und hier kommt das Problem.
Sobald ich Fenstergröße geändere, pasiert alles,
wie ich es wollte. Aber wenn ich klicke auf
den Pfeil des Schrollleiste,Bild schrollt aber Linie sofort verschwindet.
Wenn ich schreibe:
pDoc->UpdateAllViews(NULL);
Linie bleibt, aber das Fenster fackelt
wie verrückt. Hier ist meine Code.
Bestimmt gibt's andere Lösung für dieses Problem.
Ich kenn ihn aber nicht. Und wäre dankbar für jeder Hilfe.
P.S. Um Bilde zu anzeigen, ich benutze CImage.
--------------------------------------------------------------------------------
Code:
oid CKurierView::OnDraw(CDC* pDC)
{
CKurierDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint pos(GetScrollPosition());
CRect rect;
GetClientRect(&rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
if (pDoc->GetImage())
{
int x = -pos.x;
int y = -pos.y;
if (width >= pDoc->GetImage()->GetWidth())
x = (width - pDoc->GetImage()->GetWidth())/2;
if (height >= pDoc->GetImage()->GetHeight())
y = (height - pDoc->GetImage()->GetHeight())/2;
CDC *dc = GetDC();
CPalette *hOldPal = 0;
if (pDoc->GetImage()->GetPalette())
{
hOldPal = dc->SelectPalette(pDoc->GetImage()->GetPalette(), TRUE);
dc->RealizePalette();
}
if (pDoc->GetStretchMode())
{
SetScrollSizes(MM_TEXT,
CSize(0,0));
pDoc->GetImage()->Stretch(dc, 0, 0, width, height);
}
else
{
SetScrollSizes(MM_TEXT,
CSize(pDoc->GetImage()->GetWidth(), pDoc->GetImage()->GetHeight()));
pDoc->GetImage()->Draw(dc, x, y);
//Linie zeichnen
CPoint Erste, Zweite;
Erste.x = 70; Erste.y = 360;
Zweite.x = 300; Zweite.y = 460;
DrawLine(pDC,Erste ,Zweite);
pDoc->UpdateAllViews(NULL);
}
dc->SelectPalette(hOldPal, TRUE);
ReleaseDC(dc);
}
// TODO: Code zum Zeichnen der systemeigenen Daten hinzufügen
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void CKurierView::DrawLine(CDC * pDC, CPoint pStart, CPoint pEnd)
{
CRect lRect;
GetClientRect(lRect);
lRect.NormalizeRect();
CPen lSolidPen (PS_SOLID, 3, RGB(0,0,0));
CPen *pOldPen;
pOldPen = pDC->SelectObject(&lSolidPen);
pDC->MoveTo(pStart );
pDC->LineTo(pEnd);
pDC->SelectObject(pOldPen);
ReleaseDC(pDC);
}