Kamary
Messages postés7Date d'inscriptiondimanche 11 juin 2006StatutMembreDernière intervention 2 mars 2008
-
10 juil. 2006 à 21:15
Kamary
Messages postés7Date d'inscriptiondimanche 11 juin 2006StatutMembreDernière intervention 2 mars 2008
-
11 juil. 2006 à 08:55
Hello ! Depuis quelques temps je me suis planché sur l'utilisation de la DirectX7 dans le bon vieux Vb6.
Et dans mes recherches, j'ai découvert quelques tutorials un peu partout dans le net, et tous ont à peu près cette forme :
'Déclarations
Public DirectX As New DirectX7
Public DD As DirectDraw7
Public Primary As DirectDrawSurface7
Public BackBuffer As DirectDrawSurface7
Sub Form_Load()
'Creation de l'objet DirectDraw
Set DD = DirectDrawCreate("")
'Ici on configure la coopération du
programme avec les autres applications en cours
DD.SetCooperativeLevel Form1.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE
Or DDSCL_ALLOWREBOOT
'On change le mode vidéo (longueur,
largeur, profondeur de couleurs, rafraichissement en Hz, DDSDM_DEFAULT)
ddsd.ddscaps.lCaps = DDSCAPS_COMPLEX Or DDSCAPS_FLIP Or
DDSCAPS_PRIMARYSURFACE Or DDSCAPS_VIDEOMEMORY
Set Primary = DD.CreateSurface(ddsd)
'Obtient le Backbuffer
Dim ddscaps As DDSCAPS2
ddscaps.lCaps = DDSCAPS_BACKBUFFER Or DDSCAPS_VIDEOMEMORY
Set Backbuffer = Primary.GetAttachedSurface(ddscaps)
' Efface le BackBuffer (au départ,
il y a toujours des saletés dans la surface...)
Dim rec As RECT
rec.Bottom = 480
rec.Left = 0
rec.Right = 640
rec.Top = 0
Backbuffer.BltColorFill rec, 0
Backbuffer.SetFontTransparency True
' Boucle principale
Do
'Efface le Backbuffer
Backbuffer.BltColorFill rec, 0
'Ecrit l'heure et le titre dans le
Backbuffer
Backbuffer.SetForeColor RGB(256, 0, 0)
Backbuffer.DrawText 300, 250, Time$, False
Backbuffer.SetForeColor RGB(0, 256, 0)
Backbuffer.DrawText 40, 450, "DirectDraw Sample 1 - Affichage de
l'heure dans une surface ", False
DoEvents
' Si l'utilisateur tape sur
une touche, alors quitte (voir Form_Keypress plus loin)
If ok% = -1 Then GoTo suib
'"Flippe" vers
la surface primaire
Primary.Flip Nothing, DDFLIP_WAIT
Loop
suib:
' Surtout à la fin du programme, il faut
"relâcher" les objets.
Set
Primary = Nothing
Set Backbuffer = Nothing
Set DD = Nothing
Set DirectX = Nothing
End Sub
Et dans l'evénement KeyPress :
Private Sub
Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then ok%=-1
End Sub
Et voici ma Question ; Ce code présenté précédement affiche EN PLEIN ECRAN l'heure, mais moi je voudrai savoir comment faire la même chose en mode FENÊTRE. J'ai bien essayer de modifier certains paramètres du code mais des erreurs surviennent à chaque fois.
Je remerci à l'avance tout ceux qui voudront bien partager leur savoir avec moi.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 10 juil. 2006 à 21:37
Je ne connais absolument rien à DirectDraw mais je pense que ton problème viens de cette ligne :
DD.SetCooperativeLevel Form1.hWnd,
DDSCL_FULLSCREEN
Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT
Apparement tu définierais ta form en mode plein écran (à priori y compris sans bordure), en mode exclusif (je penserais à un mode Modal au niveau du système)
Par contre je ne saurais te dire quoi mettre à la place, il va falloir que tu cherche, dans le msdn peut-etre ou directement sur le site de microsoft.