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 :

Problème d'affichage de dialogue avec mon appli


Sujet :

MFC

  1. #1
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut Problème d'affichage de dialogue avec mon appli
    Bonjour,

    Voici le cadre de mon appli : une application boîte de dialogue.
    dans cette boite de dialogue, dynamiquement, j'y crée une autre, qui se trouve être cliente de la premiere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      m_pConfig = new (CConfig);
      m_pConfig->Create(IDD_CONFIG_APP, &m_StaticModule);
    Cette seconde boîte de dialogue est prévue pour faire de la configuration.
    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
     
    BOOL CConfig::OnInitDialog()
    {
      CDialog::OnInitDialog();
      //--------------------------------------------------------------------------
      // Gestion de l'affichage du TreePropSheet et des pages de configuration   
      //--------------------------------------------------------------------------
      // Ajoute toutes les pages de configuration 
      m_sheetConfig.AddPage(&pageGeneral);
      ...
      m_sheetConfig.AddPage(&pageVerifEtat);
     
      // Paramètre l'affichage
      m_sheetConfig.SetTreeViewMode( TRUE, TRUE ); 
      m_sheetConfig.SetEmptyPageText (_T("Choisissez une des sections de '%s'"));
    	m_sheetConfig.Create( this, WS_CHILD | WS_VISIBLE , 0 );
     
      // On positionne le contrôle dans la fenêtre, si on a des pages (sinon, rien est fait).
    	if( 0 != m_sheetConfig.GetPageCount() )
    	{
        m_sheetConfig.ModifyStyleEx( 0, WS_EX_CONTROLPARENT );
    		m_sheetConfig.ModifyStyle( 0, WS_TABSTOP );
     
    		CRect rcSheet;
     	  CWnd* pWnd = GetDlgItem( IDC_CFG_CLIENT );
    	  if( !pWnd )
    	  {
    		  ASSERT( FALSE );
    		  return false;
    	  }
     
    		pWnd->GetWindowRect( &rcSheet );
    		ScreenToClient( &rcSheet );
        m_sheetConfig.SetWindowPos( NULL, rcSheet.left, rcSheet.top, rcSheet.right, rcSheet.bottom, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE );
     
      }
     
      return true;
    }
    J'utilise une classe CTreePropSheet pour ce faire (type de m_sheetConfig).

    Malheureusement, lorsque je veux afficher une boîte de dialogue, celle-ci n'apparaît pas, l'application semble figée... ce quelque soit la boîte de dialogue (AfxMessageBox(), SHBrowseForFolder(), ...).

    Avez vous rencontré ce genre de problème ? ou avez vous une idée du pkoi ?
    Merci

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne comprends pas trop ce que tu veux faire en fait.
    D'où viens cette classe CTreePropSheet?
    A quoi devrais te servir cette classe?
    J'ai bien l'impression qu'il s'agit d'une classe du framework .Net. Mais cela me semble bizzare: je ne pense pas que l'on puisse utiliser la MFC et la CLR en même temps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Rupella
    Bonjour,

    Voici le cadre de mon appli : une application boîte de dialogue.
    dans cette boite de dialogue, dynamiquement, j'y crée une autre, qui se trouve être cliente de la premiere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      m_pConfig = new (CConfig);
      m_pConfig->Create(IDD_CONFIG_APP, &m_StaticModule);

    Merci
    Le constructeur ne semble pas bon; la fenêtre fille ne reçoit rien lors du Create de la classe parente
    Regarder dans le MSDN il est expliqué comment créer une CDialog "modeless"

  4. #4
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Citation Envoyé par r0d
    D'où viens cette classe CTreePropSheet?
    A quoi devrais te servir cette classe?
    J'ai bien l'impression qu'il s'agit d'une classe du framework .Net.
    C'est une classe que j'ai trouvé sur CodeProject, qui permet d'avoir un présentation sous forme de Tree Control des PropertyPages. Il s'agit d'une classe qui dérive de CPropertySheet.

    Citation Envoyé par mat.M
    Le constructeur ne semble pas bon; la fenêtre fille ne reçoit rien lors du Create de la classe parente
    En fait le Create me permet de loger la CDialog dans un contrôle PictureControl, pour la positionner et faire du PictureControl le parent. C'est du code que j'ai récupéré, je n'ai pas eu l'occasion de me pencher sur la création de la dialogue, vu que ca fonctionnait jusque la...

    Le prototype utilisé est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    virtual BOOL Create(
       UINT nIDTemplate,
       CWnd* pParentWnd = NULL 
    );
    La fenêtre principale est composée comme suit (CDialog) :
    1 / 3 supérieur pour les stats opérateur.
    2 / 3 restants pour la partie applicative, qui passe de l'opérationnel à la configuration.
    Les deux parties sont créées dynamiquement et affichées qd il y a besoin.

    Je n'ai jamais eu de souci pour l'instant avec cette facon de proceder, il n'y a qu'avec cette dialogue (de configuration). Qd l'exécution plante, le symptome est le meme, c.a.d. que j'ai le sablier, et rien ne bouge plus...

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Rupella
    Je n'ai jamais eu de souci pour l'instant avec cette facon de proceder, il n'y a qu'avec cette dialogue (de configuration). Qd l'exécution plante, le symptome est le meme, c.a.d. que j'ai le sablier, et rien ne bouge plus...

    L'ami il faut savoir se servir du débogueur intégré de VC++ ....et mettre des points d'arrêts là ou c'est nécessaire ; on sait d'ou viennent les plantages
    Peut-être q'au début de Initdialog....

  6. #6
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    c'est pas tellement la comment utiliser le debugger, mais plus comprendre pkoi les boites de dialogue que je peux ouvrir de cette fenêtre n'apparaissent pas...

  7. #7
    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,
    suggestion: met null pour le parent.
    tu as placé un point d'arrêt dans OnInitDialog ? pour voir si ça arrive jusque la.

  8. #8
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    en fait les problèmes interviennent dans le traitement des différentes pages, si je veux afficher une boîte de dialogue...

    elles sont toutes fonctionnelles, j'arrive aux SetActive() (puisque ce sont des CPropertyPages) pour chaque page de configuration.

    Lorsque je fais appel a une boîte de dialogue, j'arrive bien (pour la boîte appelée) au OnInitDialog()...

  9. #9
    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
    bon si tu arrives sur onInitDialog ,ton probleme doit venir d'un contrôle...
    ou d'un traitement dans OnInitDialog.
    puisque la premiere chose qui est faite c'est UpdateData qui subclass les contrôles de la fenêtre.
    met un point d'arret dans dodataexchange et trace .

  10. #10
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    oouh punaise !

    j'ai essayé avec une seule page, qui n'avait aucun contrôle, j'y ai rajouté un bouton, et sur le clic, je fais un AfxMessageBox, et... non, meme chose...

  11. #11
    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
    tu te trompes pas sur les proprietés de ta dialogue ?

  12. #12
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    c'est à dire ???

    j'essaye en parallèle de faire un ptit projet qui reproduit le soft sur lequel je bosse... histoire de pouvoir faire partager, et ce sera plus facile je pense...

  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
    tu as mis child ou popup ?

  14. #14
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    J'ai vérifié l'ensemble des propritétés des dialogues...

    je joins un fichier ZIP d'un projet exemple qui reproduit le problème, avec la meme "configuration" logicielle (interface).

    à l'attention de votre aimable expertise... je sature depuis hier...
    j'ai fait un AfxMessageBox dans la page base de données cliquer sur Tester...ConfigurationMygale.zip

    Merci pour toute l'aide que vous serez susceptible de me fournir...

  15. #15
    mat.M
    Invité(e)
    Par défaut
    Je n'ai que VC++6 je ne peux pas compiler le projet ; peux-tu soit générer un fichier .dsw ou bien donner le lien sur codeproject.com ?

  16. #16
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    euh.... je sais pas si je peux faire du retro avec VS2005.
    c une application Dialog Based, si tu veux avoir un squelette, puis rajoute les fichiers... (pas sur que ca marche, mais c pour la bonne cause ! )

  17. #17
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Bon, j'ai laissé tomber ce moyen d'affichage.
    Je me suis rabattu sur la fenetre de configuration en Popup window.
    Ca marche, je peux afficher des messages, c bon...

    Par contre, je sui embété pour le placement de la boite de dialogue (oui, je suis un boulet aujourd'hui ).

    J'ai le code suivant :

    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
     
    BOOL DlgMain::OnInitDialog()
    {
      CDialog::OnInitDialog();
     
      CWnd * pWnd = GetDlgItem(IDC_CLIENT);
     
      CRect rcClient;
      GetClientRect(&rcClient);
      ClientToScreen(&rcClient);
     
      m_pConfig = new (CDialogConfig);
      m_pConfig->Create(IDD_DLG_CONFIG, this);
     
      CRect rcSheet;
      pWnd->GetWindowRect( &rcSheet );
      ClientToScreen(&rcSheet);
      m_pConfig->SetWindowPos( NULL, rcClient.left + rcSheet.left, rcClient.top + rcSheet.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE );
      m_pConfig->ShowWindow(TRUE);
     
      return TRUE;
    }
    Pour afficher la boîte a partir de l'endroit ou se trouve le contrôle, mais il me l'envoie en haut de l'écran, avec certes le bon décalage par rapport a la boîte parente, mais je n'arrive pas a récupérer la position de la diaogue principale...

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Rupella
    Bon, j'ai laissé tomber ce moyen d'affichage.
    Je me suis rabattu sur la fenetre de configuration en Popup window.
    Ca marche, je peux afficher des messages, c bon...

    Par contre, je sui embété pour le placement de la boite de dialogue (oui, je suis un boulet aujourd'hui ).

    J'ai le code suivant :

    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
     
    BOOL DlgMain::OnInitDialog()
    {
      CDialog::OnInitDialog();
     
      CWnd * pWnd = GetDlgItem(IDC_CLIENT);
     
      CRect rcClient;
      GetClientRect(&rcClient);
      ClientToScreen(&rcClient);
     
      m_pConfig = new (CDialogConfig);
      m_pConfig->Create(IDD_DLG_CONFIG, this);
     
      CRect rcSheet;
      pWnd->GetWindowRect( &rcSheet );
      ClientToScreen(&rcSheet);
      m_pConfig->SetWindowPos( NULL, rcClient.left + rcSheet.left, rcClient.top + rcSheet.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE );
      m_pConfig->ShowWindow(TRUE);
     
      return TRUE;
    }
    Pour afficher la boîte a partir de l'endroit ou se trouve le contrôle, mais il me l'envoie en haut de l'écran, avec certes le bon décalage par rapport a la boîte parente, mais je n'arrive pas a récupérer la position de la diaogue principale...
    La meilleure solution est toujours la plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      CWnd * pWnd = GetDlgItem(IDC_CLIENT);
      pWnd->GetWindowRect( &rcSheet );
      ScreenToClient( &rcSheet );
     
      m_pConfig = new CDialogConfig;
      m_pConfig->Create( IDD_DLG_CONFIG, this );
      m_pConfig->MoveWindow( &rcSheet, FALSE);
      m_pConfig->ShowWindow( SW_SHOW );
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

Discussions similaires

  1. Problème avec mon appli mis en icone dans la barre des tâches
    Par Leray dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/04/2007, 20h30
  2. problème d'affichage d'image avec mozilla
    Par lyon31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/03/2006, 16h27
  3. [Mail] Problème d'affichage d'HEADERS avec mail();
    Par JeanMi66 dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 06h46
  4. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 15h45
  5. Fournir le JRE avec mon appli
    Par seiryujay dans le forum Général Java
    Réponses: 21
    Dernier message: 17/10/2005, 17h06

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