PictureBoxMemoryDC

20/04/2008 - 13:24 von M.K. | Report spam
Hallo NG,

bisher habe ich gegen den DC einer Picturbox gezeichnet(BitBlt), macht aber
leider ab einer bestimmten Bildgröße Probleme (Autoredraw Fehler 480) bei
zuweisen
Set Pic.Picture=Pic.Image.
Nun möchte ich die ganze Zeichnerei im Speicher erledigen, und dann
entsprechend nur einen (scrollbaren) Ausschnitt in der Picturbox anzeigen.
Bisher habe ich die Picturebox dynamisch vergrößert, je nach benötigter
Zeichenflàche.
Wie wird das bei einem MemoryDC gehandhabt? Muß dieser vor dem Zeichnen in
seiner endgültigen Größe
festgelegt werden, oder kann dieser auch dynamisch angepasst werden? Das
Bild soll danach auch gespeichert werden können, bzw. als stdPicture
vorliegen.
Für ein paar Tip's wàre ich sehr dankbar!

Viele Grüße

Manuel Keller
 

Lesen sie die antworten

#1 Thorsten Albers
20/04/2008 - 13:37 | Warnen spam
M.K. schrieb im Beitrag
...
Wie wird das bei einem MemoryDC gehandhabt? Muß dieser vor dem Zeichnen


in
seiner endgültigen Größe
festgelegt werden, oder kann dieser auch dynamisch angepasst werden? Das
Bild soll danach auch gespeichert werden können, bzw. als stdPicture
vorliegen.
Für ein paar Tip's wàre ich sehr dankbar!



Du kannst die Größe eines (Speicher-)Geràtekontextes nicht festlegen, da
dieser lediglich eine Art 'Container' für das Zeichnen darstellt.
Entscheidend für die Größe ist die Zeichenflàche sprich Bitmap, die in
diesen Geràtekontextes selektiert wird (Du kannst in einen Geràtekontext
gar nicht zeichnen, wenn in ihn keine Zeichenflàche/Bitmap selektiert ist).
Bei einer PictureBox übernimmt VB das Erstellen und die Selektion der
Zeichenflàche/Bitmap für Dich, bei einem Speicher-Geràtekontext mußt Du es
selber machen. Schematisch:

- Speicher-Geràtekontext erstellen:
hDCMem = CreateCompatibleDC(...)
- Zeichenflàche erstellen (Größe! Nur eine Möglichkeit von vielen)
hBmp = CreateCompatibleBitmap(...)
- Zeichenflàche dem Geràtekontext zuweisen
hBmpPrev = SelectObject(hDCMem, hBmp)
...
- Geràtekontext in den Ursprungszustand zurücksetzen:
hBmp = SelectObject(hDCMem, hBmpPrev)
- Zeichenflàche löschen
Call DeleteObject(hBmp)
- Speicher-Geràtekontext löschen
Call DeletedDC(hDCMem)

-
Thorsten Albers albers(a)uni-freiburg.de
-

Ähnliche fragen