mittels StartDrawing(..) auf ein existierendes DC zeigen ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

mittels StartDrawing(..) auf ein existierendes DC zeigen ?

Beitrag von andi256 »

Hallo und ein verspätetes gutes Neues!!!

werke gerade an einer Druck-applikation (druck eines pdf mittels "Adobe PDF")

... hab mir da hier im Forum auch schon einen Source Code kopiert und ein wenig angepasst ...
http://forums.purebasic.com/german/view ... 88857a8485

im Code wird mittels api ein DC erzeugt:

Code: Alles auswählen

DC.l = CreateDC_(@lpszDriver, ImprimanteParDefaut, 0, *PrinterParameters) 
in dem ich mittels api schreiben kann und auch drucken kann ...

Code: Alles auswählen

 StartDoc_(DC,Docinfo)
 StartPage_(DC) 
 
 text$ = "TEST ANDI"
 TextOut_(DC,0,0,text$,Len(text$))
 
 EndPage_(DC) 
 EndDoc_(DC)
soweit so gut !!!

nun möchte ich aber per Purebasic-Befehlen zeichnen (BOX(),DRAWIMAGE(),LINE() ... etc)

Wie kann ich StartDrawing(.?????.) dazu bringen auf das oben genertierten (DC)device context zu zeigen ??? damit ich mit PB Befehlen arbeiten und die Seite gestalten kann und nicht nur mit api-Befehlen ...

Hoffe hab das einigermassen verständlich rübergebracht ... :-)

Danke im Voraus ...
andi256
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: mittels StartDrawing(..) auf ein existierendes DC zeig

Beitrag von edel »

Eigentlich gar nicht, da es von Purebasic nicht unterstuetzt wird.

Falls du doch noch rummalen moechtest,kannst du mal folgenden Code ausprobieren

Code: Alles auswählen

Import ""
	PB_2DDrawing_PrepareGDI()
EndImport

Procedure OutputFromDC(hDC)
	Protected *mem = PB_2DDrawing_PrepareGDI()
	
	CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
		;PokeI(*mem + $130, hDC)
	CompilerElse
		PokeI(*mem + $D0, hDC) ; PB 5.31
	CompilerEndIf 
	
	ProcedureReturn *mem
EndProcedure
Test :

Code: Alles auswählen

Procedure start()
	
	Protected window
	Protected event
	Protected hDC
	
	window = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300, 300, "")
	
	Repeat
		
		event = WaitWindowEvent()
		
		If  ( event = #PB_Event_CloseWindow )
			Break
		EndIf
		
		If  ( event = #PB_Event_Repaint )
			
			hDC = GetDC_(WindowID(window))
			
			StartDrawing(OutputFromDC(hDC))
				Box(10, 10, 100, 100, $71583A)
			StopDrawing()
			
			ReleaseDC_(WindowID(window), hDC)
			
		EndIf
		
	ForEver
	
EndProcedure


End start()
Antworten