Anwendung soll AVI abspielen und eine HTML Seite aufrufen



  • ich hab mir da sletztens auch mal angeschaut, hab im Inet folgenden Code gefunden, is rech tsimpel ads zu stande zu bringen:

    //
    // Api.cpp
    //
    // Azze 30.06.2002
    
    // H E A D E R /////////////////////////////////////
    
    #include <windows.h>
    #include <commctrl.h>
    #include "resource.h"
    
    // M A K R O S /////////////////////////////////////
    
    #ifndef STRICT
    #define STRICT
    #endif
    #define WIN32_LEAN_AND_MEAN
    #define fehler(x, y)	MessageBox(x, y, "Achtung!!", MB_OK | MB_ICONERROR)
    
    // G L O B A L E  V A R I A B L E N ////////////////
    
    LPCTSTR gl_Titel = "Avi-Player";
    LPCTSTR gl_Class = "Anwendung";
    HINSTANCE hInst;
    HWND hAnim;
    
    // G L O B A L E  F U N K T I O N E N //////////////
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    HWND azze_initproc(HINSTANCE);
    
    // E I N T R I T T S F U N K T I O N ///////////////	
    
    int WINAPI WinMain(HINSTANCE hInstance,
    				   HINSTANCE hPrevInstance,
    				   PSTR szCmdLine,
    				   int iCmdShow)
    {
    	MSG msg;
    	HWND hwnd;
    	hInst = hInstance;
    
    	hwnd = azze_initproc(hInstance);
    	if(!hwnd) {
    		fehler(0, "Konnte kein Fenster generieren!");
    		return 0; }
    
    	ShowWindow(hwnd, iCmdShow);
    	UpdateWindow(hwnd);
    
    	while(GetMessage(&msg, NULL, 0, 0)) {
    		TranslateMessage(&msg);
    		DispatchMessage(&msg); }
    
    	return msg.wParam;
    }
    
    // F U N K T I O N E N /////////////////////////////
    
    HWND azze_initproc(HINSTANCE hInst)
    {
    	WNDCLASSEX wc;
    	HWND hw;
    
    	wc.cbSize			= sizeof(WNDCLASSEX);
    	wc.style			= CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc		= WndProc;
    	wc.cbClsExtra		= 0;
    	wc.cbWndExtra		= 0;
    	wc.hInstance		= hInst;
    	wc.hIcon			= LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
    	wc.hCursor			= LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
    	wc.lpszMenuName		= "Menu";
    	wc.lpszClassName	= gl_Class;
    	wc.hIconSm			= NULL;
    
    	if(!RegisterClassEx(&wc)) return NULL;
    
    	hw = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
    						gl_Class, gl_Titel,
    						WS_OVERLAPPEDWINDOW,
    						CW_USEDEFAULT, CW_USEDEFAULT,
    						400, 400,
    						NULL, NULL, hInst, NULL);
    
    	return hw;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, 
    						 UINT message, 
    						 WPARAM wParam, 
    						 LPARAM lParam)
    {
    	PAINTSTRUCT paint;
    	HDC pdc;
    	OPENFILENAME ofn;
    	static char datei[MAX_PATH];
    	static HMENU menu;
    
    	switch(message) {
    		case WM_CREATE:
    			hAnim = Animate_Create(hwnd, 1, WS_CHILD | WS_BORDER | WS_VISIBLE, hInst);
    			if(!hAnim) fehler(hwnd, "Konnte Handle nicht einrichten!");
    			menu = GetMenu(hwnd);
    			break;
    
    		case WM_PAINT:
    			pdc = BeginPaint(hwnd, &paint);
    			EndPaint(hwnd, &paint);
    			break;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam)) {
    				case ID_DATEI_BEENDEN:
    					if(hAnim) DestroyWindow(hAnim);
    					DestroyWindow(hwnd);
    					break;
    				case ID_INFO:
    					MessageBox(hwnd, "Avi-Player <C> Azze 2002", "info", MB_OK);
    					break;
    				case ID_DATEI_SCHLIESSEN:
    					EnableMenuItem(menu, ID_AVI_ABSPIELEN, MF_GRAYED);
    					EnableMenuItem(menu, ID_AVI_STOPPEN, MF_GRAYED);
    					if(hAnim) {
    					Animate_Close(hAnim);
    					DestroyWindow(hAnim); }
    					SetWindowText(hwnd, "Avi-Player");
    					break;
    				case ID_DATEI_OEFFNEN:
    					if(!hAnim) {
    					hAnim = Animate_Create(hwnd, 1, WS_CHILD | WS_BORDER | WS_VISIBLE, hInst);
    					if(!hAnim) fehler(hwnd, "Konnte Handle nicht einrichten!"); }
    					ZeroMemory(&ofn, sizeof(ofn));
    					ofn.lStructSize = sizeof(OPENFILENAME);
    					ofn.hwndOwner = hwnd;
    					ofn.lpstrFilter = "Avi Files {*.avi}\0*.avi\0\0";
    					ofn.lpstrFile = datei;
    					ofn.nMaxFile = MAX_PATH;
    					ofn.Flags = OFN_FILEMUSTEXIST;
    					ofn.lpstrDefExt = "avi";
    					GetOpenFileName(&ofn);
    					if(Animate_Open(hAnim, datei)) {
    						SetWindowText(hwnd, datei);
    						EnableMenuItem(menu, ID_AVI_ABSPIELEN, MF_ENABLED);
    						EnableMenuItem(menu, ID_AVI_STOPPEN, MF_GRAYED); }
    					break;
    				case ID_AVI_ABSPIELEN:
    					Animate_Play(hAnim, 0, (WORD)-1, -1);
    					EnableMenuItem(menu, ID_AVI_ABSPIELEN, MF_GRAYED);
    					EnableMenuItem(menu, ID_AVI_STOPPEN, MF_ENABLED);
    					break;
    				case ID_AVI_STOPPEN:
    					Animate_Stop(hAnim);
    					EnableMenuItem(menu, ID_AVI_ABSPIELEN, MF_ENABLED);
    					EnableMenuItem(menu, ID_AVI_STOPPEN, MF_GRAYED);
    					break;
    
    			}
    			break;
    
    		case WM_DESTROY:
    			if(hAnim) DestroyWindow(hAnim);
    			PostQuitMessage(0);
    			break;
    		default:
    			return DefWindowProc(hwnd, message, wParam, lParam); }
    
    	return 0L;
    }
    

    Hoffe dass du damit was anfangen kannst

    gruß thomas



  • Jab. Animate_Create, Animate_Open, Animate_Play, etc., für die HTML Seite: ShellExecute(hDeinWindow, "open", "C:\\seite.html", 0, 0, SW_SHOWNORMAL);

    Wie Du den Browser in einer bestimmten Größe anzeigen lassen kannst, weiß ich auf anhib nicht. wird etwas komplizierter sein. Durch ShellExecute bekommst du ein HINSTANCE Handle, darüber kommste vielleicht ans Wnd-Handle des Browsers und kannst somit die Größe des Browsers ändern....



  • Moin,

    wäre es evtl. möglich, dass mir jmd. einmal den kompletten Quellcode dieser Öffnungsgeschichte pastet? Ich schaffs nur in einer "Win32 Konsole". Wenn ich zumindestens schon einmal die Windowsform hätte, müsste ich den Rest Mittels MSDN ect. hinbekommen.



  • Bei den IDEs kann ich auf VisualStudio 6 als auch VisualStudio 2003 .Net zurückgreifen.



  • Dann wähle beim Anlegen des Projekts mal "Win32-Anwendung" anstelle von "Win32-Konsolen-Anwendung" aus.
    Ein einleitendes Tutorial findest du z.B. hier: http://www.win-api.de
    Und zum Abspielen des AVI gibt's noch was in den FAQ: http://www.c-plusplus.net/forum/viewtopic.php?t=39401



  • Hallo!

    Danke für den Beitrag.
    Folgendes habe ich nun versucht:

    Ich habe ein neues Projekt hinzugefügt (leere W32 Anwendung). Dann habe ich unter "Quellcode" eine C++-Quellcodedatei hinzugefügt (main.cpp genannent). in dieser steht:

    #include <windows.h>
    #include <mmsystem.h>
    
    int myPlayAvi (HWND hWnd, char *filename, int loop) 
    { 
     char cmd[300]; 
      wsprintf(cmd, "open \"%s\" alias mympeg type MPEGVideo style child", filename); 
      if (mciSendString(cmd, 0, 0, 0) != 0) 
      { 
        MessageBox(NULL, "MCI-Error: Kann Datei nicht öffnen!", "Fehler", 0); 
        return -1; 
      } 
    
      wsprintf(cmd, "window mympeg handle %lu", hWnd); 
      if (mciSendString(cmd, 0, 0, 0) != 0) 
      { 
        wsprintf(cmd, "MCI-Error: Kann window handle %ld nicht setzen", hWnd); 
        MessageBox(NULL, cmd, "Fehler", 0); 
        return -1; 
      } 
    
      wsprintf(cmd, "play mympeg from 0"); 
      if (loop) wsprintf(cmd, "%s repeat", cmd); 
      if (mciSendString(cmd, 0, 0, 0) != 0) 
      { 
        MessageBox(NULL, "MCI-Error: Kann Datei nicht absielen!", "Fehler", 0); 
        return -1; 
      } 
      return 0; 
    } 
    
    int myStopAvi (void) 
    { 
    char cmd[300]; 
      wsprintf(cmd, "close mympeg"); 
      if (mciSendString(cmd, 0, 0, 0) != 0) 
      { 
        MessageBox(NULL, "MCI-Error: Kann Datei nicht schließen!", "Fehler", 0); 
        return -1; 
      } 
      return 0; 
    }
    

    Beim kompilieren bekommen ich den Fehler:

    --------------------Konfiguration: test16 - Win32 Debug--------------------
    Kompilierung läuft...
    test.cpp
    Linker-Vorgang läuft...
    LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
    Debug/test16.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    test16.exe - 2 Fehler, 0 Warnung(en)





  • Hallo Flenders,

    danke! Das hat mir etwas weiter geholfen. Jetzt habe das Fenster soweit programmiert, dass einen anderen Style hat und die Größe die ich will.

    Nächster Schritt:
    Um zu verstehen, wo ich jetzt den Code mit dem AVI reinschreiben soll, wollte ich es mit einem einfachen Bild testen. Quasi da wo zur Zeit "Hallo, ich bin ein Fenster!" steht, soll ein Bild angezeigt werden.

    Ich würde sagen, die Stelle

    // Die Hauptnachrichtenschleife
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       HDC hdc;
       PAINTSTRUCT ps;
    
       switch (message)
       {
       case WM_CREATE:
          return (0);
    
       case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps);
          TextOut (hdc, 0, 0, "Hallo, ich bin ein Fenster!", 27);
          EndPaint (hwnd, &ps);
          return (0);
    
       case WM_DESTROY:
          PostQuitMessage (0);
          return (0);
       }
    
       return DefWindowProc (hwnd, message, wParam, lParam);
    }
    

    muss geändert werden. Richtig? Und... wodurch?



  • Das Bild müsstest du dann z.B. in WM_CREATE laden, in WM_PAINT auf den Bildschirm zeichnen / kopieren und in WM_DESTROY dann das Bild wieder freigeben. Aber das hat doch jetzt eigentlich nichts direkt mit dem Abspielen eines AVI zu tun 😕

    Dazu musst du eigentlich nur z.B in WM_CREATE myPlayAvi mit deinem Fensterhandle, den Pfad des AVI-Files und dem Wiedergabemodus(Loop) als Parameter aufrufen. Stoppen kannst du das Abspielen dann mit myStopAvi. Und nicht vergessen Winmm.lib mit zu linken 😉



  • Ich hab's geschafft. Nachdem ich die ganze Nacht über MSDN gelesen habe sowie hier im Forum bin ich fertig.
    Programm läuft und tut was es soll.

    Vielen Dank für die Hilfe!


Anmelden zum Antworten