Zum Inhalt springen

MFC: Graphik beschneiden


witch doctor

Empfohlene Beiträge

Hi,

ich muss innerhalb meines Studiums ein Programm schreiben,

welches Werte einliest und auch ausgibt. Ein Menüpunkt hat

beschäftigt sich mit der Darstellung einer Tabelle. Das ist auch nicht weiter ein Problem.

Das ganze sieht dann so aus:

tabelle.gif

Scrollen kann man in der Tabelle auch und das klappt auch.

tabelle2.gif

Ich bekomme jedoch Probleme, wenn das Fenster durch ein anderes verdeckt wird und dann sieht das ganze folgendermaßen aus:

tabelle3.gif

Das ist natürlich nicht gewollt.

Wie schaffe ich es, dass er den Bereich für das Neuzeichnen eingrenzt?

Meine OnPaint Methode sieht bisher folgendermaßen aus:

void Tabelle::OnPaint()

{

	CPaintDC dc(this); // device context for painting


	int az = DemoData.get_anz_z(); //Anzahl Zeilen

	int as = DemoData.get_anz_s(); //Anzahl Spalten



	dc.SetBkMode(TRANSPARENT);


	/*

		Namen ausgeben

	*/


	CRect namen;

	CString name;

	CString sp;


	sp.Format("Spalte:");


	CRect spa;

	spa.SetRect(8*abstand,abstand,0,0);


	dc.DrawText(sp,-1,&spa,DT_CALCRECT);


	dc.DrawText(sp,-1,&spa,DT_CENTER|DT_SINGLELINE|DT_VCENTER);


	namen.SetRect(abstand,2*abstand+feldhoehe,abstand+namenbreite,2*abstand+2*feldhoehe);



	void *oldfont;

	oldfont=dc.SelectObject(stdfont.tinybold);


	for(int i=0;i<az;i++)

	{

		name = DemoData.get_rname(i);

		dc.Rectangle(namen); //Rechteck zeichnen


		dc.DrawText(name,-1,&namen,DT_LEFT|DT_SINGLELINE|DT_VCENTER);

		namen.OffsetRect(0,feldhoehe); //Position an der y-Achse verschieben

	}


	/*

		Wertetabelle zeichnen

	*/


	//CRect werte;

	CRect spaltennummern;


	for(int z=0;z<az;z++)

	{

		for(int s=0;s<as;s++)

		{	

			int wert = DemoData.get_wert(z,s);


			if(wert<0)

			{

				/*

					Wenn der Wert negativ ist, wird

					er in roter Schrift geschrieben,

					ansonsten in schwarz

				*/


				dc.SetTextColor(RGB(255,0,0));

			}

			else

			{

				dc.SetTextColor(RGB(0,0,0));

			}


			CString ausgabe;

			ausgabe.Format("%d", wert); //Ausgabe der Werte


			/*

				Die aktuelle Position wird abgezogen, damit

				man in der Tabelle scrollen kann. 

				Die Koordinaten werden so aktualisiert.

			*/



			int xs=scrollrect.left+s*feldbreite-actpos;

			int ys=scrollrect.top;


			spaltennummern.SetRect(xs,ys,xs+feldbreite,ys+feldhoehe);

			dc.Rectangle(spaltennummern);


			CString spaltennummer;

			spaltennummer.Format("%i",s+1);


			dc.DrawText(spaltennummer,-1,&spaltennummern,DT_CENTER|DT_SINGLELINE|DT_VCENTER);


			int x = scrollrect.left+s*feldbreite-actpos;

			int y = scrollrect.top+abstand+feldhoehe+z*feldhoehe;


			werte.SetRect(x,y,x+feldbreite,y+feldhoehe);

			dc.Rectangle(werte);

			dc.DrawText(ausgabe,-1,&werte,DT_CENTER|DT_SINGLELINE|DT_VCENTER);

		}

	}



	dc.SelectObject(oldfont);

}

Unser Prof meinte, das wir das ganze über eine Clipping Region lösen sollten, doch so wirklich weiß ich nicht wie ich das machen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...