Seite 1 von 1

PureBasic und hWnd's ???

Verfasst: 12.10.2005 01:31
von PureLust
Hallo zusammen, ...

ich würde gerne in Pure eine DLL schreiben, an die u.A. ein Windows-Handle (hWnd) übergeben wird.
Nun weis ich jedoch nicht genau, wie ich anschließend über PureBefehle auf das Zielfenster mit diesem Windows-Handle zugreifen kann.

Gibt es einen direkten Zusammenhang zwischen einer Pure-WindowsID() und dem Windows-hWnd bzw. dem Windows-DC und wie könnte man das hWnd dann in PB-Befehlen einsetzen (z.B. bei StartDrawing(hWnd))?

In der OnlineHilfe zu StartDrawing() steht zwar drin, dass StartDrawing() als Ergebnis das DC liefert - aber das hab ich ja schon, bzw kann ich mir per API ja aus dem übergebenen hWnd erstellen.

Was müsste ich denn machen, damit ich mit Hilfe eines hWnd's anschließend durch reine PureBefehle (also z.B. durch Circle() oder Box() und eben nicht durch API-Calls wie z.B. DrawText_()) Ausgaben auf diesem Fenster machen kann oder dort evtl. sogar Gadgets erzeugen könnte?

Hätte da evtl. jemand eine Idee oder sogar schon Erfahrung mit?
Oder ist dies in Pure garnicht möglich?


Big ThanX und Gruß, PL.

Verfasst: 12.10.2005 12:18
von hardfalcon
Vielleicht so:

Code: Alles auswählen

StartDrawing(hwndDeinesFensters)
blabla()
StopDrawing()
Ich hab jetzt allerdings auch nur geraten, und bin mir keinesfalls sicher, ob es wirklich funzt... :freak:

Verfasst: 12.10.2005 12:27
von andi256
@purelust ... habe das auch schon mal gebraucht ..und bin aber nicht fündig geworden ...

Code: Alles auswählen

#window = 0
#window1 = 1

hwnd = OpenWindow(#window,300,300,100,100,#PB_Window_SystemMenu,"hwnd") 
 
If OpenWindow(#window1,200,200,100,100,#PB_Window_SystemMenu,"test")  And CreateGadgetList(WindowID(0))  
 If StartDrawing(hwnd) 
 Box (10,10,10,10,5) 
 StopDrawing()
 EndIf 
 Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf 
wobei "#window" nicht bekannt ist ... da das Window-handle von extern(dll) erzeugt wurde.

damals hab ich dann halt mit api weitergemacht ....

@hardfalcon ... funzt so nicht siehe Code oben ...

"The specified output is invalid"

Andi256

Verfasst: 12.10.2005 12:49
von Deeem2031
Vielleicht solltet ihr mal einen Blick in den "Library SDK"-Ordner riskieren ;)

Code: Alles auswählen

Structure DrawingInfoStruct
  Type.l    ; Type of the DC
  Window.l  ; Window associated to the DC (if any)
  DC.l      ; DC
  ReleaseProcedure.l ; Address to a procedure to release the DC when StopDrawing() is called 
  PixelBuffer.l      ; Address of the memory pixel buffer (DirectX)
  Pitch.l            ; Pitch
  Width.l
  Height.l
  Depth.l
EndStructure

#window = 0 

Global Wnd_DIS.DrawingInfoStruct

Procedure ReleaseDC()
  ReleaseDC_(Wnd_DIS\Window,Wnd_DIS\DC)
EndProcedure

hwnd = OpenWindow(#window,300,300,100,100,#PB_Window_SystemMenu,"hwnd") 
  
If hwnd
  Wnd_DIS\type = 1
  Wnd_DIS\window = hwnd
  Wnd_DIS\dc = GetDC_(hwnd)
  Wnd_DIS\ReleaseProcedure = @ReleaseDC()
  Wnd_DIS\width = WindowWidth()
  Wnd_DIS\height = WindowHeight()
  If StartDrawing(Wnd_DIS) 
    Box (10,10,10,10,5) 
    StopDrawing() 
  EndIf 
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf