PureBasic und hWnd's ???

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

PureBasic und hWnd's ???

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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:
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

Beitrag 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
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten