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 :

Evènements MFC indisponibles


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut Evènements MFC indisponibles
    Bonjour,

    Pour mon projet de fin d'études, je dois modifier une application en C++ avec une interface en MFC. Le problème, c'est que c'est un projet qui vient de Microsoft et c'est un peu compliqué. C'est un exemple d'implémentation de LASS/LAP sur un Smartphone sous Windows Mobile 6 Standard.

    Je voudrais tout simplement gérer les évènements d'une boite de texte intégrée dans une boite de dialogue CDialog (du style OnKeyDown ou OnKeyUp). Le problème, c'est que quand j'essaie de traiter un évènement à partir du gestionnaire d'évènement en double-cliquant sur la textbox, je n'ai aucun évènement de listé! J'ai essayé de relier la CDialog à une classe, mais c'est toujours pareil... Dernier point: cette CDialog est intégrée dans un fichier ressources (.rc).

    Si quelqu'un peut m'aider je lui serais reconnaissant!

  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
    Par défaut
    salut,
    tu ne peux pas accéder directement aux touches frappées a destination d'un edit dans la boite de dialogue.
    ça ne fait pas partie des évènements interceptables en dehors de l'edit.
    pour cela il faut que tu fasses une classe dérivée de CEdit que tu interceptes le message WM_CHAR ou WM_KEYDOWN sur cette classe.
    ensuite il faudra utiliser cette classe à la place de la classe de base.
    exemple faq: http://cpp.developpez.com/faq/vc/?pa...EditFilterChar

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Merci pour cette réponse. J'ai implémenté la nouvelle classe dérivée, mais j'ai une erreur lors de la génération:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur	1	error LNK2005: DllMain déjà défini(e) dans lap.obj
    Erreur	2	fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
    J'ai déjà lu beaucoup de solutions potentielles, notamment provenant des sources Microsoft. Malheureusement, aucune d'elles ne semble fonctionner! J'utilise un projet "exemple" de Microsoft, issu du WM6 Standard SDK, et à chaque fois que j'essaie d'ajouter un fichier au projet j'ai la même erreur...

  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
    Par défaut
    hé bien ça n'a pas trop de rapport avec le sujet initial..
    en gros tu as deux fois DllMain , dans ton projet..

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Oui c'est ce que j'ai pensé aussi au début, mais le problème c'est que je n'ai qu'une seule occurrence de DllMain dans ma solution! Et le problème apparaît après le rajout d'une classe, qui n'a rien à voir avec DllMain donc c'est assez bizarre...

  6. #6
    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
    Par défaut
    tu génères bien un dll avec les options MFC ?
    pas un dll win32 ?
    tu as vérifié lap.cpp (indiqué dans ton message d'erreur) ?.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    L'erreur vient peut être de là, j'ai les options suivantes dans les paramètres du projet sous visual studio 2005:
    - type de configuration: bibliothèque dynamique (dll)
    - utilisation des MFC: utiliser les bibliothèques Windows standard

    J'ai essayé de changer le 2e paramètre à "utiliser MFC dans une bibliothèque statique" ou "utiliser les MFC dans une DLL partagée", mais ils me retournent la même erreur...

  8. #8
    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
    Par défaut
    ce que j'ai du mal a comprendre en relisant ton post c'est le rapport avec la dll et le projet MFC du départ..
    la boite de dialogue est dans la DLL ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Oui, la boite de dialogue est inclue dans un fichier ressource dans mon projet DLL.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    J'ai trouvé un moyen de contourner le message d'erreur en forçant la main au compilateur. L'application fonctionne bien, mais en implémentant tes conseils sur la classe dérivée de CEdit pour gérer les évènements de mes champs texte, je rencontre un problème.

    Mon environnement référence bien les différentes notifications disponibles pour le champ edit, je code une notification ON_EN_CHANGE pour détecter quand on écrit dans le champ edit, mais elle ne semble jamais se lancer... C'est un projet Smart Device MFC DLL, or en essayant de la même manière sur un projet "classique" MFC sur PC, la notification est bien lancée! Est-ce que tu saurais d'où vient le problème? Peut-être existe t-il une nuance entre les notifications MFC sur PC et sur Smart Device?

  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
    Par défaut
    salut,
    c'est bizarre ...
    la dll d'extension MFC fonctionne sur ce principe et donc il ne devrait pas y avoir de problèmes ...
    tu as bien déclaré ta classe avec AFX_EXT_CLASS ?
    dans ton projet MFC tu utilises bien cette nouvelle classe associée a une variable contrôle ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Salut,

    Oui, j'ai bien déclaré ma classe avec AFX_EXT_CLASS. J'ai aussi ajouté une variable membre contrôle, par contre je ne suis pas sûr de bien comprendre ce que tu veux dire par "dans ton projet MFC tu utilises bien cette nouvelle classe associée a une variable contrôle". J'ai juste défini la variable mais je ne sais pas trop où l'utiliser, je pensais juste que la méthode de la notification EN_CHANGE se lancerai à chaque changement de valeur de mon edit.

    Sinon, autre question: un Edit est-il différent d'un RichEdit?

  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
    Par défaut
    tu peux montrer comment tu l'utilises (ou declare ) ?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Voici le .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
    class AFX_EXT_CLASS test : public CEdit
    {
    	DECLARE_DYNAMIC(test)
     
    public:
    	test(CWnd* pParent = NULL);   // constructeur standard
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_ENROLE_SQUARE };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
    	afx_msg void OnEnChangePasswordstringnew();
     
    	DECLARE_MESSAGE_MAP()
    public:
    	CEdit pwdNewCtrl;
    };
    et le .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
    IMPLEMENT_DYNAMIC(test, CEdit)
     
    test::test(CWnd* pParent /*=NULL*/)
    	: CEdit()
    {
    }
     
    void test::DoDataExchange(CDataExchange* pDX)
    {
    	CEdit::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_PASSWORDSTRINGNEW, pwdNewCtrl);
    }
     
    BEGIN_MESSAGE_MAP(test, CEdit)
    	ON_EN_CHANGE(IDC_PASSWORDSTRINGNEW, &test::OnEnChangePasswordstringnew)
    END_MESSAGE_MAP()
     
     
    // Gestionnaires de messages de test
     
    void test::OnEnChangePasswordstringnew()
    {
    	AfxMessageBox(L"test");
    }

  15. #15
    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
    Par défaut
    salut,
    ok ça c'est la classe , et son utilisation ?
    dans ta fenêtre tu dois avoir une donnée membre de type contrôle qui utilise cette classe , c'est le cas ?

  16. #16
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    il y a déjà un gros truc qui cloche dans le code ...
    la classe test dérive de CEdit et non CDialog ...
    ça ne peut pas fonctionner ce code !

    @+

  17. #17
    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
    Par défaut
    effectivement j'avais pas fait attention ...
    je crois que tu mélange tout la !
    le sujet était de faire une classe dérivée de CEdit avec l'assistant, de trapper le message adéquate comme indiqué précédemment .
    et utiliser cette classe dans la dialogue correspondante....

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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