CScrollView und SetViewportOrg(...)



  • Hallo,

    ich kämpfe seit längerem damit, in dem Fenster, das einem CScrollView-Objekt gehört den Origin zu verschieben. Ich verwende den MM_HIMETRIC Mapmode. In OnPrepareDC steht:

    void CCMZoomView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    	CRect rect;
    	GetClientRect (&rect);
    	pDC->SetViewportOrg(0,rect.Height());
    
    	CScrollView::OnPrepareDC(pDC, pInfo);
    }
    

    Das müßte, wenn ich es richtig verstehe, für den aktuell sichtbaren Ausschnitt der ScrollView den Origin in die linke untere Ecke setzen. Nicht für die sog. TotlSize, dem gesamten durchscrollbaren Bereich. Braucht es auch nicht, solange diese 3 Zeilen unter OnPrepareDC stehen, oder?

    Unter OnDraw steht:

    void CCMZoomView::OnDraw(CDC* pDC)
    {
    	CSize size = GetTotalSize();
    
    	int nSave = pDC->SaveDC();
    
    	CPen pen (PS_SOLID,50,RGB(250,0,150));
    	CPen *pOldPen = pDC->SelectObject(&pen);
    	for(int i=0;i<500;++i)
    	{
    		int y = i*600;
    		pDC->MoveTo(1000,y);
    		pDC->LineTo(size.cx,y);
    	}
    	CPen pen1(PS_SOLID,100,RGB(0,0,0));
    	CBrush brush1(RGB(0,255,0));
    	pDC->SelectObject(&pen1);
    	pDC->SelectObject(&brush1);
    	pDC->Ellipse(0,0,10,10);
    	pDC->SelectObject(pOldPen);
    
    	pDC->RestoreDC( nSave );
    
    }
    

    Weil ich ja den Origin in die linke untere Ecke des Fensters plaziert habe, kann ich Grafikobjekte (Linien Kreise etc.) mit positiven x- und y-Werten zeichnen.
    Die logischen Koordinaten für Ellipse(x,y) bzw LineTo(x,y) sollten in die Devicekoordinaten bezüglich des Origin gemappt werden.
    Aber nichts der Gleichen funktioniert.
    Der DeviceContext akzeptiert scheinbar unter CScrollView keine derartige Manipulation des Origin.

    Hat jemand eine Idee, wie man es dann lösen könnte? Vielleicht versteh ich aber hier auch etwas grundverkehrt.


Log in to reply