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 :

[MFC]agir sur un control depuis une dll


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut [MFC]agir sur un control depuis une dll
    J'ai besoin qu'une Dll chargée dynamiquement (et liée dynamiquement à la Dll MFC) puis agir sur une checkbox.

    Ca j'y arrive, je transmet à ma Dll l'adresse de la checkbox.

    Mais j'ai besoin que l'evenement OnMaCheckBoxClicked() soit egalement appellé !!!

    Et c'est la où j'ai un probleme.

    -----------------------------------------------------------

    J'ai d'abord voulu faire un pointeur sur fonction,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void (*pFnc) ()
     
    pFnc = OnMaCheckBoxClicked;
    Mais c'est loin d'etre génial le linker me jete en me disant qu'il est impossible de convertir un void (__thiscall CMaClasseDlg::*)(void) en un pFnc

    Or mon but est que ma Dll n'ai pas à inclure le header de CMaClasseDlg (sinon je devrai recompiler ma Dll a chaque fois que je modifie CMaClasseDlg )

    ------------------------------------------------

    Ma deuxieme tentative, a été de poster un message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxGetMainWnd()->PostMessage(BN_CLICKED,(WPARAM)1011,(LPARAM)pMaCheckBox->GetSafeHwnd()); //1011 est l'ID de ma checkBox(oui je sais, c'est vraiment deguelasse :) )
    Et la visiblement, le message n'arrive jamais a destination

    -sauriez vous me dire qu'est ce qui cloche dans ces instructions?

    -est il possible de faire le pointeur vers l'evenement, sans avoir à spécifier le type CMaClasseDlg dans la Dll?

    -Comment faire pour poster le message depuis la Dll vers le controle du thread principale pour que l'evenement soit déclenché?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    plutot que de t'embeter avec un postmessage à ralonge, pourquoi ne pas envoyer un message privé, et en réaction à ce message privé, tu appelerais la fonction OnMaCheckBoxClicked ?

  3. #3
    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
    ou encore,
    pourquoi passer par afxgetMainWnd() ?
    passe le handle (hwnd) de fenetre du control à ta dll ,et apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ::PostMessage(hWnd,WM_KEYDOWN,' ',0); 
    ::PostMessage(hwnd,WM_KEYUP,' ',0);

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci farscape, c'est en gros ce que je voulais faire, sauf que je me suis embrouillé l'esprit

    Nico : le probleme des message privé, c'est qu'a chaque nouveau besoin de la Dll, je devrai rajouter un message privé (doublon des messages pourtant deja présents) dans mon programme principale, et donc systematiquement recompiler ce dernier. Or le but de la Dll, c'est un peu quand meme de :

    1) pouvoir la réutiliser de facon plus ou moins generique
    2) ne pas avoir à recompiler le programme principale systematiquement, sinon, quel est l'interret d'une Dll?

    Ceci dit, j'ai en depannage utilisé cette solution pour ne pas bloquer [/code]

Discussions similaires

  1. Réponses: 16
    Dernier message: 15/05/2006, 14h49
  2. Réponses: 5
    Dernier message: 08/09/2005, 20h33
  3. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48
  4. Réponses: 9
    Dernier message: 03/12/2004, 11h35
  5. Acces a un control depuis une autre classe
    Par schnito dans le forum MFC
    Réponses: 5
    Dernier message: 25/01/2004, 22h14

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