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 :

[MFC] afficher une boîte de dialogue


Sujet :

MFC

  1. #1
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut [MFC] afficher une boîte de dialogue
    Salut,

    1ère chose (spécial Farscape ) : j'ai regardé dans la FAQ, j'ai a priori trouvé dans la FAQ, mais mon truc yan na pas marché.

    j'ai un soucis. j'ai un CListBox et quand je double-clique sur un élément, ça doit m'ouvrir une nouvelle boîte de dialogue, mais au lieu de ça quand je double-clique j'ai un message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Debug Assertion Failed!
     
    Program: E:\Utilisateurs\...\MyOMEGA.exe
    File: winocc.cpp
    Line: 301
     
    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.
     
    (Press Retry to debug the application)
    Quand je double-clique sur un élément du CListBox, je récupère le texte, je cherche l'élément (d'une liste perso d'entités) dont le nom correspond au texte (jusque là je sais que ça marche), j'instancie une boîte de dialogue de la classe perso CProcEntiteDlg (qui dérive de CDialog, bien sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_ProcEntDlg = new CProcEntiteDlg(NULL,monEntite);
    //CProcEntiteDlg* m_ProcEntDlg; dans le .h
    voilà le proto de mon constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CProcEntiteDlg(CWnd* pParent = NULL,so_entite * uneEntite = NULL);
    et je tente de l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_ProcEntDlg->ShowWindow(SW_SHOW);
    je vous poste dans le message suivant les sources de ma classe CProcEntiteDlg et des impressions d'écran.

    merci pour le coup de main

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    ProcEntiteDlg.h
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #if !defined(AFX_PROCENTITEDLG_H__4D88E660_D6DD_4202_994E_C547E04E9ED1__INCLUDED_)
    #define AFX_PROCENTITEDLG_H__4D88E660_D6DD_4202_994E_C547E04E9ED1__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // ProcEntiteDlg.h : header file
    //
     
    #include "OMEGA\bd_typ_t.h"
    #include "OMEGA\so_typ_t.h"
    #include "OMEGA\so_ext_t.h"
    #include "OMEGA\so_ent_t.h"
     
    /////////////////////////////////////////////////////////////////////////////
    // CProcEntiteDlg dialog
     
    class CProcEntiteDlg : public CDialog
    {
    // Construction
    public:
    	CProcEntiteDlg(CWnd* pParent = NULL,so_entite * uneEntite = NULL);   // standard constructor
     
    // Dialog Data
    	//{{AFX_DATA(CProcEntiteDlg)
    	enum { IDD = IDD_PROC_ENTITE };
    	CListCtrl	m_lstProcEntSfi;
    	CListCtrl	m_lstProcEntFi;
    	CListCtrl	m_lstProcEntEba;
    	//}}AFX_DATA
     
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CProcEntiteDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    	//}}AFX_VIRTUAL
     
    // Implementation
    protected:
     
    	so_entite * m_uneEntite;
     
    	// Generated message map functions
    	//{{AFX_MSG(CProcEntiteDlg)
    	virtual BOOL OnInitDialog();
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
     
    #endif // !defined(AFX_PROCENTITEDLG_H__4D88E660_D6DD_4202_994E_C547E04E9ED1__INCLUDED_)
    ProcEntiteDlg.cpp
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    // ProcEntiteDlg.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "myomega.h"
    #include "ProcEntiteDlg.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CProcEntiteDlg dialog
     
     
    CProcEntiteDlg::CProcEntiteDlg(CWnd* pParent,so_entite * uneEntite)
    	: CDialog(CProcEntiteDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CProcEntiteDlg)
    		// NOTE: the ClassWizard will add member initialization here
    	//}}AFX_DATA_INIT
    	m_uneEntite = new so_entite(uneEntite);
    }
     
     
    void CProcEntiteDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CProcEntiteDlg)
    	DDX_Control(pDX, IDC_PROCENT_LISTE_SFI, m_lstProcEntSfi);
    	DDX_Control(pDX, IDC_PROCENT_LISTE_FI, m_lstProcEntFi);
    	DDX_Control(pDX, IDC_PROCENT_LISTE_EBA, m_lstProcEntEba);
    	//}}AFX_DATA_MAP
    }
     
     
    BEGIN_MESSAGE_MAP(CProcEntiteDlg, CDialog)
    	//{{AFX_MSG_MAP(CProcEntiteDlg)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CProcEntiteDlg message handlers
     
    BOOL CProcEntiteDlg::OnInitDialog() 
    {
    	CDialog::OnInitDialog();
     
    	// TODO: Add extra initialization here
     
    	// Construction des colonnes des CListCtrl
    	for (int i=0;i<3;i++){
    		m_lstProcEntSfi.DeleteColumn(i);
    		m_lstProcEntFi.DeleteColumn(i);
    		m_lstProcEntEba.DeleteColumn(i);
    	}
     
    	m_lstProcEntSfi.InsertColumn(0,"Nom du cycle",LVCFMT_CENTER,100,0);
    	m_lstProcEntSfi.InsertColumn(1,"Classe",LVCFMT_CENTER,100,0);
    	m_lstProcEntSfi.InsertColumn(2,"Nom de l'outil",LVCFMT_CENTER,100,0);
     
    	m_lstProcEntFi.InsertColumn(0,"Nom du cycle",LVCFMT_CENTER,100,0);
    	m_lstProcEntFi.InsertColumn(1,"Classe",LVCFMT_CENTER,100,0);
    	m_lstProcEntFi.InsertColumn(2,"Nom de l'outil",LVCFMT_CENTER,100,0);
     
    	m_lstProcEntEba.InsertColumn(0,"Nom du cycle",LVCFMT_CENTER,100,0);
    	m_lstProcEntEba.InsertColumn(1,"Classe",LVCFMT_CENTER,100,0);
    	m_lstProcEntEba.InsertColumn(2,"Nom de l'outil",LVCFMT_CENTER,100,0);
     
    	// Remplissage des CListCtrl
     
    	return TRUE;  // return TRUE unless you set the focus to a control
    	              // EXCEPTION: OCX Property Pages should return FALSE
    }
    Fenêtre principale, le double-clic dans la liste du 1er onglet devrait ouvrir une boîte de dialogue de la classe CProcEntiteDlg (attribut CProcEntiteDlg * m_ProcEntDlg de la boîte de dialogue du 1er onglet)


    encore merci à ceux qui se pencheront sur mon problème.

  3. #3
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    au debug, il me dit qu'il plante sur le ASSERT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL CWnd::ShowWindow(int nCmdShow)
    {
    	ASSERT(::IsWindow(m_hWnd));
     
    	if (m_pCtrlSite == NULL)
    		return ::ShowWindow(m_hWnd, nCmdShow);
    	else
    		return m_pCtrlSite->ShowWindow(nCmdShow);
    }
    ya un truc dans mon code qu'est pas net!

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    j'ai pas encore compris ce je venais faire dans l'histoire ....

    ton pb c'est toujours la meme histoire la fenetre sur laquelle tu fais ShowWindow n'existe pas graphiquement son handle de fichier est à null
    il faut que tu montres le code qui appel showwindow.

  5. #5
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    1) Vu que tu fais toujours reference à la FAQ, il a preferé prendre les devant
    2) il manque un Create avant ton showwindow
    il y a du linge sur la corde à linge

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je pense qu'il faut appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_ProcEntDlg->DoMadal();
    au lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_ProcEntDlg->ShowWindow(SW_SHOW);
    Ta dlg boite de dialogue sera modale...

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je pense qu'il faut appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_ProcEntDlg->DoMadal();
    au lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_ProcEntDlg->ShowWindow(SW_SHOW);
    Ta dlg boite de dialogue sera modale...

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par farscape
    salut,
    j'ai pas encore compris ce je venais faire dans l'histoire ....

    ton pb c'est toujours la meme histoire la fenetre sur laquelle tu fais ShowWindow n'existe pas graphiquement son handle de fichier est à null
    il faut que tu montres le code qui appel showwindow.
    je mettrais le code Lundi, je ne l'ai pas sous la main (j'ai pris la résolution d'éviter de bosser le WE )

    Citation Envoyé par la drogue c'est mal
    1) Vu que tu fais toujours reference à la FAQ, il a preferé prendre les devant
    2) il manque un Create avant ton showwindow
    1) exact
    2) je vais voir à ça

    Citation Envoyé par J-Ma
    Je pense qu'il faut appeler :Code:
    m_ProcEntDlg->DoMadal();

    au lieu :Code:
    m_ProcEntDlg->ShowWindow(SW_SHOW);

    Ta dlg boite de dialogue sera modale...
    si ma nouvelle boîte de dialogue est modale, je ne pourrais plus accéder à la première boîte tant que celle-ci ne sera pas close. or j'aimerais avoir accès à la première fenêtre et, par exemple pouvoir à nouveau double-cliquer dans la liste pour 1) fermer la fenêtre fille précédente 2) en rouvrir une nouvelle correspondant à l'item sélectionné.

    Merci

  9. #9
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    au passage, est-ce que vous sauriez comment faire pour que les colonnes de mon CListCtrl ne soit pas redimensionnables?

    A vot' bon coeur

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par farscape
    il faut que tu montres le code qui appel showwindow.
    voilà le code appelant. quand je double-clik sur ma liste, je récupère le nom sélectionné, je cherche l'entité portant ce nom dans une liste d'entité et je tente d'ouvrir une boite de dialogue avec les caractéristiques de l'entité.
    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
    void CTab1::OnDblclkTab1ListeEntites() 
    {
    	// TODO: Add your control notification handler code here
     
    	// Récupération du nom d'entité double-cliqué
    	CString csItemText;
    	int nIndexItem = m_lstTab1ListEnt.GetCurSel();
    	m_lstTab1ListEnt.GetText(nIndexItem,csItemText);
     
    	// Recherche de l'entité dans la liste d'entités
    	li_entite * lesEntites;
    	lesEntites = new li_entite(GLO->getentite());
     
    	so_entite * monEntite;
    	monEntite = new so_entite(lesEntites->getpteur());
     
    	while (csItemText!=(CString)monEntite->getnom()){
    		lesEntites = lesEntites->getpteur_ap();
    		monEntite = lesEntites->getpteur();
    	}
     
    	// Ouverture de la boîte de dialogue "Processus Entite"
    	m_ProcEntDlg = new CProcEntiteDlg(NULL,monEntite);
    	m_ProcEntDlg->ShowWindow(SW_SHOW);
    }
    j'ai regardé pour CreateWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
    	BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
    mais je ne sais pas quoi passé en paramètre (je débute en VC++)
    merci pour votre aide

  11. #11
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    quelqu'un peut-il m'expliquer comment on affiche une boîte de dialogue définit comme attribut d'une classe?

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    extrait MSDN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //pDialog initialized to NULL in the constructor of CMyWnd class
       pDialog = new CMyDialog();
       //Check if new succeeded and we got a valid pointer to a dialog object
       if(pDialog != NULL)
       {
          BOOL ret = pDialog->Create(IDD_MYDIALOG,this);
          if(!ret)   //Create failed.
             AfxMessageBox("Error creating Dialog");
          pDialog->ShowWindow(SW_SHOW);
       }
       else
          AfxMessageBox("Error Creating Dialog Object");

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    sinon une methode pas mal pour faire une dialogue non modale:
    http://www.codeguru.com/Cpp/W-D/dislog/modelessdialogs/article.php/c4997/

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    merci bien, ça marche!

    bon ya fallu que je change 2/3 trucs dans mon code qui n'avait pas l'air d'être apprécié, mais je me suis débrouillé

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

Discussions similaires

  1. Comment afficher une boîte de dialogue ?
    Par verbose dans le forum Wicket
    Réponses: 9
    Dernier message: 05/02/2010, 16h39
  2. Console dos : afficher une boîte de dialogue
    Par mister3957 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 04/11/2008, 08h41
  3. Réponses: 2
    Dernier message: 14/04/2008, 08h57
  4. [Flash] Afficher une boîte de dialogue
    Par arsene555 dans le forum Flash
    Réponses: 1
    Dernier message: 31/07/2007, 18h04
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

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