Lecteur de clips vidéo

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 / Exemple :


#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);
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.