IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Utilisation des contrôles Window avec C# et DirectX


Sujet :

DirectX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut Utilisation des contrôles Window avec C# et DirectX
    Bonjour à tous.

    Avec Delphi 6 et GLScene (mes anciens outils) on pouvait placer sur une même fiche un GLSceneViewer (un rectangle pour afficher la scène OpenGL) et les contrôle classiques Window (Button, ListBox ….).

    Malgré mais efforts je n’y arrive pas avec Visual C# et DirectX 9 . En particulier si je place un Button sur la fiche il m’apparaît à l’exécution. Même en fixant Windowed à true et en utilisant device.Viewport pour limiter l’affichage de ma scene DirectX à un rectangle, les Buttons qui sont sur la fiche en mode conception, n’apparissent pas à l’exécution.

    Si vous avez des idées sur la question, Merci d’avance.

  2. #2
    Membre confirmé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Points : 504
    Points
    504
    Par défaut
    Initialise ton device direct3d en utilisant une picture box... ainsi directx n'utilisera qu'elle pour son affichage et te permettra de mettre tout les contrôles que tu veux dans ta fenêtre d'application. Il y a plein d'exemples sur internet

    __________________________
    Mon Site

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par funkydata
    Initialise ton device direct3d en utilisant une picture box... ainsi directx n'utilisera qu'elle pour son affichage et te permettra de mettre tout les contrôles que tu veux dans ta fenêtre d'application. Il y a plein d'exemples sur internet

    __________________________
    Mon Site
    Excellent! Merci.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Encore Merci pour la réponse, mais j'ai cru un peu vite que j'avais compris. En pratique j’ai des petits problèmes :


    Si je crée une PictureBox1 à la souris ,j’obtiens une erreur à l’exécution à la ligne :

    device = new Device(0, DeviceType.Hardware, pictureBox1,
    CreateFlags.SoftwareVertexProcessing, presentParams);

    Si je crée une PictureBox2 dans le programme pas d’erreur mais ma fenêtre est complètement vide.(La pictureBox n'apparait même pas )

    Voici le code dans le second cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    PictureBox pictureBox2 = null;
     
    protected bool InitializeGraphics()
    {
    PresentParameters presentParams = new PresentParameters();
     
    presentParams.Windowed = true;
    presentParams.SwapEffect = SwapEffect.Discard;
    //presentParams.BackBufferFormat = Format.X8R8G8B8;
    presentParams.AutoDepthStencilFormat = DepthFormat.D24S8;
    presentParams.EnableAutoDepthStencil = true;
    //presentParams.BackBufferCount = 1; 
     
    pictureBox2 = new PictureBox();
    pictureBox2.Width = 300;
    pictureBox2.Height = 300;
    pictureBox2.Left = 10;
    pictureBox2.Top = 10;
    pictureBox2.Visible = true;
     
     
    device = new Device(0, DeviceType.Hardware, pictureBox2, 
    CreateFlags.SoftwareVertexProcessing, presentParams);
     
     
     
    device.RenderState.CullMode = Cull.None ;
    device.RenderState.Lighting = false;
    Si vous avez une idée ou l’adresse d’un tuto sur le problème(tous ceux que j’ai trouvés affiche toujours dans toute la fenêtre ) .


    Merci d’avance.

  5. #5
    Membre confirmé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Points : 504
    Points
    504
    Par défaut
    Il faut que tu passe de façon explicite le handle de ta picture box et non l'objet en lui même

    __________________________
    Mon Site

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Merci pour la réponse.
    Mais si j'écris :

    device = new Device(0, DeviceType.Hardware, pictureBox2,
    CreateFlags.SoftwareVertexProcessing, presentParams);

    ou

    device = new Device(0, DeviceType.Hardware, pictureBox2.Handle,
    CreateFlags.SoftwareVertexProcessing, presentParams);
    c'est pareil. Le prog s'exécute mais j'obtiens une fenêtre vide.

    J'ai cherché dans les arguments de PresentParameters(qui me sont un peu obscurs) mais sans succès...

  7. #7
    Membre confirmé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Points : 504
    Points
    504
    Par défaut
    Crée ta picturebox dans ta fenêtre et passe la en paramètre de cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static InitialiseGraphics(Control ctrl)
    {
    ...
            presentParams.Windowed = true;
            presentParams.SwapEffect = D3D.SwapEffect.Discard;
            presentParams.BackBufferFormat = D3D.Format.X8R8G8B8;
            presentParams.AutoDepthStencilFormat = D3D.DepthFormat.D24S8;
    	presentParams.EnableAutoDepthStencil = true;
            presentParams.BackBufferCount = 2;
     
            device3D = new D3D.Device(0, D3D.DeviceType.Hardware, ctrl, D3D.CreateFlags.SoftwareVertexProcessing, presentParams);
    }
    L'initialisation devrait se faire sans problème

    __________________________
    Mon Site

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Désolé, malgré tous tes efforts (et les miens) les symptomes sont toujours les mêmes.
    Je vais faire tour pour me vider la tête, et je reprendrai le clavier à la fraiche...
    J'espére que j'aurai des idées.

    En tout cas merci de ton aide(j'ai déja compris un certain nombre de choses même si ce n'est pas suffisant...).
    Bonne soirée à plus. A+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Le message précédent contient un A+ de trop. Il faut vraiment que je fasse une pause.

  10. #10
    Membre confirmé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Points : 504
    Points
    504
    Par défaut
    Et pourtant ca fonctionne comme ça... je viens de tester. Ton problème doit venir d'ailleurs

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Je suis persuadé de la justesse de tes indications. Pour comprendre d'où vient le problème ,je reprends un exemple de base (l'affichage d'un seul triangle) pour essayer de faire le rendu dans une pictureBox.
    A+ et encore merci. Dés que je trouve j'envoie un message sur les ondes.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Enfin la machine a accepté d'obtempérer:

    L'affichage de directX dans une pictureBox fonctionne si:

    - Si je la crée dans le code .
    frm.pictureBox2 = new PictureBox();
    - et si je n'oublie pas
    frm.Controls.Add(frm.pictureBox2);(sans cette ligne le prog tourne mais la fenêtre reste vide )

    Par contre je n'ai pas encore réussi à le faire avec une pictureBox crée à la souris.On verra plus tard,du moment que j'ai une solution au problème...


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2007, 12h59
  2. Peut on utiliser des Webservices WinDEV avec PHP ?
    Par budiste dans le forum WebDev
    Réponses: 8
    Dernier message: 30/03/2006, 11h56
  3. Réponses: 1
    Dernier message: 21/02/2006, 17h13
  4. Réponses: 5
    Dernier message: 13/11/2003, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo