Mode Fenêtré

Kamary Messages postés 7 Date d'inscription dimanche 11 juin 2006 Statut Membre Dernière intervention 2 mars 2008 - 10 juil. 2006 à 21:15
Kamary Messages postés 7 Date d'inscription dimanche 11 juin 2006 Statut Membre Derniè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)

  DD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT

 

  'Crée la surface primaire (voir flipping)

  Dim ddsd As DDSURFACEDESC2

  ddsd.lFlags = DDSD_BACKBUFFERCOUNT Or DDSD_CAPS

  ddsd.lBackBufferCount = 1

  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.

DnaStee

2 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.















Sevyc64  (alias Casy)










<hr />


# LE PARTAGE EST NOTRE FORCE #
0
Kamary Messages postés 7 Date d'inscription dimanche 11 juin 2006 Statut Membre Dernière intervention 2 mars 2008
11 juil. 2006 à 08:55
Merci du conseil.
Ouais! C'est là qu'est le problème car j'ai changé

DD.SetCooperativeLevel Form1.hWnd,
DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT

par :

DD.SetCooperativeLevel Form1.hWnd,
DDSCL_NORMAL

car c'est l'expression le "flag" approprié pour le mode fenêtré mais ensuite une erreur survient dans les lignes qui le précèdent, notemment :

Set Primary = DD.CreateSurface(ddsd)

Peut être que je dois changé encore d'autre paramètres
0
Rejoignez-nous