|
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
|