Seite 1 von 1

DC ich habs immer noch nicht kapiert =)

Verfasst: 08.08.2006 03:15
von MASH
Bitte könnt ihr mir mal den DC (Device Context) erklären ich habs immernoch nicht verstanden... danke also ich hänge gerade an so einer position wo ich ein hwnd bekommen habe auf dem ich einen kleinen Kreis Zeichnen möchte (r=10 pix) aber wie zum hencker funktioniert der dc ich bekomme immer nur overflows oder errors, weil ich auf dem falschen dinge zeichne, bitte bitte bitte bitte HILFFFFFFFFE!!!


Gruß MASH

UND DANKE

Verfasst: 08.08.2006 11:26
von Green Snake
Den DC bekommst du, wenn du die Nachricht WM_PAINT abfängst und entsprechend bearbeitest. (Ausserhalb von WM_PAINT ermittelst du den DC mit der Funktion GetDC_(hWnd) Dann aber ReleaseDC_() nicht vergessen!)

Um das Zeichnen zu beginnen musst du BeginPaint_(hWnd,Paint) aufrufen.

hWnd - Ist das Handle des Fensters auf dem du Zeichnen willst.
Paint - Paint ist ein Pointer auf die Struktur "PAINTSTRUCT"

Nach dem Aufruf von BeginPaint findest du im Feld Paint\hDC den DC des Fensters.

Anschliessend fürst du Zeichenoperationen aus. (Für den Kreis: Ellipse_(Paint\hDC,100,100,200,200))

Wenn du alles gezeichnet hast rufst du EndPaint_(hWnd,Paint) auf.

Hier ein kleines Beispiel:


Code: Alles auswählen


Procedure.l Callback(hWnd.l,Message.l,wParam.l,lParam.l)
  Protected Paint.PAINTSTRUCT
  
  Select Message
    Case #WM_PAINT                                                        ;{
      BeginPaint_(hWnd,Paint)
      
      Ellipse_(Paint\hDC,100,100,200,200)
      Rectangle_(Paint\hDC,300,300,400,320)
      
      EndPaint_(hWnd,Paint)
      ProcedureReturn #False
      ;}
      
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure



OpenWindow(0,100,100,640,480,"DC",#PB_Window_MinimizeGadget |#PB_Window_ScreenCentered)
SetWindowCallback(@Callback(),0)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

End


PS: Ich hoffe du meinst überhaupt das. :| :freak:

Verfasst: 08.08.2006 11:35
von MASH
genau richtig ich abe nach der funktion "BeginPaint" usw. gesucht und habe da was mit dem dc verwechselt aber das habe ich jetzt wneigstens auch verstanden und es hat echt geklappt danke nochmal =).

Verfasst: 08.08.2006 11:42
von Green Snake
:allright:

Falls du noch Farbe ins Spiel bringen willst, dann schau dir mal die Befehle CreateSolidBrush_(), CreatePen_() und SelectObject_() nach. (Da findest du noch einen Haufen weiterer Befehle :mrgreen: )

Und die goldene Regel nie vergessen: Alle Objekte:
hObj = CreateSolidBrush_() am Schluss immer schön mit DeleteObject_(hObj) freigeben :lol:


[Frage]
Bleiben Objekte, die nicht mit DeleteObject_() gelöscht wurde nach dem Beenden des Programms immer noch im Speicher?
[/Frage]

Verfasst: 08.08.2006 14:54
von MASH
jap farbe wollte ich noch anwenden, manche können halt gedankenlesen =)...

Verfasst: 17.08.2006 23:10
von Konne
[Frage]
Bleiben Objekte, die nicht mit DeleteObject_() gelöscht wurde nach dem Beenden des Programms immer noch im Speicher?
[/Frage]

Ich denke mal nein eigendlich bleibt nach dem beenden des programms garnix im Speicher.