Appliquer une resolution grâce à directdraw

Contenu du snippet

DirectDraw (API DirectX), qui permet de lancer des applis en 2D ou 3D va nous servir ici à récupérer les résolutions supportées par la carte graphique et d'appliquer une résolution à votre écran tant que la Form est lancée.

Nous utiliserons ici la version 7 de DirectX.

Cette source est une adaptation en VB.NET

------

Pré-requis :

1) Lancer un nouveau projet depuis VS 2005.
2) Importer la dll DirectX 7 pour VB :
¤ Menu Projet > "Ajouter une référence"
¤ Aller sur l'onglet "Référence" et rechercher "C:\WINDOWS\System32\dx7vb.dll"
¤ Cliquer OK
3) Insérer dans le projet une ListBox (LB_DispoResolutions)
4) Insérer un bouton (BTN_Valid)

Source / Exemple :


'On importe la bibliothèque de Dx
Imports DxVBLib

Public Class Form1

    Dim objDx As DirectX7 'DirectX 7
    Dim objDraw7 As DirectDraw7 'API DirectDraw
    Dim objEnumModes As DirectDrawEnumModes 'Résolutions Disponibles

    Private Function SetNewDisplayMode()
        'Si aucune résolution n'est choisie
        If LB_DispoResolutions.SelectedIndex = -1 Then Exit Function

        Dim ddsd As DDSURFACEDESC2 'Propriétés de la Surface
        Dim i As Integer

        'Récupère le mode d'affichage choisi dans la Listbox
        i = LB_DispoResolutions.SelectedIndex

        'Récupère les propriétés de ce mode
        objEnumModes.GetItem(i + 1, ddsd)

        'Applique la Résolution choisie
        objDraw7.SetDisplayMode(ddsd.lWidth, ddsd.lHeight, ddsd.ddpfPixelFormat.lRGBBitCount, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT)
        Me.Refresh()

    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim ddsd As DDSURFACEDESC2 'Propriétés de la Surface.. (dont la taille : Width & Height)
        Dim i, R_Count As Integer

        objDx = New DirectX7
        'Création d'un Objet DirecDraw
        objDraw7 = objDx.DirectDrawCreate("")

        'Récupère les != résolutions disponibles
        objEnumModes = objDraw7.GetDisplayModesEnum(DxVBLib.CONST_DDEDMFLAGS.DDEDM_DEFAULT, ddsd)
        'Nombre de Résolutions dispo
        R_Count = objEnumModes.GetCount() '

        For i = 1 To R_Count
            objEnumModes.GetItem(i, ddsd)
            'Insertion de chaque Résolution (Width x Height x Couleurs) dans la Listbox
            LB_DispoResolutions.Items.Add(CStr(ddsd.lWidth) & "x" & CStr(ddsd.lHeight) & "x" & CStr(ddsd.ddpfPixelFormat.lRGBBitCount))
        Next i

    End Sub

    Private Sub BTN_Valid_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Valid.Click
        'Appelle la Fonction
        SetNewDisplayMode()
    End Sub

End Class

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.