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 :

[OLE ShockwaveFlash] détection d'évènement FScommand


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Par défaut [OLE ShockwaveFlash] détection d'évènement FScommand
    Bonjour à tous

    Voilà je travaille sur le code en C++ du lecteur Media Player Classic, Projet guliverkli, en licence GPL sur le site SourceForge.
    Sur ce code j essaie d'ajouter la détection des évènements FScommand venant de l'objet ShockwaveFlash mais je n y arrive pas.
    Alors FScommand est une commande sous flash qui permet de d'envoyer des donnée au programme externe qui héberge l'OLE Flash, du genre MPC le lecteur multi-media, ou la page web sous IE, Mozilla.


    Sur un projet MFC générer par VC++, j arrive à implémenter de la détection de FSCommande, en ajoutant le contrôle Flash sur l'interface et faissant add event handler -> FSCommand. VC++ me génère ce code:
    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
     
     
    void CAppDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_SHOCKWAVEFLASH1, m_flash);
    }
     
    ...
    ...
     
    BEGIN_EVENTSINK_MAP(CAppDlg, CDialog)
    	ON_EVENT(CAppDlg, IDC_SHOCKWAVEFLASH1, 150, FSCommandShockwaveflash1, VTS_BSTR VTS_BSTR)
    END_EVENTSINK_MAP()
     
    // Appellé par les fscommand du flash
    void CAppDlg::FSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)
    {
     
    }
    FSCommandShockwaveflash1 est la fonction qui est déclenché à chaque FSCommand.

    C'est ce que j essaie de faire avec la version de MPC qui génère l objet flash dynamiquement et qui n a pas d'ID dédié à l'objet Flash.


    J ai quelques pistes que j ai testé mais sans succés par manque de connaissance sur le domaine de l'OLE.

    D'abord comme on a pas d'ID pour le controle Flash, j'ai pensé à faire ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BEGIN_EVENT_MAP( CShockwaveFlash, CWnd)
    	EVENT_CUSTOM_ID( "FScommand", 150, OnFSCommand, VTS_BSTR VTS_BSTR )
    END_EVENT_MAP()
     
    void CShockwaveFlash::OnFSCommand (LPCTSTR command, LPCTSTR args)
    	{
    		if (strcmp(command, "message")==0)
    			//traitement message
    	}
    Puis y a aussi l'utilisation de l'objet COleControl pour récupèrer les messages d'évènements. Mais je n'ai aucune connaissance là dessus.

    Les informations que l'on récupère grâce au OLE/COM viewer:
    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
    // Generated .IDL file (by the OLE/COM Object Viewer)
    // 
    // typelib filename: Flash8b.ocx
    
    [
      uuid(D27CDB6B-AE6D-11CF-96B8-444553540000),
      version(1.0),
      helpstring("Shockwave Flash"),
      custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 100663657),
      custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1135111210),
      custom(DE77BA65-517C-11D1-A2DA-0000F8773CE9, Created by MIDL version 6.00.0361 at Tue Dec 20 12:40:09 2005
    )
    
    ]
    library ShockwaveFlashObjects
    {
        // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
        importlib("stdole2.tlb");
    
        // Forward declare all types defined in this typelib
        interface IShockwaveFlash;
        dispinterface _IShockwaveFlashEvents;
        interface IFlashFactory;
        interface IFlashObjectInterface;
        interface IDispatchEx;
        interface IServiceProvider;
    
        [
          odl,
          uuid(D27CDB6C-AE6D-11CF-96B8-444553540000),
          helpstring("Shockwave Flash"),
          dual,
          oleautomation
        ]
        interface IShockwaveFlash : IDispatch {
        ...
        ...
    };
    
     [
          uuid(D27CDB6D-AE6D-11CF-96B8-444553540000),
          helpstring("Event interface for Shockwave Flash"),
          hidden
        ]
        dispinterface _IShockwaveFlashEvents {
            properties:
            methods:
                [id(0xfffffd9f)]
                void OnReadyStateChange(long newState);
                [id(0x000007a6)]
                void OnProgress(long percentDone);
                [id(0x00000096)]
                void FSCommand(
                                [in] BSTR command, 
                                [in] BSTR args);
                [id(0x000000c5)]
                void FlashCall([in] BSTR request);
        };
    
        [
          uuid(D27CDB6E-AE6D-11CF-96B8-444553540000),
          helpstring("Shockwave Flash")
        ]
        coclass ShockwaveFlash {
            [default] interface IShockwaveFlash;
            [default, source] dispinterface _IShockwaveFlashEvents;
        };

    Donc si un développeur sait comment faire ou sait où sont mes erreurs, je lui serais très reconnaissant

    Et aussi ceux qui peuvent m'éclairer un peu plus sur le domaine de l'OLE.

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Par défaut
    Bon j ai trouvé la solution à mon problème

    un peu grâce à ça http://support.microsoft.com/kb/q147740/
    C'est pas très clean comme solution mais ca fonctionne

    En faite j ai une fenêtre CWnd qui sert de hôte au contrôle ocx flash (enfin c'était pas comme ça au départ mais je l'ai modifé) et à la creation du flash je lui indique une constante que j ai nommé par défaut IDC_SHOCKWAVEFLASH.

    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
    //Dans le .cpp de la classe qui est la fenetre d'hôte du flash  
    #define IDC_SHOCKWAVEFLASH 0 
    
    ...
    
    //Dans le constructeur de la classe, on crée aussi le controle flash
    m_flash.Create(NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, 
    		CRect(0, 0, 0, 0), this, IDC_SHOCKWAVEFLASH)
    
    ...
    // le 150 correspond à la valeur hexa 0x96 que l'on trouve sur le OLE/COM viewer pour l'evenment FScommand
    BEGIN_EVENTSINK_MAP(CHoteFlash, CWnd)
    	ON_EVENT(CHoteFlash, IDC_SHOCKWAVEFLASH, 150, OnFSCommand, VTS_BSTR VTS_BSTR)
    END_EVENTSINK_MAP()
    
    void CHoteFlash::OnFSCommand(LPCTSTR command, LPCTSTR args)
    {
    	if (strcmp(command, "envoyer")==0)
    	{
    		//instruction pour envoyer
    	}
    }
    
    
    //dans le .h de la classe
    DECLARE_EVENTSINK_MAP()
    void OnFSCommand(LPCTSTR command, LPCTSTR args);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de détection d'évènement
    Par Matgic95 dans le forum IHM
    Réponses: 6
    Dernier message: 14/03/2008, 12h09
  2. Détection de l'évènement connexion Internet
    Par Steff2 dans le forum Web & réseau
    Réponses: 6
    Dernier message: 05/01/2008, 01h28
  3. Réponses: 2
    Dernier message: 22/10/2007, 13h43
  4. Détection de l'évènement fermeture d'une fenêtre
    Par noa dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/05/2006, 13h57
  5. Détection des événements sur un form
    Par Jik70 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 12h49

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