TAnimateCtrl

Diese Klasse läßt sich nur unter Win32 verwenden und kapselt das Animationssteuerelement dieser Zielplattform. In diesem kann man ein AVI-Clip (AVI=Audio Video Interleaved) ablaufen lassen. Das Abspielen des AVI-Clips erfolgt im Hintergrund, d.h der aktuelle Thread wird weiter ausgeführt. Leider lassen sich nur Clips ohne Ton verwenden. Ebenso darf die keine Komprimierung, außer der RLE-Komprimierung, auf die Quelldatei des AVI-Clips angewendet worden sein.

 

TAnimateCtrl Teilhierarchie

 

Konstruktor zur direkten Erzeugung

TAnimateCtrl(TWindow* parent, int id, int x, int y, int w, int h, TModule* module = 0);

Parameter Bedeutung
parent Übergeordnetes Fenster.
id Eindeutige ID des Kontrollelements
x,y Position im Clientbereich des übergeordneten Fensters.
w Breite des Kontrollelements.
h Höhe des Kontrollelements.
module Zeiger auf die Modul- oder Anwendungsinstanz. Der Vorgabewert ist 0.

 

Konstruktor zur Erzeugung aus einer Ressource

TAnimateCtrl(TWindow* parent, int resourceId, TModule* module = 0);

wichtige Elementfunktionen

bool Open(char far* fileOrRes);
Diese Funktion öffnet eine AVI-Datei und zeigt den ersten Frame an. fileOrRes kann entweder eine Ressourcen-ID oder ein Pfad einer AVI-Datei sein. Wird für fileOrRes der Wert 0 angegeben, wird die AVI-Datei geschlossen und aus dem Speicher entfernt bzw. die Ressource entfernt.

bool Play(uint16 start = 0, uint16 end = -1, uint repeat = 1);
Mit dem Aufruf von Play wird der AVI-Clip abgespielt. start bezeichnet den Index des ersten zu spielenden Frames. Standardvorgabe ist 0, womit der erste Frame bezeichnet wird, da Frames mit 0 beginnen. end bezeichnet den Index des letzten Frames (Vorgabe ist -1). In repeat kann angegeben werden, wie oft der AVI-Clip abgespielt werden soll. Dieser Parameter hat den Vorgabewert 1, was bedeutet das der Clip nur einmal gespielt werden soll. Mit der Angabe von -1 kann aber festgelegt werden, daß dieser unendlich oft wiederholt werden soll. Der AVI-Clip darf maximal 65536 Frames enthalten.

Besitzt das Kontrollelement den Stil ACS_AUTOPLAY wird das Clip automatisch abgespielt, sobald es mit Open geöffnet wurde.

bool Seek(uint16 frame);
Sucht nach dem in frame angegebenen Frame-Index der zwischen 0 und 65.536 liegen muß. Wenn der Frame-Index vorhanden ist, wird true zurückgeliefert.

void Stop();
Stoppt das Abspielen der aktuellen AVI-Datei.

 

Beispiel

 

Animation mit TAnimateCtrl

 

In obiger Abbildung sehen Sie die Animation unseres nachfolgenden Beispielprogramms. Wird der Start-Schalter betätigt, wird die Animation gestartet und solange ausgeführt, bis der Stop-Schalter betätigt wird. Nach dem Stoppen des AVI-Clips wird über einen Aufruf von Seek(0) wieder auf den Anfang des Clips gesprungen. Zum Erstellen von AVI-Clips benötigen sie ein Programm das in der Lage ist AVI-Dateien (Video for Windows) zu produzieren.

 

// Beispielprogramm ANIMAT
// Datei ANIMAT.H
 
#if !defined(__ANIMAT_H)
#define __ANIMAT_H
 
 
#include <owl\applicat.h>
#include <owl\framewin.h>
#include <owl\animctrl.h>
#include <owl\button.h>
 
#define AVIPATH "SHRED.AVI"
#define ID_ANIMAT 100
#define ID_STARTBTN 120
#define ID_STOPBTN 121
 
class CAnimateWindow : public TWindow
{

TAnimateCtrl* anim;

TButton* start;

TButton* stop;

bool runAnimate;

 

public:

CAnimateWindow(TWindow* parent=0, const char far* title=0, TModule* module=0);

void StartAnimate();

void StopAnimate();

 

protected:

void SetupWindow();

 

DECLARE_RESPONSE_TABLE(CAnimateWindow);

 
};
 
class CAnimateApp : public TApplication
{

public:

CAnimateApp() : TApplication() {}

void InitMainWindow();

};
 
#endif // __ANIMAT_H
 

 

// Beispielprogramm ANIMAT
// Datei ANIMAT.CPP
 
#include "animat.h"
 
DEFINE_RESPONSE_TABLE1(CAnimateWindow, TWindow)

EV_COMMAND(ID_STARTBTN, StartAnimate),

EV_COMMAND(ID_STOPBTN, StopAnimate),

END_RESPONSE_TABLE;
 
CAnimateWindow::CAnimateWindow(TWindow* parent, const char far* title, TModule* module) :

TWindow(parent, title, module), runAnimate(0)

{

anim = new TAnimateCtrl(this, ID_ANIMAT, 50, 50, 300, 200);

start = new TButton(this, ID_STARTBTN, "Start", 50, 255, 100, 30, true);

stop = new TButton(this, ID_STOPBTN, "Stop", 250, 255, 100, 30);

 

Attr.W = 400;

Attr.H = 350;

}
 
void CAnimateWindow::StartAnimate()
{

if( runAnimate )

return;

 

if( anim->Open(AVIPATH) ) {

anim->Play(0, -1, -1);

runAnimate = true;

start->EnableWindow(false);

stop->EnableWindow(true);

}

else

MessageBox("Fehler beim Öffnen der AVI-Datei!", "Fehler", MB_ICONEXCLAMATION | MB_OK);

}
 
void CAnimateWindow::StopAnimate()
{

if( runAnimate ) {

anim->Stop();

anim->Seek(0);

runAnimate = false;

start->EnableWindow(true);

stop->EnableWindow(false);

}

}
 
void CAnimateWindow::SetupWindow()
{

TWindow::SetupWindow();

stop->EnableWindow(false);

}
 
void CAnimateApp::InitMainWindow()
{

SetMainWindow(new TFrameWindow(0, "Beispiel ANIMAT", new CAnimateWindow, true));

GetMainWindow()->EnableKBHandler();

}
 
int OwlMain(int , char*[])
{

CAnimateApp app;

return app.Run();

}
 

Übersicht    

Stand: 22.07.99 11:34:37
© 1998,1999 by Hans Joachim Kiefer, hajokiefer@handshake.de