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 :

'GetDlgItem' : function does not take 1 parameters


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut 'GetDlgItem' : function does not take 1 parameters
    Voila, j'utilise ceci pour faire afficher des éléments dans une ListBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CListBox* pListBox=static_cast<CListBox*>(GetDlgItem(IDC_LIST2));
    pListBox->AddString(reinterpret_cast<const char *>(packet_number));
    Et je recois l'erreur suivante

    error C2660: 'GetDlgItem' : function does not take 1 parameters
    En fait IDC_LIST2 est défini dans une boite de dialogue.

    Le code ecrit ci dessous est mis dans un autre fichier.cpp que la boite de dialogue.
    J'ai pourtant inclus le .h de ma boite de diaogue.

    Si le code posant probleme est ecrit dans le .cpp de la boite de dialogue, je n'ai plus d'erreur.

    J'espere que je ss assez clair.....

    Merci pour vos idées

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CListBox* pListBox=static_cast<CListBox*>(this->GetDlgItem(IDC_LIST2));

  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
    si tu as cette erreur c'est que la fonction dans laquelle est situé ce code ne fait pas partie de la classe dialogue ou d'une classe fenêtre (dérivée de CWnd).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    J obtiens ca


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error C2673: 'capt' : global functions do not have 'this' pointers
    error C2227: left of '->GetDlgItem' must point to class/struct/union

  5. #5
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    bah l'erreur c'est ce que t'indique farscape

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Je dois donc définir ma fonction qui est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UINT capt( LPVOID Param);
    dans ma classe Dialogue?

    Le .h de ma classe dialogue est ceci:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #if !defined(AFX_AFFICHAGECAPTURE_H__07281D6A_C56F_4782_A937_C47C74EAD74F__INCLUDED_)
    #define AFX_AFFICHAGECAPTURE_H__07281D6A_C56F_4782_A937_C47C74EAD74F__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // AffichageCapture.h : header file
    //
    /////////////////////////////////////////////////////////////////////////////
    // AffichageCapture dialog
    class AffichageCapture : public CDialog
    {
    // Construction
    public:
     AffichageCapture(CWnd* pParent = NULL);   // standard constructor
     
    // Dialog Data
     //{{AFX_DATA(AffichageCapture)
     enum { IDD = IDD_SNIFFER_AFFICHAGE };
     CListBox m_affichetrames;
     //}}AFX_DATA
     
    // Overrides
     // ClassWizard generated virtual function overrides
     //{{AFX_VIRTUAL(AffichageCapture)
     protected:
     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     //}}AFX_VIRTUAL
    // Implementation
    protected:
     // Generated message map functions
     //{{AFX_MSG(AffichageCapture)
     virtual BOOL OnInitDialog();
     afx_msg void OnAffichageTrames();
     afx_msg void OnStart();
     afx_msg void OnStop();
     afx_msg void OnSelchangeList2();
     //}}AFX_MSG
     DECLARE_MESSAGE_MAP()
    };
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    #endif // !defined(AFX_AFFICHAGECAPTURE_H__07281D6A_C56F_4782_A937_C47C74EAD74F__INCLUDED_)

  7. #7
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    euh fait gaffe à si c'est une methode static je penses que ca marcheras pas !!!
    moi je verrais bien le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::GetDlgItem(handle_dialog,IDC_LIST);
    dans ce cas la (voir ici )

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Qu'est ca tu entends par methode statique?

    Ma liste box va se remplir dynamiquement grace a la fonction capt.

    si tu as cette erreur c'est que la fonction dans laquelle est situé ce code ne fait pas partie de la classe dialogue ou d'une classe fenêtre (dérivée de CWnd).
    Il y a t il un moyen de remedier à ca?

  9. #9
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    bah oui tu déclare ta methode UINT capt(LPVOID pParam); dans ta classe AffichageCapture. Mais vu la signature c'est pour lancer un thread donc je pense qu'il faut tu créé une méthode static comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class AffichageCapture
    {
    ....
    public:
       static UINT capt(LPVOID pParam);
    }
    donc tu ne pourra spas utiliser la méthode GetDlgItem(IDC_XXX); car c'est une méthode d'instance. tu devras utiliser celle que j'ai précité

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    si je déclare

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class AffichageCapture
    {
    ....
    public:
       UINT capt(LPVOID pParam);
    }
    J'obtiens ca:

    AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
    Et si je déclare

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class AffichageCapture
    {
    ....
    public:
       static UINT capt(LPVOID pParam);
    }
    J'obtiens ca:

    unresolved external symbol "public: static unsigned int __cdecl AffichageCapture::capt(void *)"

  11. #11
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    euhhh dans ton .cpp

    tuas bien mis UINT AffichageCapture::capt(...){..} ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Ce qu je ne comprends pas bien c que le corp de mes fonction est défini dans una autre .cpp que AffichageCapture.cpp.

    Je les appelles de ce dernier, et je souhaite qu'elles me renvoi des données...

    Je ss un peu confus là...

    donc tu ne pourra spas utiliser la méthode GetDlgItem(IDC_XXX); car c'est une méthode d'instance. tu devras utiliser celle que j'ai précité
    Laquelle?

  13. #13
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    respecte la structure qui est montré dans la faq a propos des threads !!!

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Je reprends....
    je lance à partir d'une boite de dialogue un thread comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxBeginThread(capt,GetSafeHwnd(),THREAD_PRIORITY_NORMAL,0,0,NULL);
    J'aimerai que la fonction appellée renvoi des éléments à la boite de dialogue en question, au travers d'une listbox par exemple.

    Je ne vois pas comment faire?

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CListBox* pListBox=static_cast<CListBox*>(GetDlgItem(IDC_LIST2));
    pListBox->AddString("essai");
    Apparenment:

    la fonction dans laquelle est situé ce code ne fait pas partie de la classe dialogue ou d'une classe fenêtre (dérivée de CWnd).
    Comment dois-je faire pour l'integrer à ma classe dialogue?

    J'ai trouvé ca dans la FAQ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UINT TheThread(LPVOID pParam)
    {
    ::PostMessage((HWND)pParam,WM_MY_MSG_PRIVE,0,0) ;
    return 0 ;
    }
    Dois- je utiliser ceci?

Discussions similaires

  1. Alerte "type java.awt.List does not take parameters"
    Par riamo dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/08/2013, 22h20
  2. Réponses: 0
    Dernier message: 30/03/2011, 14h12
  3. Réponses: 7
    Dernier message: 13/11/2009, 17h00
  4. Réponses: 2
    Dernier message: 28/03/2007, 22h25
  5. "function does not take 0 parameters"
    Par beb30 dans le forum C
    Réponses: 4
    Dernier message: 31/03/2006, 20h56

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