|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 20.08.2003, 17:26 Titel: Video in DirectX9 einbinden |
|
|
Hi,
wie kann ich ein Video mit der Endung *.rm in eine Vollbild Application einbinden, sodass es abgespielt wird (am besten vergrößert). Und man es mit ESC abbrechen kann.
MfG
Philipp Böing |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 18:51 Titel: |
|
|
Sowas mach ich zwar selten, aber hier aus meinem Testprojekt:
Code: | #include <windows.h>
#include <dshow.h>
#include <stdio.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
//Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Das Fensterhandle
HWND hWnd = 0;
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaSeeking *lpSeeking = NULL;
IMediaEventEx *pEvent = NULL;
LONGLONG Pos= 0;
bool done=false;
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return 0;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(true)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if(WM_QUIT == msg.message)
{
break;
}
}
else {
if(done==false)
{
// Initialize the COM library.
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return 0;
}
// Create the filter graph manager and query for interfaces.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return 0;
}
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
hr = pGraph->QueryInterface(IID_IMediaSeeking,
(void **)&lpSeeking);
pEvent->SetNotifyWindow((OAHWND)hWnd, WM_APP, 0);
LPCWSTR Filename =L"E:\\Videos\\Video1.avi";
IBaseFilter *pSource1;
IPin *pPin;
pGraph->AddSourceFilter(Filename,Filename,&pSource1);
pSource1->FindPin(L"Output", &pPin);
pGraph->Render(pPin);
done = true;
}
long evCode, param1, param2;
HRESULT h;
h = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0);
pEvent->FreeEventParams(evCode, param1, param2);
if(evCode)
lpSeeking->SetPositions(&Pos, AM_SEEKING_AbsolutePositioning , NULL, AM_SEEKING_NoPositioning);
// Run the graph.
pControl->Run();
}
} // Big else
pControl->Release();
lpSeeking->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
return 0;
}
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass; // WNDCLASSEX Struktur
// Struktur initialisieren
wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!)
wndClass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW; // Standard Stile
wndClass.lpfnWndProc = MessageHandler; // Die Callback Funktion angeben
wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.hInstance = hInstance; // Anwendungsinstanz
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor
wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü
wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse
wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo
wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"Hello Windows", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
0, 0, 400, 300, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// wenn das Fenster geschlossen wird, eine Nachricht senden,
// die das Programm beendet
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
// Wenn wir uns nicht um die Nachricht gekümmert haben
// wird sie an die Standardnachrichtenverarbeitung von Windows
// geschickt
return (DefWindowProc(hwnd, msg, wParam, lParam));
}
|
_________________ The source of all power is in its destiny...
Zuletzt bearbeitet von TheMillenium am 20.08.2003, 20:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 20.08.2003, 19:50 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: |
Code: | h = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0); |
|
An der stelle kommt bei mir immer 'ne Fehlermeldung |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 20:01 Titel: |
|
|
Nein es heißt: Code: | h = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0); |
Mist das ist hier ein Fehler vom Board...
Ok vielleicht so:
h = pEvent->GetEvent(&evCode, & param1, & param2, 0);
natürlich die Leerzeile nach & löschen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 20.08.2003, 20:14 Titel: |
|
|
Jetzt kommt folgender Fehler:
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IMediaSeeking
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IMediaEventEx
noch#.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IMediaControl
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _CLSID_FilterGraph
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IGraphBuilder
MfG
Philipp Böing |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 20:17 Titel: |
|
|
Tausch mal unter dem Linker alles mit dem hier aus:
Code: | Strmiids.lib Quartz.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib |
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 20.08.2003, 20:48 Titel: |
|
|
... was soll ich nur machen?
--------------------Konfiguration: irgendwas - Win32 Debug--------------------
Linker-Vorgang läuft...
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/irgendwas.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
irgendwas.exe - 2 Fehler, 0 Warnung(en) |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.08.2003, 21:07 Titel: |
|
|
Du sollst eine Win32 Anwendung erstellen und keine Konsolenanwendung. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 21.08.2003, 07:43 Titel: |
|
|
OK, es klappt jetzt bei mir,
nur wie kann ich das Video vergrößern, mit ESC überspringen und... in eine Vollbild application einbinden
Aber schon mal Danke, ihr habt mir sehr geholfen
MfG
Philipp |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|