CaptureGadget() = capture des gadgets crées sur cette fenetre
CaptureGadget2() = variante de la capture du gadget en passant par le clipboard
curieusement, il faut que la capture des gadgets ou de la fenetre soit appelée dans la boucle d'évenement , sinon l'image de la fenetre ne contient pas les gadgets et l'image des gadgets est vide ??? pas vraiment compris pourquoi...
Code : Tout sélectionner
Enumeration
#fen0
#gadget
#img_fen0
#img_gadget
EndEnumeration
Procedure CaptureFenetre(ID_image.l,handle_objet,CoordX,CoordY)
GetWindowRect_(handle_objet,a.rect)
hBitmap = CreateImage(ID_image, a\right,a\bottom)
hdc = StartDrawing(ImageOutput(ID_image))
SelectObject_(hdc, hBitmap)
result = BitBlt_(hdc, 0,0,a\right,a\bottom, GetDC_(GetDesktopWindow_()), CoordX,CoordY, #SRCCOPY)
StopDrawing()
DeleteDC_(hdc)
EndProcedure
Procedure.l CaptureGadget(ID_image.l,handle_objet,CoordX,CoordY,largeur,hauteur)
GetWindowRect_(handle_objet,a.rect)
hBitmap = CreateImage(ID_image, largeur,hauteur)
hdc = StartDrawing(ImageOutput(ID_image))
SelectObject_(hdc, hBitmap)
result = BitBlt_(hdc, 0,0,largeur,hauteur, GetDC_(GetDesktopWindow_()), a\left,a\top, #SRCCOPY)
StopDrawing()
DeleteDC_(hdc)
EndProcedure
Procedure CaptureGadget2(ID_image.l,handle_objet, left.l, top.l, Width.l, Height.l) ;;; marche
GetWindowRect_(handle_objet,a.rect)
dm.DEVMODE ;structure for CreateDC()
srcDC.l
trgDC.l
BMPHandle.l
srcDC = CreateDC_("DISPLAY", "", "", dm)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, Width, Height, srcDC, a\left, a\top, #SRCCOPY)
OpenClipboard_(#Null)
EmptyClipboard_()
SetClipboardData_(2, BMPHandle)
;CloseClipboard_()
DeleteDC_( trgDC)
ReleaseDC_( BMPHandle, srcDC)
ciHwnd = GetClipboardData_(#CF_BITMAP)
If ciHwnd
GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP)
CreateImage(ID_image, Width, Height)
StartDrawing(ImageOutput(ID_image))
DrawImage(ciHwnd, 0, 0)
StopDrawing()
EndIf
EndProcedure
OpenWindow(#fen0,0,0,400,400,"Capture",#PB_Window_SystemMenu)
If CreateGadgetList(WindowID(#fen0))
ButtonGadget(#gadget,100,50,150,50,"Hello")
EndIf
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
quit = 1
Case #PB_Event_Gadget
If EventGadget()=#gadget
mon_gadget = CaptureGadget(#img_gadget,GadgetID(#gadget),100,50,150,50)
ma_fenetre = CaptureFenetre(#img_fen0,WindowID(#fen0),0,0)
StartDrawing(WindowOutput(#fen0))
DrawImage(ImageID(#img_gadget),100,200)
DrawImage(ImageID(#img_gadget),100,250)
DrawImage(ImageID(#img_fen0),100,300)
StopDrawing()
EndIf
EndSelect
Until quit = 1
End