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

MFC Discussion :

Projet boite de dialogue et fenêtre pop-up


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut Projet boite de dialogue et fenêtre pop-up
    Bonjour à tous ,

    j'ai récupéré un projet MFC de type boite de dialogue, l'ensemble fonctionnant bien.

    Je veux rajouter une fonctionnalité :
    un bouton "Afficher" sur le dialogue principal qui lorsque l'on clique dessus fait apparaitre une fenêtre (une CView ça serrait le bon truc je pense).

    Sur celle-ci je veux ensuite pouvoir effectuer des opérations avec DirectGraphics. En gros il faut juste que la fenêtre s'affiche et que je récupère sont HWND.

    Pour l'instant j'ai ça m'a fonction qui capture l'appui sur le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CTestDlg::OnBnClickedDraw()
    {
    	//création de la fenêtre
    	DirectGraphics* directGraphics(hWnd);
    	directGraphics.draw(param); //fonction publique de DirectGraphics qui dessine dans la fenetre
    }
    et le constructeur de ma classe qui gère DirectGraphics qui attend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectGraphics::DirectGraphics(HWND hWnd)
    Le problème c'est que je n'arrive pas à afficher une fenêtre (CWnd, CView ou autre) qui s'affiche (certain code compile mais rien ne marche).

    Si quelqu'un pouvait m'indiquer des pistes ça serait sympa

    Infos :
    Je ne peux pas changer de type de projet (pas de SDI ou de MDI).
    Je suis sous VS2005.
    Mon code DirectGraphics importe peu, déjà si j'arrivai a voir une fenêtre apparaitre ...
    Est-ce une piste ?

    Merci

  2. #2
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Je te conseillerai plutôt de faire une CDialog que tu feras s'afficher à l'aide de la méthode DoModal().

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	CViewDlg* view = new CViewDlg();
    	HWND hWnd = view->GetSafeHwnd();
    	view->DoModal();
     
     
    	DirectGraphics* directGraphics(hWnd);
    	directGraphics.draw(param)
    ?

    J'y ai pensé mais est-ce que c'est pertinent pour après travailler avec directX ?

    Edit : d'ailleurs plutot mettre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	DirectGraphics* directGraphics(hWnd);
    	directGraphics.draw(param
    dans le CViewDlg::OnInitDialog()

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Désoler pour le UP, mais je suis bloqué

    Est-ce que quelqu'un à déjà utilisé DirectGraphics sur un CDialog ? Ou du moins aurait une idée de comment faire ?!

    Parce qu'en récupérant juste le handle du CDialog et en le passant à DirectGraphics j'arrive pas à faire afficher quoi que ce soit (à vrai dire la fenêtre ne s'ouvre même pas).

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 439
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 439
    Points : 20 647
    Points
    20 647
    Par défaut
    DirectGraphics* directGraphics(hWnd);
    directGraphics.draw(param)
    euh juste une chose c'est vraiment bizarre que tu n'aies pas d'erreur à la compilation ou bien je ne maitrise pas assez les subtilités du C/C++
    Sur celle-ci je veux ensuite pouvoir effectuer des opérations avec DirectGraphics. En gros il faut juste que la fenêtre s'affiche et que je récupère sont HWND.
    Que veux-tu faire avec D3d ? Je ne sais pas si on peut faire un rendu dans une fenêtre type dialogue.
    Regarder dans le SDK de Direct X il y a des exemples avec MFC me semble-t-il

    regarder dans le SDK l'exemple
    Samples\C++\DXUT\Optional et le fichier DXUTsettingsdlg.cpp notamment.
    C'est un projet MFC

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Bon finalement j'arrive à afficher dans un CDialog, même si je suis pas sûr que se soit très "safe" ...

    Je suis passé par un dialogue non modale et j'ai travaillé dessus comme si c'était un CWnd classique.

    J'ai quelques bugs, notamment d'affichage en fenêtré avec la boite de dialogue appelante, mais c'est suffisant dans mon cas, et je verrai en fonction de mon temps pour corriger ça.

    Voila mon code :
    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
     
    class directGraphics : public CDialog {
    public:
    	directGraphics(HWnd hwnd);
     
    private:
    	LPDIRECT3D9 m_pD3D9;
    	LPDIRECT3DDEVICE9 m_pD3D9Device;
    	D3DPRESENT_PARAMETERS m_D3D9PresentParameters;
    	IDirect3DVertexBuffer9* m_pD3D9VertexBuffer;
     
    private:
    	virtual BOOL OnInitDialog();
    	HRESULT init(HWND hWnd);
    	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    	HRESULT update();
    	HRESULT render();
     
    }
     
     
    	m_d3d = new directGraphics(m_strBINPath,m_sendSpeed,&m_dSendProg);
    	m_d3d->Create(directGraphics::IDD, this);
    	m_d3d->ShowWindow(SW_SHOW);
    En conclusion je dirais que DirectX c'est pas le plus pratique à commencer, la doc est pas un exemple de simplicité et les tuto' du web sont très orienté 3D (alors quand on commence et qu'on veut pas faire de 3D, c'est pas simple !).

    Merci pour l'aide, je posterais peut-être mon exemple plus complet quand j'aurais stabilisé le truc et que ça tournera nickel.

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

Discussions similaires

  1. projet avec une boite de dialogue comme fenêtre principale
    Par patsolaar dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 01/02/2008, 01h46
  2. Toolbar dans un projet boite de dialogue
    Par conico dans le forum MFC
    Réponses: 4
    Dernier message: 11/01/2008, 16h52
  3. [PHP-JS] Boites de dialogue pop-up
    Par boulo dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2007, 13h09
  4. Réponses: 5
    Dernier message: 09/09/2006, 22h30
  5. Réponses: 3
    Dernier message: 17/06/2004, 17h59

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