CView in CScrollView Was gibt es zu beachten?

Hallo

Ich habe vor kurzem die Arbeit ein einem meiner größeren Projekte wieder aufgenommen.

Veränderte Gegebenheiten machen es nötig, das ich jetz in einer Ansicht scrollen muss/möchte, die bis vor kurzem von CView abgeleitet ist.

Da das Projekt sehr groß ist, ist es so gut wie unmöglich, das ganze nochmal zu machen und diesmal von CScrollView abzuleiten.

Deshalb hab ich alles in der Klasse (was ich gefunden habe) von CView in CScroll View umgeleitet, SetScrollSizes() in InitalUpdate() eingebaut, aber nix passiert.

Worauf muss ich achten/ was muss ich machen, damit Scrollfelder an der Seite auftauchen, damit ich scrollen kann?

Ich hoffe ihr könnt mir helfe, vielen Dank schonmal.

DR
 

langer1801

Erfahrenes Mitglied
Hi,

wenn du wirklich alle Vorkommen von CView in CScrollView geändert hast, sollte es eigendlich klappen. Beachte, dass die ScrollBars erst eingeblendet werden, wenn sizeTotal größer ist als das Client-Rect. Möglich wäre auch, dass es Probleme mit vorkompilierten Headern gibt. Ein RebuildAll schon mal probiert?

Mfg

langer
 
Ich habe wirklich alle CView in CScrollView geändert.
In VisualStudio reagier die Klasse auch als CScrollView.

Auch nac rebuildAll verändert sich nichts an der Lage.

Ich denke mein sizeTotal ist größer als das client rect, ch probiere sogar Zeichen außerhalb des Bildschirmbereichs zu zeichnen, aber es tut sich nichts:

C++:
void CVokMainView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
	 
	//ShowScrollBar(SB_HORZ,TRUE);

	CSize sizeTotal; 
    sizeTotal.cx = 3000;     // x-Achse
    sizeTotal.cy = 680;     // y-Achse 
    SetScrollSizes(MM_TEXT, sizeTotal);

	SetScrollSizes(MM_TEXT,sizeTotal);
	
}

und

C++:
RECT rect;
	GetClientRect(&rect);
	
	m_ptScrollPos=GetScrollPosition();

	CBitmap bg;
	BITMAP bm;
	bg.LoadBitmap(IDB_VOK_BG);//BITMAP laden
	bg.GetObject(sizeof(bm),&bm);
		
	CDC speicherDC;
	speicherDC.CreateCompatibleDC(pDC);

	//Falls am Anfang, anfangsbild zeichnen
	speicherDC.SelectObject(&bg);
	
pDC->StretchBlt(0,m_ptScrollPos.y,rect.right-rect.left,rect.bottom,&speicherDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
	
	//Schriftart erstellen und selektieren
	pDC->SetTextColor(RGB(60,40,20));
	pDC->SetBkMode(TRANSPARENT);
	CFont myFont;


	myFont.CreatePointFont(170,"Day Roman");
	pDC->SelectObject(&myFont);
	RECT myrect;
	myrect.bottom=1000;
	myrect.top=300;
	myrect.left=100;
	myrect.right=1000;

	m_strTxt="qwert[....]qweqwe"

	pDC->DrawText(m_strTxt,&myrect,0);

	//falls gescrollt wurde
	if(m_ptScrollPos.y != m_ptOldScrollPos.y)
	{
		//RedrawWindow();
		m_ptOldScrollPos.y=m_ptScrollPos.y;
		//IsChanged=false;
	}
 
Zuletzt bearbeitet von einem Moderator:

langer1801

Erfahrenes Mitglied
Hi,
ich habe mal schnell ein einfaches Projekt erstellt mit CView als Basisklasse und dann manuell CScrollView daraus gemacht. Funktioniert tadellos. Da mußt du doch etwas vergessen haben zu ändern. Eigentlich sind es nur wenige Änderungen in .h- und .cpp-Datei. Im Header eine und im Quelltext zwei. Und OnInitialUpdate überschreiben.

Mfg

langer
 
Hmmm.Keine Ahnung. Es ist eigtl. alles so wie es seien sollte....

Ich habe jetzt den Quellqode einer anderen CScrollview-Datei in die *cpp datei kopiert und modifiziert...und es klappt :confused:

Naja..was solls, wenn ich herausgefunden habe, woran es gelegen hat, lasse ich es euch wissen. Danke trotzdem. :)

mfg