[MFC] appel de la classe CFormview

sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006 - 10 avril 2006 à 12:55
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006 - 11 avril 2006 à 08:06
Bonjour,


J'ai un projet MFC avec une classe CFormulaire de type CFormview (Formulaire.cpp), et dans cette classe, j'ai une fonction void Ajouter()


Cette fonction ajoute des éléments dans une listbox et elle marche parfaitement lorsque je l'appelle directement dans Formulaire.cpp


Mais j'ai besoin d'appeler cette fonction dans la classe CWinApp, pour cela j'ai essayé :


CFormulaire* formu;


formu->Ajouter();


Mais ça ne marche pas, il y a une erreur lors de l'exécution.

12 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 14:21
Il faut que tu récupère ton formulaire avec GetDlgItem():

CFormulaire * pForm = (CFormulaire *)GetDlgItem(ID_FORM);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
10 avril 2006 à 14:58
Merci Bruno, mais malheureusement ça ne marche pas, j'explique :

j'ai donc essayé
CFormulaire * formu = (CFormulaire *)GetDlgItem(IDD_FORMVIEW);

et VC++ me met une erreur à la compilation : il manque un paramètre pour GetDlgItem, et effectivement, dans l'aide, je vois qu'il faut le handle de la fenêtre en premier paramètre.

Question : j'ai bien trouvé l'ID : IDD_FORMVIEW (dans le fichier Formulaire.h) mais je n'ai pas trouvé son handle, où puis-je le trouver ?

Je précise que j'ai créé la classe Formulaire de type CFormView de manière automatique avec class wizard...
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 15:04
Est-ce que ton formulaire est un membre d'une classe plus global (genre dialog)? Si oui, quand tu crée ton formulaire, tu peux sauvegarder son handle

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
10 avril 2006 à 15:12
Je ne comprends pas bien ta question.
La classe CFormulaire que j'ai créé est dérivée de la classe CFormView.

Voici le début de Formulaire.cpp

// CFormulaire


IMPLEMENT_DYNCREATE(CFormulaire, CFormView)


CFormulaire::CFormulaire()
: CFormView(CFormulaire::IDD)
{
//{{AFX_DATA_INIT(CFormulaire)
//}}AFX_DATA_INIT
}


CFormulaire::~CFormulaire()
{
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 15:24
OK, mais sa création se fait bien quelque part? Avec la fonction CreateDialog?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
10 avril 2006 à 15:40
Pour créer la classe Formulaire,
Je suis allé dans View => classwizard => add class => new
Name : CFormulaire
Base Class : CFormView
Dialog ID : IDD_FORMVIEW

ensuite j'ai créé graphiquement la listbox dans le menu ressources => dialog de VC++
et j'ai affecté l'ID IDC_LIST1 à la listbox

Donc tout a été créé automatiquement et dans le code je ne vois pas de fonction du style CreateDialog.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 15:51
Bon...
Et tu dis que GetDlgItem() ne va pas?
Si tu fais: CWnd::GetDlgItem(IDD_FORMVIEW) ?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
10 avril 2006 à 16:01
CWnd::GetDlgItem(IDD_FORMVIEW)
ça j'avais essayé aussi :
j'ai le message "illegal call of non-static member function"

et quand je déclare comme ça :
CFormulaire * formu = (CFormulaire *)GetDlgItem(IDD_FORMVIEW);
j'ai le message "function does not take 1 parameter"
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 16:23
Où essaies-tu d'appeler ta fonction Ajouter()? En gros, est-ce que ton formulaire est accessible à cet endroit?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
10 avril 2006 à 16:38
L'application ouvre un fichier texte puis l'affiche dans une listbox (la classe formulaire)
c'est donc dans la fonction OnOpenFile() de la classe de l'application (la classe CWinApp) que j'appelle la méthode ajouter de la formview. Je pense que mon formulaire y est accessible, j'ai bien sur fait #include formulaire.h
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 avril 2006 à 16:52
Alors essaie ceci:
CFormulaire * formu = (CFormulaire *)theApp->GetDlgItem(IDD_FORMVIEW);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sliders75 Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 19 avril 2006
11 avril 2006 à 08:06
quand je mets
CFormulaire * formu = (CFormulaire *)theApp->GetDlgItem(IDD_FORMVIEW);
j'ai le message suivant :
type 'CNouveauApp' does not have an overloaded member 'operator ->'

et quand je mets
CFormulaire * formu = (CFormulaire *)theApp.GetDlgItem(IDD_FORMVIEW);
j'ai le message suivant :
error C2039: 'GetDlgItem' : is not a member of 'CNouveauApp'
0
Rejoignez-nous