bon, voilà mon problème :
j'ai un thread qui doit utilisé un startdrawing et le prog principal également
or PB ne supporte qu'un startdrawing à la fois
Les dessins que je dois faire dans le thread sont des fonction de l'API (le thread me permet de faire un dessin long en arrière plan sans gêner le reste qui dessine quand même sur des images)
voila un code ou j'ai essayé mais rien
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Dessiner une icône associée à un fichier
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
; On récupère l'ImageList
; C'est ici que ce fait le choix entre icône 16*16 (#SHGFI_SMALLICON) ou 32*32 (#SHGFI_LARGEICON)
hImageList16.l = SHGetFileInfo_(0, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX | #SHGFI_SMALLICON)
hImageList32.l = SHGetFileInfo_(0, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX | #SHGFI_LARGEICON)
IconPath.s = "C:\Windows\"
SHGetFileInfo_(IconPath, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON) ; On récupère la position de l'icône dans l'ImageList
; la je veux pour voir desiner sur une image en utilisant uniquement l'API
; car j'ai besoin de 2 startdrawing en même temps, un dans le prog principale, l'autre dans un thread
CreateImage(0, 50, 50) ; On crée une image
HDC = CreateCompatibleDC_(GetDC_(UseImage(0)))
ImageList_Draw_(hImageList16, InfosFile\iIcon, HDC, 1, 1, #ILD_TRANSPARENT) ; On dessine l'icône 16*16 à partir de l'ImageList 16*16
ImageList_Draw_(hImageList32, InfosFile\iIcon, HDC, 17, 17, #ILD_TRANSPARENT) ; On dessine l'icône 32*32 à partir de l'ImageList 32*32
ReleaseDC_(0, HDC)
ImageGadget(0, 10, 10, 50, 50, UseImage(0))
; la c'est pour vérifier que le dessin marche bien avec un startdrawing de PB
CreateImage(1, 50, 50) ; On crée une image
HDC = StartDrawing(ImageOutput())
ImageList_Draw_(hImageList16, InfosFile\iIcon, HDC, 1, 1, #ILD_TRANSPARENT) ; On dessine l'icône 16*16 à partir de l'ImageList 16*16
ImageList_Draw_(hImageList32, InfosFile\iIcon, HDC, 17, 17, #ILD_TRANSPARENT) ; On dessine l'icône 32*32 à partir de l'ImageList 32*32
StopDrawing()
ImageGadget(1, 70, 10, 50, 50, UseImage(1))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End
