Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

NAVIGUATEUR FLASH EN MFC (C++ .NET)


Information sur le tutorial

Catégorie :API Date de création : 15/03/2006 09:37:39 Vu : 15 461 fois

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Ce turorial a pour but de permettre la création de son propre naviguateur flash pour contourner les limites de la projection flash (appel d'exe avec paramètres, dialogue avec une appli sans socket, ...). A partir de là, tout est maintenant possible.

Tutorial

Réalisé avec Microsoft Visual C++ .NET

CREATION DU PROJET

- Nouveau projet (nommé "test" ici)
- MFC > Application MFC
- Type d'application > Basée sur une boîte de dialogue
- Fonctionnalités de l'interface utilisateur :
    - Bouton Réduire
    - Bouton Agrandir
    - Menu Système
    - Boîte de dialogue A propos de


ORGANISATION DE L'INTERFACE

- Supprimer tous les éléments de IDD_TEST_DIALOG (voir affichage des ressources)
    - Bouton OK
    - Bouton Annuler
    - Texte "TODO : ..."
- Etendre le rectangle bleu (limite des composants) aux 4 coins
- Clic droit au centre > Inserer un contrôle ActiveX > Shockwave Flash Object
- Etirer l'object aux 4 coins
- Clic droit sur le contrôle > Ajouter une variable > Nom de variable : m_flash
- Selectionner le contrôle > Propriétés > Evènement de contrôle
- FSCommand : Selectionner " FSCommandShockwaveflash1"
- Selectionner la fenêtre (barre de titre) > Propriétés > Messages
- WM_SIZE > Sélectionner " OnSize"
- WM_SIZING > Sélectionner " OnSizing"
- Selectionner la fenêtre (barre de titre) > Propriétés > Propriétés > Apparence
- Border : Resizing


CHARGEMENT DU FLASH

- ouvrir le fichier testDlg.cpp,
- aller au "TODO" de la fonction CtestDlg::OnInitDialog
- ajouter le code suivant :
    // Charge le swf depuis le repertoire courant
    char currentDir[2048];
    GetCurrentDirectory(2047, currentDir);
    CString swfPath = currentDir;
    swfPath = "file://" + swfPath + "/test.swf";
    m_flash.put_Movie(swfPath);


    // Redimensionne la fenêtre et le contrôle flash aux dimensions du swf
    CRect clientRect, windowRect;
    GetClientRect(&clientRect);
    GetWindowRect(&windowRect);

    long windowW = windowRect.right  - windowRect.left + 1;
    long windowH = windowRect.bottom - windowRect.top + 1;
    long clientW = clientRect.right  - clientRect.left + 1;
    long clientH = clientRect.bottom - clientRect.top + 1;
    long marginW = windowW - clientW;
    long marginH = windowH - clientH;
    long flashW = atol(m_flash.GetVariable("width"));
    long flashH = atol(m_flash.GetVariable("height"));
    long newWinW = flashW + marginW;
    long newWinH = flashH + marginH;

    windowRect.right  = windowRect.left + newWinW -1;
    windowRect.bottom = windowRect.top + newWinH -1;
    clientRect.right  = flashW;
    clientRect.bottom  = flashH;

    MoveWindow(windowRect, 1);
    m_flash.MoveWindow(clientRect, 1);
    CenterWindow();


MINIMISER ET MAXIMISER LA FENETRE

- aller au "TODO" de la fonction CtestDlg::OnSize
- ajouter le code suivant :
    // Minimiser & maximiser
    static bool init = false;
   
    if (init)
    {
        CRect clientRect;
        GetClientRect(&clientRect);
        m_flash.MoveWindow(clientRect, 0);
    }

    init = true;


REDIMENSIONNER MANUELLEMENT LA FENETRE

- aller au "TODO" de la fonction CtestDlg::OnSizing
- ajouter le code suivant :
    // Redimensionner
    static bool init = false;
   
    if (init)
    {
        CRect clientRect;
        GetClientRect(&clientRect);
        m_flash.MoveWindow(clientRect, 0);
    }

    init = true;


RECEVOIR LES REQUETES DU FLASH, LES TRAITER ET REPONDRE

- aller au "TODO" de la fonction CtestDlg::FSCommandShockwaveflash1
- ajouter le code suivant :
    // Traiter la requête
    if (strcmp(command, "send")==0)
    {
        // votre code (après analyse des paramètres args si besoin)
        // ...

        // Acquitement
        m_flash.SetVariable("MFCobjet.msg", "done");
    }

    // Quitter l'application
    if (strcmp(command, "quit")==0)
        OnCancel();


CODE DU FLASH : ENVOI DE DONNEES VERS LE CODE C
fscommand("send", "mes paramètres");
fscommand("exit");
fscommand("exec", "monappli.exe -mesparam"); // à coder dans le MFC
...

Attention > Maintenant, toutes les commandes de fscommand sont à traiter dans le MFC,
elles ne sont plus active par défaut


CODE DU FLASH : RECEPTION DE DONNEES DEPUID LE CODE C

// Création d'un object
MFCobjet = new Object();
MFCobjet.msg = "";

// appellé par le watch quand le paramètre surveillé change
MFCobjet_callback = function (prop, oldVal, newVal, userData)
{   
    // votre code (après analyse des paramètres newVal si besoin)
    // ...

    msg = newVal;
    return newVal;
}

// paramètre "msg" de l'objet "MFCobjet" surveillé
MFCobjet.watch("msg", MFCobjet_callback);


Un exemple dans un précédent post : http://www.cppfrance.com/code.aspx?ID=36405
15 mars 2006 09:38:54 :
Ajout d'un lien vers un exemple
signaler à un administrateur
Commentaire de fuliculi le 15/03/2006 09:40:45

Exemple à cette adresse :
http://www.cppfrance.com/code.aspx?ID=36405

signaler à un administrateur
Commentaire de beni__j le 07/04/2006 16:08:42

Salut
Ce tutoriel est une mine d'or pour moi, si tu étais devant moi je me mettrai à genou (mais non j'en rajoute pas)...
Bref, j'ai suivit ton tutoriel pas à pas et ça marche niquel, enfin presque parce que sinon j'écrirais pas :p, il y a juste un mini mini problème : au démarrage de l'exe une petite boite de dialogue vide s'affiche avec juste une croix erreur, il suffit d'appuyer sur OK pour qu'elle s'enlève et l'exe marche niquel aprés, mais bon ça s'affiche à chaque fois alors ça l'fait pas comme diraient les djeuns (d'ailleur j'en suis un ça tombe bien).
Si j'ai pas été assez clair : enlève le swf du dossier de l'exe, normalement ça te met la même boite de dialogue.
Merci encore pour ce tuto et a+.

signaler à un administrateur
Commentaire de beni__j le 10/04/2006 10:11:42

Re Salut
Je crois avoir trouvé la source du problème, à savoir le swf, quand je crée un swf, cette boite de dialogue apparait alors qu'avec le swf que tu fournis ça marche, j'ai essayé d'enregistrer en flash 7, toujours pareil, j'ai essayé de recréer le swf à partir de ton fla et ca marche, donc je me suis dit que j'allais modifier ton fla, mais dés que je recrée le swf ça me remet cette boite de dialogue. Le pire (enfin dans le sens bizare) c'est que ça marche une fois cette boite de dialogue passée, mais c'est pour mon stage que je dois faire ça alors ça fait pas vraiment sérieux d'avoir une vilaine boite de dialogue vide qui s'affiche à chaque démarrage de l'application.

a+

signaler à un administrateur
Commentaire de beni__j le 10/04/2006 10:35:48

Re re salut (désolé c'est pas un chat je sais)

Bon j'ai résolu mon problème, il faut absolument qu'il y ait au moins un composant dans la bibliothèque, même pas besoin qu'il soit dans la scène, étrange...

a+ (j'éspère pas en fait ;))

signaler à un administrateur
Commentaire de fuliculi le 10/04/2006 12:38:06

Salut BENI__J,

heureux que le tuto te plaise, même s'il manque d'illustration mais je fais ça pendant mes pauses du taf, alors... Pour ton soucis, t'as trouvé une solution, c'est cool. J'ai eu un problème similaire une fois, et c'était provoqué par la récupération des dimensions du swf dans le code C++. Pour contourner ça, j'avais simplement saisi les valeurs à la place de la récupération automatique de la largeur et hauteur.

Avant j'avais ça :
long flashW = atol(m_flash.GetVariable("width"));
long flashH = atol(m_flash.GetVariable("height"));

Ensuite ça :
long flashW = 530;
long flashH = 250;

Ca ne pose pas problème dans le cas où tu connais à l'avance les dimensions.

Sinon j'ai une autre solution (non testée). Il s'agit de récupérer les dimensions qu'une fois le swf chargé. L'évènement OnProgress du composant devrait le permettre.

signaler à un administrateur
Commentaire de snakeeater1 le 07/03/2008 23:10:28

Etrange, dès la compilation sans avoir touché une seule ligne de ton code, j'ai déja 8 erreurs de compilo :/
Du genre:
1>.\XMLeditorDlg.cpp(27) : error C2065: 'IDC_SHOCKWAVEFLASH1' : identificateur non déclaré
1>.\XMLeditorDlg.cpp(52) : error C2664: 'GetCurrentDirectoryW' : impossible de convertir le paramètre 2 de 'char [2048]' en 'LPWSTR'
1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
1>.\XMLeditorDlg.cpp(53) : error C2440: 'initialisation' : impossible de convertir de 'char [2048]' en 'ATL::CStringT<BaseType,StringTraits>'
\XMLeditorDlg.cpp(54) : error C2678: '+' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const char [8]' (ou il n'existe pas de conversion acceptable)

Etant un programmeur flash avant tout je n'ai que très peu de connaissance en C/C++, ces messages de débug me sont donc complètement obscures :/

Un ptit coup de main ?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,031 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.