Accueil > > > LECTEUR DE CLIPS VIDÉO
LECTEUR DE CLIPS VIDÉO
Information sur la source
Description
Voici le code source d'un lecteur de clips vidéo utilisant l'Activex "Windows Media Player". Il permet d'afficher un clip vidéo dans la fenêtre de notre programme. Il est réduit au strict minimum (ouvrir, lire, pause et arrêter). Vous pouvez le perfectionner en utilisant les autres interfaces de cet activex (voir MSDN). Projet réalisé sous Visual 6. En cas de problème avec les autres compilateurs, n'hésiter pas à le signaler car on peut rendre le code tout à fait portable après quelques petites modifications.
Testé sous Windows XP avec Windows Media Player 8, 9 et 10.
Source
-
- #include <windows.h>
-
- #ifndef EXTERN_GUID
- #define EXTERN_GUID(g,l1,s1,s2,c1,c2,c3,c4,c5,c6,c7,c8) // Pour Dev-C++
- #endif
-
- #include "wmpdef.h"
- #include "wmp.h"
-
- // Variables globales:
- IWMPControls *pMPControls;
- IWMPPlayer *pMPPlayer;
- HWND hConteneur;
-
- //------------------- Procédure de notre fenêtre principale -----------------------//
- LRESULT CALLBACK WndProc( HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam )
- {
- // Déclaration des variables:
- static HWND hOuvrir,hLire,hArret,hPause, hQuitter,hCadre;
-
- // Interception et traitement des messages:
- switch(messg)
- {
- case WM_CREATE:
- {
- // Créer tous les controles:
- hOuvrir=CreateWindow("BUTTON","Ouvrir",WS_CHILD | WS_VISIBLE,20,428,90,20,hWnd,0,0,0);
- hLire=CreateWindow("BUTTON","Lire",WS_CHILD | WS_VISIBLE,170,428,90,20,hWnd,0,0,0);
- hPause=CreateWindow("BUTTON","Pause",WS_CHILD | WS_VISIBLE,270,428,90,20,hWnd,0,0,0);
- hArret=CreateWindow("BUTTON","Arrêter",WS_CHILD | WS_VISIBLE,370,428,90,20,hWnd,0,0,0);
- hQuitter=CreateWindow("BUTTON","Quitter",WS_CHILD | WS_VISIBLE,520,428,90,20,hWnd,0,0,0);
- hCadre=CreateWindow("BUTTON","",BS_GROUPBOX | WS_CHILD | WS_VISIBLE,15,415,600,37,hWnd,0,0,0);
- break;
- }
-
- case WM_COMMAND:
- if( (HWND)lParam == hOuvrir)
- {
- // Déclarer et intialiser un buffer:
- char tampon[MAX_PATH];
- tampon[0]=0;
- // Déclarer une structure OPENFILENAME:
- OPENFILENAME ofn;
- // Mettre tous les membres de la structure à 0:
- memset( &ofn, 0, sizeof(OPENFILENAME) );
- // Définir les membres:
- ofn.lStructSize = sizeof(OPENFILENAME);
- ofn.hwndOwner = hWnd;
- ofn.lpstrFilter = "Clips Vidéo\0*.avi;*.mpg;*.mpeg;*.wmv\0\0";
- ofn.lpstrFile = tampon;
- ofn.nMaxFile = MAX_PATH;
- ofn.lpstrTitle = "Choisir un clip :";
- ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
- // Lancer la boite de dialogue pour choisir un fichier:
- if(!GetOpenFileName(&ofn)) break;
- // Convertir le chemin en UNICODE:
- WCHAR fichier[MAX_PATH];
- MultiByteToWideChar (CP_ACP, 0, tampon, -1, fichier, MAX_PATH+1);
- pMPPlayer->put_URL(fichier);
- break;
- }
-
- // Clic sur le bouton "Lire":
- if((HWND)lParam == hLire)
- {
- pMPControls->play();
- break;
- }
- // Clic sur le bouton "Pause":
- if((HWND)lParam == hPause)
- {
- pMPControls->pause();
- break;
- }
- // Clic sur le bouton "Arrêter":
- if((HWND)lParam == hArret)
- {
- pMPControls->stop();
- break;
- }
- // Clic sur le bouton "Quitter":
- if((HWND)lParam == hQuitter)
- {
- // Envoi du message WM_CLOSE à notre fenêtre:
- SendMessage(hWnd,WM_CLOSE,0,0);
- }
- break;
-
- case WM_CLOSE:
- // Envoi du message de fermeture du programme:
- PostQuitMessage(0);
- break;
-
- default:
- //Retour à la procédure par défaut:
- return( DefWindowProc( hWnd, messg, wParam, lParam ) );
- }
- return 0;
- }
- //---------------------------------------------------------------------------------//
-
- //------------------------------ Fonction WinMain -----------------------------------------//
- int WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPreInst,LPSTR lpszCmdLine, int nCmdShow )
- {
- // Définir type de pointeur pour la fonction AtlAxAttachControl:
- typedef HRESULT (WINAPI *PAttachControl)(IUnknown*, HWND,IUnknown**);
- // Charger la atl.dll:
- HINSTANCE hDLL = LoadLibrary("atl.dll");
- // Si dll non chargée alors quitter:
- if (!hDLL) return 1;
- // Obtenir pointeur sur la fonction AtlAxAttachControl:
- PAttachControl AtlAxAttachControl = (PAttachControl) GetProcAddress(hDLL, "AtlAxAttachControl");
- // Déclarer notre classe de fenêtre et définir ses membres:
- WNDCLASS wc;
- char NomClasse[] = "Lecteur_Clips";
- wc.lpszClassName = NomClasse;
- wc.hInstance = hInst;
- wc.lpfnWndProc = WndProc;
- wc.hCursor = LoadCursor( 0, IDC_ARROW );
- wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
- wc.lpszMenuName = 0;
- wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
- wc.style = 0;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- // Enregistrer la classe de notre fenêtre:
- if (!RegisterClass(&wc)) return 1;
- // Obtenir la hauteur de la barre de titre:
- int barre=GetSystemMetrics(SM_CYCAPTION);
- // Créer notre fenêtre principale:
- HWND hWnd = CreateWindow( NomClasse," Lecteur de clips vidéo",WS_SYSMENU | WS_MINIMIZEBOX ,0,0,640,460+barre, 0, 0, hInst,0);
- // Montrer la fenêtre:
- ShowWindow(hWnd, nCmdShow );
- UpdateWindow( hWnd );
- // Créer notre STATIC conteneur:
- hConteneur=CreateWindow("STATIC","",WS_CHILD ,0,0,638,420,hWnd,0,0,0);
- // Initialiser la librairie COM:
- CoInitialize(0);
- // Créer une instance du composant WindowsMediaPlayer et l'interface IWMPPlayer:
- HRESULT res=CoCreateInstance(CLSID_WindowsMediaPlayer,0,CLSCTX_ALL,IID_IWMPPlayer,(void**)&pMPPlayer);
- // Si échec alors quitter le programme:
- if(res) return 1;
- // Attacher l'interface IWMPCore à notre conteneur:
- res =AtlAxAttachControl(pMPPlayer,hConteneur,NULL);
- // Obtenir un pointeur sur l'interface IWMPControls:
- res=pMPPlayer->get_controls(&pMPControls);
- // Choisir l'affichage sans boutons etc...:
- char mode[5]={"none"};
- WCHAR wmode[5];
- MultiByteToWideChar (CP_ACP, 0, mode, -1, wmode, 6);
- res=pMPPlayer->put_uiMode(wmode);
- // Afficher le conteneur:
- ShowWindow(hConteneur,1);
- // Boucle des messages:
- MSG Msg;
- while( GetMessage(&Msg, 0, 0, 0))
- {
- TranslateMessage( &Msg );
- DispatchMessage( &Msg );
- }
- // Libérer toutes les interfaces;
- pMPControls->Release();
- pMPPlayer->Release();
- // Détruire la fenêtre:
- DestroyWindow(hWnd);
- // Fermer la librairie COM:
- CoUninitialize();
- // Libérer la DLL:
- FreeLibrary(hDLL);
- // Quitter le programme:
- return( Msg.wParam);
- }
-
-
#include <windows.h>
#ifndef EXTERN_GUID
#define EXTERN_GUID(g,l1,s1,s2,c1,c2,c3,c4,c5,c6,c7,c8) // Pour Dev-C++
#endif
#include "wmpdef.h"
#include "wmp.h"
// Variables globales:
IWMPControls *pMPControls;
IWMPPlayer *pMPPlayer;
HWND hConteneur;
//------------------- Procédure de notre fenêtre principale -----------------------//
LRESULT CALLBACK WndProc( HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam )
{
// Déclaration des variables:
static HWND hOuvrir,hLire,hArret,hPause, hQuitter,hCadre;
// Interception et traitement des messages:
switch(messg)
{
case WM_CREATE:
{
// Créer tous les controles:
hOuvrir=CreateWindow("BUTTON","Ouvrir",WS_CHILD | WS_VISIBLE,20,428,90,20,hWnd,0,0,0);
hLire=CreateWindow("BUTTON","Lire",WS_CHILD | WS_VISIBLE,170,428,90,20,hWnd,0,0,0);
hPause=CreateWindow("BUTTON","Pause",WS_CHILD | WS_VISIBLE,270,428,90,20,hWnd,0,0,0);
hArret=CreateWindow("BUTTON","Arrêter",WS_CHILD | WS_VISIBLE,370,428,90,20,hWnd,0,0,0);
hQuitter=CreateWindow("BUTTON","Quitter",WS_CHILD | WS_VISIBLE,520,428,90,20,hWnd,0,0,0);
hCadre=CreateWindow("BUTTON","",BS_GROUPBOX | WS_CHILD | WS_VISIBLE,15,415,600,37,hWnd,0,0,0);
break;
}
case WM_COMMAND:
if( (HWND)lParam == hOuvrir)
{
// Déclarer et intialiser un buffer:
char tampon[MAX_PATH];
tampon[0]=0;
// Déclarer une structure OPENFILENAME:
OPENFILENAME ofn;
// Mettre tous les membres de la structure à 0:
memset( &ofn, 0, sizeof(OPENFILENAME) );
// Définir les membres:
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = "Clips Vidéo\0*.avi;*.mpg;*.mpeg;*.wmv\0\0";
ofn.lpstrFile = tampon;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = "Choisir un clip :";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
// Lancer la boite de dialogue pour choisir un fichier:
if(!GetOpenFileName(&ofn)) break;
// Convertir le chemin en UNICODE:
WCHAR fichier[MAX_PATH];
MultiByteToWideChar (CP_ACP, 0, tampon, -1, fichier, MAX_PATH+1);
pMPPlayer->put_URL(fichier);
break;
}
// Clic sur le bouton "Lire":
if((HWND)lParam == hLire)
{
pMPControls->play();
break;
}
// Clic sur le bouton "Pause":
if((HWND)lParam == hPause)
{
pMPControls->pause();
break;
}
// Clic sur le bouton "Arrêter":
if((HWND)lParam == hArret)
{
pMPControls->stop();
break;
}
// Clic sur le bouton "Quitter":
if((HWND)lParam == hQuitter)
{
// Envoi du message WM_CLOSE à notre fenêtre:
SendMessage(hWnd,WM_CLOSE,0,0);
}
break;
case WM_CLOSE:
// Envoi du message de fermeture du programme:
PostQuitMessage(0);
break;
default:
//Retour à la procédure par défaut:
return( DefWindowProc( hWnd, messg, wParam, lParam ) );
}
return 0;
}
//---------------------------------------------------------------------------------//
//------------------------------ Fonction WinMain -----------------------------------------//
int WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPreInst,LPSTR lpszCmdLine, int nCmdShow )
{
// Définir type de pointeur pour la fonction AtlAxAttachControl:
typedef HRESULT (WINAPI *PAttachControl)(IUnknown*, HWND,IUnknown**);
// Charger la atl.dll:
HINSTANCE hDLL = LoadLibrary("atl.dll");
// Si dll non chargée alors quitter:
if (!hDLL) return 1;
// Obtenir pointeur sur la fonction AtlAxAttachControl:
PAttachControl AtlAxAttachControl = (PAttachControl) GetProcAddress(hDLL, "AtlAxAttachControl");
// Déclarer notre classe de fenêtre et définir ses membres:
WNDCLASS wc;
char NomClasse[] = "Lecteur_Clips";
wc.lpszClassName = NomClasse;
wc.hInstance = hInst;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor( 0, IDC_ARROW );
wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
wc.lpszMenuName = 0;
wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
wc.style = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
// Enregistrer la classe de notre fenêtre:
if (!RegisterClass(&wc)) return 1;
// Obtenir la hauteur de la barre de titre:
int barre=GetSystemMetrics(SM_CYCAPTION);
// Créer notre fenêtre principale:
HWND hWnd = CreateWindow( NomClasse," Lecteur de clips vidéo",WS_SYSMENU | WS_MINIMIZEBOX ,0,0,640,460+barre, 0, 0, hInst,0);
// Montrer la fenêtre:
ShowWindow(hWnd, nCmdShow );
UpdateWindow( hWnd );
// Créer notre STATIC conteneur:
hConteneur=CreateWindow("STATIC","",WS_CHILD ,0,0,638,420,hWnd,0,0,0);
// Initialiser la librairie COM:
CoInitialize(0);
// Créer une instance du composant WindowsMediaPlayer et l'interface IWMPPlayer:
HRESULT res=CoCreateInstance(CLSID_WindowsMediaPlayer,0,CLSCTX_ALL,IID_IWMPPlayer,(void**)&pMPPlayer);
// Si échec alors quitter le programme:
if(res) return 1;
// Attacher l'interface IWMPCore à notre conteneur:
res =AtlAxAttachControl(pMPPlayer,hConteneur,NULL);
// Obtenir un pointeur sur l'interface IWMPControls:
res=pMPPlayer->get_controls(&pMPControls);
// Choisir l'affichage sans boutons etc...:
char mode[5]={"none"};
WCHAR wmode[5];
MultiByteToWideChar (CP_ACP, 0, mode, -1, wmode, 6);
res=pMPPlayer->put_uiMode(wmode);
// Afficher le conteneur:
ShowWindow(hConteneur,1);
// Boucle des messages:
MSG Msg;
while( GetMessage(&Msg, 0, 0, 0))
{
TranslateMessage( &Msg );
DispatchMessage( &Msg );
}
// Libérer toutes les interfaces;
pMPControls->Release();
pMPPlayer->Release();
// Détruire la fenêtre:
DestroyWindow(hWnd);
// Fermer la librairie COM:
CoUninitialize();
// Libérer la DLL:
FreeLibrary(hDLL);
// Quitter le programme:
return( Msg.wParam);
}
Historique
- 11 août 2005 04:20:53 :
- 1- Ajout du fichier "wmpdef.h" contenant les GUIDs des interfaces pour éviter "__uuidof"
2- Amélioration dans le code afin qu'il puisse être compilé avec Dev-C++ aussi.
3- Ajout de la capture d'écran.
4- Testé sans problème avec Visual 6 et Dev-C++ 4.9.9.2
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Lecteur MPEG streaming [ par matge ]
Bonjour,Je realise un player qui enregistre un flux multicast RTP.Je stocke la video au format MPEG dans un fichier a l aide d un Thread.J aimerais re
lecteur enregistreur video [ par blanccc ]
Bonjour tout le monde,Je suis novice en C++ et je cherche le moyen de prendre un flux video en entrée provenant d'une camera numerique, de l'affi
Video [ par Trappeu17 ]
Bonjour,je suis actuellement en train de faire du chiffrage de vidéos. Les personnes voulant regarder ces videos devront ajouter un plugin à
lecteur video [ par kain31 ]
Bonjour tout le monde, Actuellement ,je developpe un lecteur video en C++. Ce lecteur devra etre capable de lire a la suite deux fichiers videos.Un pe
recherche d'un code source d'un lecteur video [ par ingenioura ]
Salut, je cherche un programme en utilisant la bibliothèque Qt pour afficher une séquence vidéo et merci
inserer lecteur video sous builder c++ [ par fcolh ]
FcolHbonsoir , j'aimerais savoir si c'est possible d'inclure un lecteure video sous builder c++.et si oui quelle est la meilleure solution et surtout
Lecteur video basique [ par adess00 ]
BonjourJ ai fait un algo de compression video et donc je voudrais maintenant coder un lecteur pour pouvoir faire des tests.Je voudrais donc savoir com
jouer un mp3 avec lecteur par defaut ou autre... [ par fhoest ]
Bonjour, je voudrais sans mettre Windows media player 11(wmp) dans une form jouer un son mp3 afin que si je poste mon ptit prog sur un autre pc qui ne
activex et vbscript methode CreateObject [ par DevGizmo ]
Bonsoir,Je me confronte a un petit probleme...Je fais un script vbs qui doit a un moment donne creer un objet active x et utiliser certaines de ses fo
transformation sur video [ par simpat ]
Bonjour,J'ai une vidéo qui tourne sur une surface directdraw et je voudrais lui ajouter un effet d'onde aquatique. Comme si on jetait une pierre au mi
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|