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 :

Mise à jour de listControl sur une fenêtre modale MFC


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut Mise à jour de listControl sur une fenêtre modale MFC
    Bonjour à vous,

    Cela fait déjà plusieurs jours que je cherche ma réponse sans succès. Le dicton "Google est ton ami" ne s'applique pas toujours dans mon cas malheureusement...

    mon problème est le suivant :

    J'ai créé une fenêtre principale à partir de laquelle j'appelle une boîte de dialogue, que je souhaite modale. La classe associée à cette boîte de dialogue s'appelle "CDialog_Batch".

    J'ai fait le design de cette fameuse boîte de dialogue. Elle se compose notamment d'une ListCtrl nommée : m_list_batch (class CListCtrl).

    Je cherche à mettre à jour cet objet dans ma fenêtre en faisant :


    m_list_batch.Insert(0, "Matricule", LVCFMT_LEFT, 80);
    ...

    UINT item = m_list_batch.InsertItem(0, "00000001");
    ...

    J'ai donc deux solutions pour appeler ma boîte de dialogue depuis ma fenêtre principale :

    La première qui fonctionne super, sauf que ma fenêtre n'est pas modale...

    CDialog_Batch dialog_batch = new CDialog_Batch;
    dialog_batch.create(IDD_BATCH_LIST, this);
    dialog_batch.CenterWindow();
    dialog_batch.ShowWindow(SH_SHOW);
    J'ai surcharger la méthode "create" pour pouvoir mettre à jour mon ListCtrl.
    DOnc mis à part qu'elle ne soit pas modale, çà fonctionne.


    Sauf que moi je veux absolument que ce soit modal !!! J'ai bien essayer les méthodes "ContinueModal", "BeginModalState", plus par désespoir qu'autre chose, mais rien y fait...


    Fort de cette première expérience j'ai tenté une nouvelle approche :

    CDialog_Batch dialog_batch;
    dialog_batch.DoModal();
    La c'est bien modal , pas de soucis, sauf que je ne peux pas modifier le contenu de ma nouvelle boîte de dialogue... en écrivant un truc du genre :

    CDialog_Batch dialog_batch;

    m_list_batch.Insert(0, "Matricule", LVCFMT_LEFT, 80);
    ...

    UINT item = m_list_batch.InsertItem(0, "00000001");

    dialog_batch.DoModal();

    En effet, j'ai une super fenêtre windows qui me sort son "assertion failed"!! J'en suis très fier mais çà m'avance pas beaucoup comme message d'erreur...



    Je suis tombé dans la FAQ du site sur une question analogue, mais malheureusement qui ne fonctionnait pas dans mon cas, je ne sais pas bien pourquoi...


    Quoi qu'il en soit je prie pour que quelqu'un d'entre vous est une solution à mon problème car je suis à bout moi... :'(

    D'avance, Grand MERCIà vos réponses!

  2. #2
    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,
    l'initialisation des contrôles d'une boîte de dialogue modale ne peut être faite que dans la boîte de dialogue, idéalement dans sa fonction OnInitDialog (a générer avec l'assistant).

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci de ta réponse

    J'ai essayé d'utiliser OnInitDialog. Mais comment faire pour mettre à jour ma listCtrl? Parce que je peux pas écrire à froid :

    BOOL CDialog_Batch::OnInitDialog()
    {
    m_list_batch.Insert(0, "Matricule", LVCFMT_LEFT, 80);
    ...

    UINT item = m_list_batch.InsertItem(0, "00000001");

    return true;
    }

    Un petit détail, je n'ai pas pu générer cette méthode avec l'assistant, car il ne me l'a pas proposée dans la fenêtre "MFC ClassWizard"...

    Enfin qu'à cela ne tienne je l'ai écrite à la main, et vérifier qu'elle était bien appelée avant tous, et c'est le cas.

    Mais bon, je fais toujours face à la fenêtre Windows "Assertion failed" lors du "Insert", qui m'émoustille toujours autant...

  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
    Cette fonction est associée au message WM_INITDIALOG.
    donc dans l'assistant (visual 6.0 ? ou visual 2005 ? ) il faut chercher ce message.
    Car dans ce que tu as écris la fonction de la classe de base n'est pas appellée,
    donc que l'insertion plante sur ta listctrl ne m'étonne pas, celle-ci ne doit pas initialisée graphiquement .
    que vaut sa donnée membre m_hWnd ?
    voir faq: http://c.developpez.com/faq/vc/?page...nge#UpdateData
    voir aussi faq:
    http://c.developpez.com/faq/vc/?page...trlInitAndFill


  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    YES!!

    GRAND GRAND GRAND MERCI à toi farscape.

    En effet il me manquait l'appel OnInitDialog de la classe CDialog. Or cet appel est la première action effectuée lorsque la méthode est générée par l'assistant (le coup du WM_INITDIALOG fallait le savoir celui la ). je l'avais pas vu .


    Pffiou je suis trop trop soulagé!

    Grand merci pour tes réponses directes et surtout rapides

    Je reviendrais

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

Discussions similaires

  1. [Struts2] Mise à jour des données sur une liste déroulante
    Par kindersurprise77186 dans le forum Struts 2
    Réponses: 1
    Dernier message: 26/05/2011, 03h30
  2. Perte de focus sur une fenêtre modale
    Par yonpo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/01/2011, 15h32
  3. Pb de mise à jour du contenu d'une fenêtre
    Par sepas dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 05/09/2009, 15h01
  4. Réponses: 2
    Dernier message: 24/03/2008, 18h59
  5. [PowerBuilder] Récupérer la main sur une fenêtre modale
    Par jpdar dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 15h21

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