DC ich habs immer noch nicht kapiert =)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

DC ich habs immer noch nicht kapiert =)

Beitrag 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
Danke Mark S.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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:
-.-"
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag 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 =).
Danke Mark S.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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]
-.-"
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

jap farbe wollte ich noch anwenden, manche können halt gedankenlesen =)...
Danke Mark S.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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.
Antworten