OVH Cloud OVH Cloud

CListCtrl

9 réponses
Avatar
Olivier
Bonjour

Je suis à la recherche d'un exemple d'utilisation d'une List Control dans
une boite de dialogue.
Je voudrais pouvoir remplir la liste de la boite de dialogue avec les donnée
sérialisées dans une architecture MFC Document/Vue...

Cordialement,

Olivier

9 réponses

Avatar
antoine
"Olivier" wrote in message
news:429a1a34$0$306$
Bonjour

Je suis à la recherche d'un exemple d'utilisation d'une List Control dans
une boite de dialogue.



T'as regardé les divers exemples de MSDN ?
par exemple :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/ht
ml/_sample_mfc_LISTHDR.asp
Avatar
Olivier
Oui mais aucun ne correspond à ce que je recherches...
Il sont tous dans la fenêtre courante de l'application et pas dans une boite
de dialogue...
En fait mon probleme c'est pour remplir la liste de la boite de dialogue
avec les données stockées dans un CObArray du document...
Avatar
antoine
"Olivier" wrote in message
news:429a2d0d$0$304$
Oui mais aucun ne correspond à ce que je recherches...
Il sont tous dans la fenêtre courante de l'application et pas dans une


boite
de dialogue...



L'exemple donné est bien dans une boite de dialogue !
Avatar
Olivier
> L'exemple donné est bien dans une boite de dialogue !



Oui mais en fait moi je suis dans une architecture Document/Vue (MFC).
Ma classe document (CDocument) ouvre une boite de dialogue avec une liste.
La boite de dialogue est traitée par une autre classe (CDialog).
Les données (CObArray) à mettre dans la liste de la boite de dialogue sont
contenues dans la classe CDocument.
Voila mon probleme...
Avatar
adebaene
Olivier a écrit :
> L'exemple donné est bien dans une boite de dialogue !

Oui mais en fait moi je suis dans une architecture Document/Vue (MFC).
Ma classe document (CDocument) ouvre une boite de dialogue avec une liste.
La boite de dialogue est traitée par une autre classe (CDialog).
Les données (CObArray) à mettre dans la liste de la boite de dialogue sont
contenues dans la classe CDocument.
Voila mon probleme...



La classe View a une méthode GetDocument. A partir de là, il suffit
que ton document propose une méthode publique permettant d'accéder à
ton tableau. Où est le problème?

Arnaud
MVP - VC
Avatar
Olivier
>La classe View a une méthode GetDocument. A partir de là, il suffit
que ton document propose une méthode publique permettant d'accéder à
ton tableau. Où est le problème?



Je n'utilise pas la classe View...
Ma classe Doc stock les infos (sérialisées) dans un CObArray.
Dans le menu g mis une option "Rechercher", quand cette option est activée
la classe Doc exécute les lignes suivantes :

void CSiteMapDoc::OnFindSite()
{
CFindSite dlg;
CListCtrl* pList = (CListCtrl*) GetDlgItem(dlg, IDC_LISTFIND);
// Invoque la boite de dialogue
dlg.DoModal();
int nbRec = GetSize(); // Retire le nombre d'enregistrements
for (int i=0; i<nbRec;i++)
{
pList->InsertItem(i, "");
pList->SetItemText(i, 0, "ESSAI");
}
}

Ma boite de dialogue apparait bien, mais il n'y a rien dans la liste...
Quand je clique sur OK ou ANNULER de la boite de dialogue g un plantage...

Cordialement,

Olivier
Avatar
Arnaud Debaene
Olivier wrote:
La classe View a une méthode GetDocument. A partir de là, il suffit
que ton document propose une méthode publique permettant d'accéder à
ton tableau. Où est le problème?



Je n'utilise pas la classe View...



??? Tu as dit que tu utilisait l'architecture Doc/View, faudrait savoir...

Ma classe Doc stock les infos (sérialisées) dans un CObArray.
Dans le menu g mis une option "Rechercher", quand cette option est
activée la classe Doc exécute les lignes suivantes :

void CSiteMapDoc::OnFindSite()
{
CFindSite dlg;
CListCtrl* pList = (CListCtrl*) GetDlgItem(dlg, IDC_LISTFIND);


?? Qu'est ce qu'un GetDlgItem fait (et fonctionne!) dans un document??? Ca
m'a pas l'air très catholique comme architecture tout çà... Des fois,
IDC_LISTFIND ne serait pas définie dans la boite de dialogue CFindSite,
plutôt que dans le document?

// Invoque la boite de dialogue


Avant d'invoquer la boite de dialogue, il faut lui donner les infos sur ce
qu'elle doit afficher! Et puis je ne vois pas d CObjArray dans tout çà...
dlg.DoModal();



Le code après cette ligne est exécuté *après* que tu ais fermé la boite de
dialogue : DoModal est un appel bloquant qui ne rend la main que quand la
boite de dialogue est refermée.
int nbRec = GetSize(); // Retire le nombre d'enregistrements
for (int i=0; i<nbRec;i++)
{
pList->InsertItem(i, "");
pList->SetItemText(i, 0, "ESSAI");
}
}

Ma boite de dialogue apparait bien, mais il n'y a rien dans la
liste... Quand je clique sur OK ou ANNULER de la boite de dialogue g
un plantage...



Dans les grandes lignes, ce qu'il faut faire (atention, code non compilable,
c'est juste pour donner l'idée) :
class CFindSite : public CDialog
{
private:
CObjArray const* m_data_to_display;
public:
void SetDataToDisplay(const CObjArray& data)
{
m_data_to_display=&data;
}

void OnCreate()
{
//affiche le contenu de m_data_to_display dans IDC_LISTFIND
}
};

et dans ton document :
void CSiteMapDoc::OnFindSite()
{
CFindSite dlg;
dlg.SetDataToDisplay(m_array);
dlg.DoModal();
}

Arnaud
Avatar
Olivier
Salut

J'ai testé ton code...
Tout fonctionne bien sauf que je n'ais pas accès aux fonctionnalités de
CObArray :
m_data_to_display.GetSize() et m_data_to_display.GetAt() ne fonctionnent
pas...
Je débute...

Olivier
Avatar
adebaene
Olivier a écrit :
Salut

J'ai testé ton code...
Tout fonctionne bien sauf que je n'ais pas accès aux fonctionnalités de
CObArray :
m_data_to_display.GetSize() et m_data_to_display.GetAt() ne fonctionnent
pas...



m_data_to_display est un pointeur, donc m_data_to_display->GetSize() et
m_data_to_display->GetAt()

Je débute...


Si tu as du mal avec les pointeurs, je te conseille dans un 1er temps
de laisser tomber les MFC et tout ce qui est IHM graphique, et de te
concentrer sur l'apprentissage du *langage* C++ dans des applications
console plus simples. Là, tu essaies d'apprendre des tas de choses
différentes en même temps (MFC, Win32, langage C++, etc...) et ce
n'est jamais une bonne méthode.

Arnaud
MVP - VC