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

Windows Discussion :

classes et callback


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut classes et callback
    salut à tous,

    voila je suis en train de faire un lecteur mp3 et j'aimerai bien mettre le callback permettant de gérer la fenêtre dans la classe gérant le mp3 et gérer également la création de la fenêtre à l'intérieur
    pour l'instant j'ai essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dans le .h (prototype)
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    
    dans le .cpp (implémntation)
    LRESULT CALLBACK Lecteur::MainProc (HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
      ...
    }
    
    et après dans lors de la création de la fenêtre
    hWnd_global = CreateDialog(hInstance_globale,(LPCTSTR)ressource_boite_de_dialogue,NULL,(DLGPROC)MainProc);
    mais sa ne marche pas il me met
    error C2440: 'type cast' : cannot convert from '' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
    None of the functions with this name in scope match the target type

    voila si quelqu'un à des suggestions ...
    merci d'avance
    @+

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    La DialogProc ne retourne pas un LRESULT (LONG_PTR) mais un INT_PTR...
    De plus, tu ne peux pas mettre ainsi une fonction membre de classe : Tu dois la déclarer static, et s'arranger pour lui passer this d'une autre manière.

    (Généralement, on passe le pointeur au début avec CreateDialogParam() et on l'enregistre dans le traitement de WM_INITDIALOG avec un SetWindowLong(Dlg, GWL_USERDATA, ptrThis); Ensuite, il suffit d'un GetWindowLong(Dgl, GWL_USERDATA) pour le récupérer...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 117
    Points : 35
    Points
    35
    Par défaut
    euh excuse moi mais je n'ai pas tout compri, pourrais tu me ré-expliquer comment je dois déclarer MainProc ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    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
    class Lecteur
    {
    public://Si la fonction de création n'est pas dans la classe
    	static INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    };
    
    /* Procédure de boite de dialogue
       ------------------------------ */
    INT_PTR CALLBACK Lecteur::DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    //Ici, de base, on n'a pas accès à this : Il faut s'arranger pour le passer autrement.
    Lecteur *this = reinterpret_cast<Lecteur *>&#40;GetWindowLong&#40;hDlg, GWL_USERDATA&#41;&#41;;
    
    switch&#40;uMsg&#41;
    	&#123;
    	case WM_INITDIALOG&#58;
    		&#123;
    		SetWindowLong&#40;hDlg, GWL_USERDATA, lParam&#41;;
    		this = reinterpret_cast<Lecteur *>&#40;lParam&#41;;
    		&#125;
    		break;
    
    	//Traitement des autres messages...
    	&#125;;
    
    &#125;
    
    
    //Dans la fonction de création
    &#123;
    //&#40;bien sûr, tu peux utiliser un pointeur sur lecteur à la place&#41;
    Lecteur monLecteur;
    
    hWnd_global = CreateDialogParam&#40;
     hInstance_globale,
     MAKEINTRESOURCE&#40;numero_ressource_boite_de_dialogue&#41;,
     NULL,
     Lecteur&#58;&#58;DialogProc,
     &#40;LPARAM&#41;&monLecteur
     &#41;;
     
    &#125;
    Ce n'est ni compilé ni testé, mais c'est l'idée générale.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/11/2007, 01h15
  2. [c++] Mettre un callback dans un espace de nommage ou une class
    Par Spartan03 dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 20/01/2007, 16h12
  3. callback Win32 dans des classes perso
    Par NiamorH dans le forum Windows
    Réponses: 12
    Dernier message: 07/01/2007, 17h47
  4. Les callback et les classes
    Par koala01 dans le forum C++
    Réponses: 9
    Dernier message: 28/08/2006, 16h02
  5. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42

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