Appliquer une resolution grâce à directdraw

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 411 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
47
Dim i, R_Count As Integer

>> i et R_Count sont des Integers
Messages postés
244
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
21 octobre 2013

Pas surement, c'est faisable en .NET, il y a d'ailleurs déjà des sources sur VBF, l'interêt ici était d'utiliser DirectDraw, qui je l'accorde a disparu aujourd'hui.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
faisable via APIs et surement via le FrameWork .Net
Messages postés
244
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
21 octobre 2013

En VB6 il s'agit de Long effectivement.

Il est vrai que dx7 fait pâle mine.. je vais voir pour dx8/9.. :p
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
20
oui et c'est un peu désuet aujourd'hui.

En VB6, quand on tapait çà :

Dim i, R_Count As Integer

i n'était pas un Integer. Est-ce toujours le cas avec .NET ?
Afficher les 6 commentaires

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.