[C# / CF] GDI tekening _met_ scrollbar

Pagina: 1
Acties:

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Hey,

ik werk op dit moment aan een utility voor de PDA met C# / compact framework.
Met GDI maak ik op basis van een array een tekening op het hoofdformulier.
Dit ging altijd goed, maar nu de array ineens een stuk groter is, wordt mijn tekening in de lengte (horizontaal) groter dan op het scherm van een PDA mogelijk is, dus wil ik er graag voor zorgen dat de user de mogelijkheid heeft om in deze tekening horizontaal te kunnen scrollen.

Ik zat er eerst aan te denken om misschien die tekening op een panel met scrollbar te tekenen, maar dit krijg ik niet echt voor elkaar.

Is dit wel de manier waarop ik het zou moeten doen, of hebben jullie een ander idee?
Ik heb het al eens eerder gezien in een andere util, dus het is voor zover ik weet wel mogelijk...

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Wat ik hier doe is zodra de ruimte waarop je teken groter is dan de VisibleClipBounds, dan toon ik gewoon een scrollbar. Met de Minimum op 0 en Maximum op het aantal pixel verschil.

Bij het ValueChanged oid event van de scrollbar doe ik een repaint met een bepaalde offset, namelijk de waarde van de scrollbar.

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
questa schreef op woensdag 21 december 2005 @ 10:49:
Wat ik hier doe is zodra de ruimte waarop je teken groter is dan de VisibleClipBounds, dan toon ik gewoon een scrollbar. Met de Minimum op 0 en Maximum op het aantal pixel verschil.

Bij het ValueChanged oid event van de scrollbar doe ik een repaint met een bepaalde offset, namelijk de waarde van de scrollbar.
Bedankt voor de tip... daar had ik nog niet aan gedacht :)

Ik heb ondertussen al wat aan het bewegen gekregen op m'n scherm, gaat goed komen ;)

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Ik heb het scrollen nu perfect werkend, echter schokt het wel heel erg op het moment dat ik aan het scrollen ga.

Ik voer this.Refresh() uit nadat ik de x waarde van m'n tekening heb gewijzigd (in het scrollbar value changed event).

Heb ooit gelezen dat dit met double buffering op te lossen zou zijn, maar volgens mij kan dat niet op de PDA.

Iemand een idee hoe ik dit op los? Heb het idee dat die refresh te zwaar is... of ligt dit gewoon aan de grootte/zwaarte van mijn OnPaint event?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Gebruik liever Invalidate, dan kun je ook een region specificeren die invalid is.

Hetgene wat je tekend zou je kunnen bufferen in een Bitmap, zodat je alleen de Bitmap repaint op een anderen locatie, dus met de offsets van je scroll-values.

Ik weet niet hoe groot het is wat je tekend, maar als de omvang niet enorm is is een Bitmap zeker een goede uitkomst.