![]()
MODE FENÊTRE - CLIPPING
Dans cet article, nous couvrirons les bases de l'initialisation d'un écran DirectDraw [celui de l'utilisateur] en mode fenêtré et l'affichage d'images sur cette dernière via la technique du Clipping.
Vous pouvez télécharger le projet exemple de cet article: Code Source Du Projet : ddClipping.zip
| Notion de Clippers |
Quand vous travaillez en mode fenêtré, vous devez associer un clipper à la fenêtre avec laquelle vous travaillez. Puis vous associez ce clipper à la surface primaire. Il ne vous restera plus qu'à blitter le backbuffer vers la surface primaire pour voir apparaître l'image/texte sur l'écran.
Nous devons d'abord déclarer un Clipper [Après avoir bien sûr déclarer les objets DirectX et DirectDraw].
| Public Clipper As DirectDrawClipper |
On doit ensuite configurer DirectDraw pour un mode fenêtré.
| Configurations |
On met le mode DirectDraw à normal (mode fenêtré).
| DD.SetCooperativeLevel Form1.hwnd, DDSCL_NORMAL |
En mode fenêtré, il faut que les dimensions du backbuffer soient identiques aux dimensions de la fenêtre (enfin, la zone hors de la barre de menu) afin que nos dessins soient visibles par le joueur. Pour cela il faut agir sur son ddsd.
| 'Dimensions de la
fenêtre Dim rRect As RECT 'Prend les dimensions de la fenêtre et les met dans 'rRect DX.GetWindowRect Form1.hwnd, rRect 'On spécifie ces dimensions dans la description ddsd ddsd.lHeight = rRect.Bottom - rRect.Top ddsd.lWidth = rRect.Right - rRect.Left 'On crée la surface Backbuffer Set Backbuffer = DD.CreateSurface(ddsd) |
On peut maintenant attacher le Clipper à la surface Primaire.
| Attachement du Clipper à la surface Primaire |
On crée le Clipper et on l'attache.
| 'On crée le Clipper Set Clipper = DD.CreateClipper(0) 'On l'associe au handle de Form1 Clipper.SetHWnd Form1.hwnd 'On lie le Clipper à la surface Primaire Primary.SetClipper Clipper |
Il faut maintenant afficher le résultat sur l'écran.
| Affichage sur l'écran |
En mode fenêtré, on n'a pas besoin d'attacher le
backbuffer avec la surface primaire, puisqu'on ne mélange pas Clipping et Flipping.
On n'utilisera donc pas la méthode Flip de la surface Primaire mais on va plutôt blitter
le backbuffer sur elle.
| On Error Resume Next Do 'On remplit le Backbuffer avec du noir Backbuffer.BltColorFill ddRect(0, 0, 0, 0), QBColor(0) 'on y met la surface Surface Backbuffer.BltFast 0, 0, Surface, ddRect(0, 0, 0, 0), DDBLTFAST_WAIT 'On blit le backbuffer vers la surface primaire GetClientRect Form1.hwnd, rRect ClientToScreen Form1.hwnd, rRect.Left ClientToScreen Form1.hwnd, rRect.Right Primary.Blt rRect, Backbuffer, ddRect(0, 0, 0, 0), DDBLT_WAIT 'Si malheuresement elle est perdue, on la 'restaure If Err.Number = DDERR_SURFACELOST Then Primary.restore End If 'On donne la possibilité au joueur de presser 'des boutons DoEvents 'On recommence jusqu'à ce que bRunning = False Loop Until bRunning = False |
Vous avez sûrement remarqué qu'il y a deux nouvelles fonctions et une nouvelle variable dans ce bout de code. Il faut donc les déclarer plus haut.
| 'Apis Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As Any) As Long ' lpPoint As POINTAPI 'RECT de la fenêtre Dim ClientRect As RECT |
Maintenant pensez à mettre ceci à Form_Unload de la feuille.
| 'Dans la feuille Private Sub Form_Unload (Cancle As Integar) UnloadDD End Sub |
Voilà! C'est tout!
| Conclusion |
Bien vous venez de découvrir comment
débuter un programme en mode fenêtré et comment y afficher une image.
Bien que le mode plein écran est le plus utilisé par les jeux, vous pouvez combiner ces
deux modes dans un même jeu afin d'offrir plus d'options au joueur.
Il vous suffira de faire par exemple que lorsqu'on agrandit la fenêtre, l'application
passe en mode plein écran.
| Téléchargement |
Vous pouvez télécharger le projet exemple de cet article:
Ce projet affiche une image sur l'écran en mode fenêtré.
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]