Programmieren mit C++

Code-Beispiele & Lösungen

Klassen für allgemeine Aufgaben

MCI-Basisklasse

Die nachfolgend beschriebenen Klassen steuern das Media Control Interface (MCI) über die Low-Level Command-Message-Schnittstelle, die über die Funktion mciSendCommand() angesteuert wird.

Da das MCI nicht objektorientiert entwickelt wurde, kann es nur schwer als eine große Klasse implementiert werden. Naheliegenderweise sollte zunächst eine generische Device-Klasse implementiert werden, die als Basisklasse für nachfolgende spezialisierte Gräteklassen dient.

Als Basisklasse dient CMciDevice. Sie spricht das MCI-Interface über die protected deklarierte Funktion SendCommand() an, die intern mciSendCommand() ansteuert.

Klasse CMciDevice

Über die Funktion ReportErrors() kann die Klasse angewiesen werden, ggf. ihre eigenen Fehlermeldungen in einer Messagebox auszugeben. Optional können diese jedoch auch ausgeschaltet werden.

Viele der Funktionen der Klasse CMciDevice returnieren als Ergebnis DWORD-Werte, die im Erfolgsfall 0 liefern und ansonsten einen Fehlercode ungleich 0. Dieser Fehlercode kann vom eigenen Fehlerhandling ausgewertet werden, während für Funktionen, die keinen Fehlercode returnieren, die Methode GetLastError() den zuletzt aufgetretenen Fehlercode liefert.

Fehlerhandling

void Attach(UINT wDeviceID)

Die Methode Attach() verbindet das Gerät mit dem bereits offenen MCI-Gerät wDeviceID.

Methode Attach

MCIDEVICEID GetDeviceID() const

GetDeviceID() ermittelt die verwendete Geräte-ID.

Methode GetDeviceID

virtual DWORD Open(DWORD dwDeviceType, 
                   BOOL bShareable = FALSE)
virtual DWORD Open(LPCSTR lpstrName, 
                   BOOL bShareable = FALSE); 

Die Methode Open() öffnet ein Gerät. Ist bShareable auf TRUE gesetzt, kann dieses Gerät mit anderen Anwendungen gleichzeitig benutzt werden. Das gewünschte Gerät kann wahlweise über eine Geräte-ID oder den Treibernamen lpstrName spezifiziert werden.

Methode Open

virtual DWORD Close() 

Close() schließt das Gerät.

Methode Close

static DWORD CloseAll() 

Die statische Memberfunktion CloseAll() schließt alle MCI-Geräte, die von der Anwendung geöffnet wurden. Die Funktion wartet, bis alle Geräte geschlossen sind, bevor sie zurückkehrt.

Methode CloseAll

MCIERROR GetLastError()

GetLastError() returniert den zuletzt aufgetretenen Fehler.

Methode GetLastError

DWORD GetDevCaps(DWORD dwDevcaps,
                 BOOL bItem = FALSE)

Die Methode GetDevCaps() ermittelt statische Geräteinformationen zum Gerät. Ist bItem auf TRUE gesetzt, so können spezielle Geräteeigenschaften erfragt werden. In diesem Fall ist die gewünschte Eigenschaft in dwDevcaps zu spezifizieren.

Mögliche Eigenschaften sind:

  • DWORD GetdevcapsCanEject
  • DWORD GetdevcapsCanPlay
  • DWORD GetdevcapsCanRecord
  • DWORD GetdevcapsCanSave

Ist bItem FALSE, können folgende Werte übergeben werden:

  • DWORD GetdevcapsCompound
  • DWORD GetdevcapsHasAudio
  • DWORD GetdevcapsHasVideo
  • DWORD GetdevcapsUsesFiles
  • DWORD GetdevcapsDeviceType

Mögliche Werte, die von GetDevCaps(CMciDevice::GetdevcapsDeviceType) returniert werden, sind:

  • DWORD DevtypeAnimation
  • DWORD DevtypeCdaudio
  • DWORD DevtypeDat
  • DWORD DevtypeDigitalvideo
  • DWORD DevtypeOther
  • DWORD DevtypeOverlay
  • DWORD DevtypeScanner
  • DWORD DevtypeSequencer
  • DWORD DevtypeVcr
  • DWORD DevtypeVideodisc
  • DWORD DevtypeWaveaudio

Methode GetDevCaps

virtual DWORD GetStatus(DWORD dwStatusItem)

Die Methode GetStatus() ermittelt Informationen über das Gerät. Mögliche Informationen sind:

  • DWORD StatusReady
  • DWORD StatusMediaPresent
  • DWORD StatusMode
  • DWORD StatusNumberOfTracks

Methode GetStatus

virtual DWORD GetInfo(DWORD dwInfoString, 
                      LPSTR lpstrReturn, 
                      DWORD dwRetSize).

GetInfo() ermittelt den Informationsstring des Geräts.

Methode GetInfo

virtual DWORD GetMode()

Die Methode GetMode() ist eine verkürzte Aufrufvariante für GetStatus(CMciDevice::StatusMode). Mögliche Rückgabewerte sind:

  • DWORD ModeNotReady
  • DWORD ModePause
  • DWORD ModePlay
  • DWORD ModeStop
  • DWORD ModeRecord
  • DWORD ModeSeek

Methode GetMode

HWND GetCallbackHwnd() const

Mittels GetCallbackHwnd() kann das Fenster ermittelt werden, an das die Callback-Aufrufe abgesetzt werden.

Methode GetCallbackHwnd

void SetCallbackWnd(CWnd* pWnd)
void SetCallbackWnd(HWND  hWnd)

Die Methode SetCallbackHWnd() legt das Fenster fest, an das die Callback-Aufrufe gesendet werden sollen.

Methode SetCallbackHwnd

void ReportErrors(BOOL bReport = TRUE)

Ist der Parameter bReport auf TRUE gesetzt, so erzeugt die Klasse eigene Fehlermeldungen, ansonsten werden diese unterdrückt.

Die Zeitformate MSF und TMSF

Verschiedene MCI-Kommandos arbeiten mit Zeitangaben, die entweder gesetzt oder abgefragt werden. Das MCI verwendet hierzu DWORDs, die jedoch abhängig vom zuvor mittels MCI_SET gesetzten Format zu interpretieren sind. Speziell im Bereich CDAudio finden MSF und TMSF Verwendung. MSF steht für Minute/Sekunde/Frame, während TMSF zusätzlich als erstes den Track spezifiziert.

Beide Formate werden bitweise in ein DWORD gepackt, wofür es entsprechende Makros gibt. Die Klassen CMsf und CTmsf erleichtern diese Arbeit durch spezielle Methoden für das Konvertieren.

Methode ReportErrors

CMsf()
CMsf(DWORD dwMsf)
CMsf(BYTE minute, BYTE second, BYTE frame)

Der Konstruktor erzeugt die Klasse und weist den Wert dwMsf zu, wobei der leere Konstruktor den Wert 0 setzt. Alternativ kann jedoch auch die Zeit in Form von Minuten, Sekunden und Frames spezifiziert werden.

Konstruktor CMsf

operator DWORD() const

Der Operator () liefert das DWORD, das zu der spezifizierten Zeitangabe gehört.

operator ()

BYTE GetMinute() const
BYTE GetSecond() const
BYTE GetFrame() const

Die Methoden GetMinute(), GetSecond() und GetFrames() returnieren die entsprechenden Anteile der Zeitangabe.

Die Klasse CTmsf ist analog aufgebaut.

Methode GetMinute, GetSecond, GetFrames

CTmsf() 
CTmsf(DWORD dwTmsf)
CTmsf(BYTE track, BYTE minute, BYTE second, 
      BYTE frame)

Der Konstruktor CTmsf() erzeugt eine Instanz der Klasse und setzt die Zeit im entsprechend übergebenen Format. Ist kein Parameter übergeben worden, setzt der Konstruktor automatisch den Wert 0 als DWORD.

Konstruktor CTmsf

operator DWORD() const

Der Operator () returniert den aktuell gesetzten Wert als DWORD.

Operator ()

BYTE GetTrack() const
BYTE GetMinute() const
BYTE GetSecond() const
BYTE GetFrame() const

Die Methoden GetFrames(), GetMinute(), GetSecond() und GetFrames() returnieren die entsprechenden Anteile der Zeitangabe.

Weitere Zeitformate können in analogen Klassen abgeleitet werden, wobei die hier implementierten Klassen CMsf und CTmsf auch in Anwendungen außerhalb dieser Klassenbibliothek benutzt werden können.

Methode GetTrack, GetMinute, GetSecond, GetFrames





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 02:36:09 von textarchiv.alojado.de