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 :

[winAPI] Pour hovers : peut-on affecter une région à un bouton (associé à une image)?


Sujet :

Windows

  1. #41
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    As-tu essayé en créant la tooltip sans ballon et en l'ajoutant ensuite avec NIM_MODIFY ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #42
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Tu veux dire que la modification engendrerait l'affichage du ballon ?
    Vive l'embarqué.

  3. #43
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est pas certain, mais ça ne coute rien d'essayer...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #44
    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
    salut,
    j'interviens sur ce point :
    ([edit] je précise, sans MFC puisque je ne le maîtrise pas du tout, et parce qu'on m'a dit que c'était amené à disparaître...)
    faux et archi-faux ,la rumeur à la vie dure

  5. #45
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par farscape
    salut,
    j'interviens sur ce point :

    faux et archi-faux ,la rumeur à la vie dure
    Sûrement une rumeur non-fondée, alors ^^

    Sinon, j'ai réfléchi à la structure de mon programme, et je rencontre un petit problème...
    En fait, je compte faire une classe Button, PList, TC (Time Control : avec le seeker et l'affichage du temps), intégrés dans la classe Player. Seulement, j'ai pensé faire un module audio, qui contiendrait des méthodes de maniement de la musique (play, pause, load...) ainsi qu'une structure Music contenant les infos sur la musique en cours, stockée dans une stream FSOUND_STREAM dans cette même structure. MAIS j'aimerais utiliser ce module audio dans différents programmes, et j'ai donc pensé à lier le programme avec la bibliothèque contenant la définition de Audio, Music ainsi que la définition.

    Voici le problème : comme je ne peux pas stocker ce module en tant que membre de Player (ce n'est pas logique) et que je dois y accéder par la classe PList et TC, j'aimerais faire comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int WINAPI WinMain (/*...*/)
    {
        Audio moduleAudio;
        Player player (hThisInstance);
        
        return player.run ();
    }
    Et donc : comment accéder à moduleAudio à partir de player ou de ses membres ?
    J'ai vu que pour une variable globale, il suffisait d'utiliser l'opérateur de résolution de portée suivi du nom de la variable. N'y a-t-il pas pareil ici ?

    Merci d'avance.
    Vive l'embarqué.

  6. #46
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mon conseil: Passe un pointeur vers moduleAudio dans le constructeur de player (et mémorise ledit pointeur dans une variable d'instance de la classe Player)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #47
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Médinoc
    Mon conseil: Passe un pointeur vers moduleAudio dans le constructeur de player (et mémorise ledit pointeur dans une variable d'instance de la classe Player)
    Tu veux dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Audio audioModule;
    Player player (hThisInstance, &audioModule);
    
    //Avec :
    Player(HINSTANCE, Audio*);
    //Et :
    //...
        private:
              Audio *audioModule;
    };
    Mais cela ne sert à rien ? J'aurais tout aussi bien pu le mettre directement en tant que membre privé. J'ai dû mal comprendre ... que veux tu dire ?
    Vive l'embarqué.

  8. #48
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sauf qu'avec ça, tu peux toujours faire évoluer en interface (enfin, il "n'y a pas" d'interfaces en C++, mais il y a des classes abstraites) générique, dont Audio hérite et qui peut être contrôlé par Player...

    Et aussi, cela pourrait te permettre de contrôler l'Audio de plusieurs façons..
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #49
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Je ne comprends pas... est-ce vraiment ce type de code qu'il faut que j'utilise ? Ce n'est pas ce que je voulais, à vrai dire : les membres de Player n'auront pas accès à cette classe (que tu propose apparemment de rendre abstraite), et en plus je trouve bizarre qu'elle soit membre de Player...

    Edit : Quoique... à ce moment là : de toute évidence, un pointeur sur Audio utilise beaucoup moins de mémoire qu'une instance Audio. Ce n'est qu'une adresse permettant de le manier. Combien de place utilise un ponteur en mémoire ?

    Aucun moyen, donc, d'y avoir accès de l' "exérieur" ?
    Vive l'embarqué.

  10. #50
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, avoir accès sans pointeur à un objet qui n'est pas dans la classe Player, c'est ce que trouve le plus sale.
    Donc, tu as un objet extérieur, mais pour y accéder proprement, il faut que Player ait un pointeur vers cet objet (mais Audio reste un objet extérieur)...

    PS: La contrainte comme quoi Audio doit être un objet extérieur, c'est celle que tu as définie toi-même:
    je ne peux pas stocker ce module en tant que membre de Player (ce n'est pas logique)
    Post-Edit: Un pointeur, ça prend pour ainsi dire rien (4 octets sur une architecture 32bits (la même taille qu'un int), 8 sur une architecture 64bits) comme place.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #51
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    D'accord. Merci

    En fait, il ne me reste plus qu'un petit problème au niveau des boutons, et je pourrais m'attaquer au code, et dès que j'arriverais au problèmes de masques etc, je ferais un test avec un bouton bidon sur une fenêtre vide, pour m'entraîner.

    Je pense donc, utiliser des pointeurs de fonction pour attribuer une action à un bouton cliqué : il aura donc une méthode connect() qui consistera à lui attribuer une fonction. Qu'en penses-tu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Comment faire pour n'importe quelle fonction (type+paramètres) ?
    
    void Button::connect(void (*p_action)()) 
    {
        _action = p_action;
    
        return;
    }
    Vive l'embarqué.

  12. #52
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour le traitement d'une action sur un bouton, tu peux faire ce que tu veux:
    • Utiliser un pointeur de fonction (avec un typedef!),
    • Utiliser une classe avec fonction virtuelle (un peu façon java),
    • Envoyer un message WM_COMMAND à la fenêtre (ce que font les boutons normaux),
    • etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #53
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    J'aimerais sincèrement utiliser des pointeurs de fonction, seulement je ne sais que faire pour la déclaration de connect : la fonction associée au bouton n'est pas obligatoirement de paramètres connus, et je ne sais pas comment faire pour "dire" "quels que soient ses paramètres (et son type), mémorise son adresse"...
    Vive l'embarqué.

  14. #54
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu réfléchis un peu à la conception, tu verras que la fonction DOIT avoir des paramètres connus (ou au moins un, comme printf()), sinon tu ne pourras pas l'appeler...

    Au pire, tu peux toujours lui passer un void* ou un INT_PTR...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #55
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Vu que je n'ai que deux types de paramètres, à savoir void (pour play/pause) et std::string (load), peut être que je puisse surcharger cette méthode ? Sans doute.

    Merci de ton aide. Je vais m'occuper du code de la dll audio, et ensuite je m'affererais à la classe Button pour l'utiliser dans un test, en premier lieu.

    Bref, je te tiens au courant

    Merci encore Tu dois être la personne la plus patiente de france
    Vive l'embarqué.

  16. #56
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu dois être la personne la plus patiente de france
    Tu sais, j'en connais beaucoup qui serais pris de fou-rire en lisant ça...
    À commencer par ma famille...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #57
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    on n'est jamais patient pour sa famille, c'est un dogme en tout cas merci encore, j'ai commencé le code de la bibliothèque statique.
    Vive l'embarqué.

  18. #58
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Alors finalement, que fais-tu ?
    Une DLL, une bibliothèque statique, ou bien les deux ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #59
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Pour le module audio, il vaut mieux que je fasse une bibliothèque statique pour pouvoir instancier l'objet normalement. Par contre, pour la bibliothèque d'affichage, j'utiliserais une dll, ainsi que pour les hooks qui seront peut être de la partie.
    Vive l'embarqué.

  20. #60
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Hem par contre... pour la bibliothèque statique, je viens de la compiler : j'obtiens donc le .a necessaire au compilo, mais il me faut forcément un .h à inclure... comment puis-je l'obtenir ? Puisqu'il peut y avoir dans les sources plusieurs headers (par exemple pour plusieurs classes), je ne peux pas utiliser celui des sources.

    D'ailleurs, pour aider :
    MusicManager.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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #include "MusicManager.h"
    
    void Music::refresh()
    {
        int fieldsCount, tagType, len;
        char *fieldName;
        void *fieldValue;
        string buffer[2] = "";
    
        _length = FSOUND_Stream_GetLengthMs(_stream);
    
        if(!FSOUND_Stream_GetNumTagFields(_stream, &fieldsCount))
            return;
    
        else if (fieldsCount == 0)
            return;
    
    
        for(int i = 0 ; i < fieldsCount ; i++)
        {
            FSOUND_Stream_GetTagField(_stream, i, &tagType, &fieldName, &fieldValue, &len);
    
            if(!strcmp(fieldName,"TITLE"))
                buffer[1] = (char*)fieldValue;
    
            else if(!strcmp(fieldName,"ARTIST"))
                buffer[0] = (char*)fieldValue;
    
            else
                continue;
        }
    
        _name = buffer[0] + " - " + buffer[1];
    
        return;
    }
    
    MusicManager::MusicManager()
    {
        FSOUND_Init(44100, 32, 0);
    
        _music._stream = NULL;
    
        return;
    }
    
    MusicManager::~MusicManager()
    {
        FSOUND_Stream_Close(_music._stream);
        FSOUND_Close();
    
        return;
    }
    
    void MusicManager::load(const string path)
    {
        _music._stream = FSOUND_Stream_Open(path.c_str(), 0, 0, 0);
        _music.refresh();
    
        return;
    }
    
    bool MusicManager::isLoaded()
    {
        if(_music._stream == NULL)
            return false;
        else
            return true;
    }
    
    void MusicManager::play()
    {
        FSOUND_Stream_Play(MUSIC_CHANNEL, _music._stream);
    
        return;
    }
    
    void MusicManager::stop()
    {
        FSOUND_Stream_Stop(_music._stream);
    
        return;
    }
    
    bool MusicManager::isPlaying()
    {
        return FSOUND_IsPlaying(MUSIC_CHANNEL)?true:false;
    }
    
    void MusicManager::pause(bool flag)
    {
        FSOUND_SetPaused(MUSIC_CHANNEL, (flag)?TRUE:FALSE);
    
        return;
    }
    
    bool MusicManager::isPaused()
    {
        return FSOUND_GetPaused(MUSIC_CHANNEL)?true:false;
    }
    
    void MusicManager::setVolume(int volume)
    {
        FSOUND_SetVolume(MUSIC_CHANNEL, volume);
    
        return;
    }
    
    int MusicManager::getVolume()
    {
        return FSOUND_GetVolume(MUSIC_CHANNEL);
    }
    
    void MusicManager::setTime(int msTime)
    {
        FSOUND_Stream_SetTime(_music._stream, msTime);
    
        return;
    }
    
    int MusicManager::getTime()
    {
        return FSOUND_Stream_GetTime(_music._stream);
    }
    
    void MusicManager::reset()
    {
        _music._stream = NULL;
        _music._length = 0;
        _music._name = "";
    
        return;
    }
    
    int MusicManager::getLength()
    {
        return _music._length;
    }
    
    string MusicManager::getName()
    {
        return _music._name;
    }
    MusicManager.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
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #ifndef H_MUSICMANAGER
    #define H_MUSICMANAGER
    
    #include <fmod/fmod.h>
    #include <string>
    
    #define MUSIC_CHANNEL 0
    
    #ifndef TRUE
    #define TRUE 1
    #endif
    
    #ifndef FALSE
    #define FALSE 0
    #endif
    
    using namespace std;
    
    /** Container **/
    
    struct Music
    {
        void refresh();
    
        FSOUND_STREAM *_stream;
    
        string _name;
        int _length;
    };
    
    /** Manager **/
    
    class MusicManager
    {
        public:
            MusicManager();
            ~MusicManager();
    
            /* Basic actions */
    
            void load(const string);
            bool isLoaded();
    
            void play();
            void stop();
            bool isPlaying();
    
            void pause(bool);
            bool isPaused();
    
            void setVolume(int);
            int getVolume();
    
            void setTime(int);
            int getTime();
    
            void reset();
    
            /* Informations on music */
    
            int getLength();
            string getName();
    
        private:
            Music _music;
    };
    
    #endif
    Vive l'embarqué.

Discussions similaires

  1. Associer une action à un bouton dans une JDialog
    Par moomba dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 07/12/2008, 20h08
  2. Réponses: 14
    Dernier message: 11/08/2008, 22h28
  3. Réponses: 1
    Dernier message: 18/06/2008, 09h32
  4. affecter une macro à un bouton dans une feuille
    Par gu000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2007, 14h04
  5. Réponses: 3
    Dernier message: 17/08/2006, 11h30

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