Dessiner sur le bureau

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 1 nov. 2005 à 15:35
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 1 nov. 2005 à 16:27
Bonjour tout le monde,

J'essaye de faire un programme permettant de dessiner sur le wallpaper
(afin de, par exemple diffuser une vidéo ou pleins d'autres choses, mon
but n'est pas de modifier l'écran de fond, avec SetEnvironnement ou
qque chose du genre, c'était trop lent...). J'utilise donc l'API
GetDesktopWindow comme paramètre de GetWindowDC pour récupérer le hDC
du bureau. Jusque là, je n'ai pas de problèmes, la fonction me retourne
un long ressemblant tout à fait à un hDC, j'imagine que c'est le bon.
Lorsque j'essaye de dessiner dessus avec bitblt ou ellipse, rien ne se
passe. Elles me renvoient 1 mais rien n'est dessiner. J'ai essayer
d'actualiser le bureau, d'appeler UpdateWindow, rien n'y fait.
Quelqu'un peut m'aider ?

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 nov. 2005 à 15:52
salut,
essaie sur le DC(0&)
PCPT [AFCK]
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
1 nov. 2005 à 15:55
Ben heu ca marche pas ....
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 nov. 2005 à 16:03
bah donne au moins un morceau de code, çà peut aider pour tester^^
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
1 nov. 2005 à 16:07
Voila, j'ai ceci dans un module :



Public Declare Function GetDesktopWindow Lib "user32" () As Long


Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long


Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long


Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long


Public Declare Function UpdateWindow Lib "user32" (ByVal hWnd As Long) As Long


Public DeskHwnd As Long, DeskhDC As Long


Et ceci dans mon Form :



Dim Ind As Long



Private Sub Form_Load()


DeskHwnd = GetDesktopWindow


DeskhDC = GetDC(DeskHwnd)


Ind = 1


End Sub



Private Sub Timer1_Timer()


Picture1.Picture = LoadPicture("D:\Mes documents\maya\projects\default\images\Logo." & Trim(Str(Ind)) & ".jpg")


Ind = Ind + 1


If Ind 751 Then Ind 1


BitBlt DeskhDC, 0, 0, 1152, 864, Picture1.hdc, 0, 0, vbSrcCopy


UpdateWindow DeskHwnd


End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 nov. 2005 à 16:10
ok, je teste ton code.
voici en attendant un exemple de Guid-Api.
çà peut aider....


'This Project needs
'- two timers, interval=100
'- a button

'in general section
Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = True
Timer2.Interval = 100
Timer2.Enabled = True
Command1.Caption = "Draw Text"
End Sub
'This will draw an Ellipse on the active window
Sub Timer1_Timer()
Dim Position As POINTAPI
'Get the cursor position
GetCursorPos Position
'Draw the Ellipse on the Screen's DC
Ellipse GetWindowDC(0), Position.x - 5, Position.y - 5, Position.x + 5, Position.y + 5
End Sub
Sub Command1_Click()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net

Dim intCount As Integer, strString As String
strString = "Cool, text on screen !"
For intCount = 0 To 30
'Draw the text on the screen
TextOut GetWindowDC(0), intCount * 20, intCount * 20, strString, Len(strString)
Next intCount
End Sub
Private Sub Timer2_Timer()
'Draw the text to the active window
TextOut GetWindowDC(GetActiveWindow), 50, 50, "This is a form", 14
End Sub



<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


PCPT [AFCK]
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
1 nov. 2005 à 16:14
Oui en fait manifestement, DC(0) retourne une sortie graphique sur
l'écran au dessus de tout, c'est bien mais c'est pas encore ce qu'il me
faut,.. Merci quand même...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 nov. 2005 à 16:27
çà, c'est sûr que si tu confonds le bureau et le fond d'écran, tu ne pourras avoir que des réponses
impliquant un vieux "merci quand même..."

le bureau est le parent de toutes les fenêtres.
peindre le bureau revient à peindre également les fenêtres qu'il contient.
tu peux lister toutes les fenêtres visibles pour les réduire, mais compare aux jeux qui détruisent le bureau (mitrailleuse, etc...)
les fenêtres visibles sont aussi altérées.
le screensaver... la sphère qui déforme le bureau, c'est pareil. la sphère ne passe pas derrière les fenêtres.

!!!
0
Rejoignez-nous