Beispiel für Rendercode
Hier ist ein Beispielcode, der die Render-Funktion verwendet, um eine Linie über den Bildschirm zu zeichnen. Die Höhe der Linie wird durch den Wellenformwert definiert.
STDMETHODIMP CStock::Render(TimedLevel *pLevels, HDC hdc, RECT *prc)
{
// Create new brushes and pens.
HBRUSH hNewBrush = ::CreateSolidBrush( 0 );
// Create a new solid pen the color of the foreground.
HPEN hNewPen = ::CreatePen( PS_SOLID, 0, m_clrForeground );
// Add the pen to the device context.
HPEN hOldPen= static_cast<HPEN>(::SelectObject( hdc, hNewPen ));
// Fill the background with the black brush.
::FillRect( hdc, prc, hNewBrush );
// Get the y value from the waveform.
int y = pLevels->waveform[0][0];
// Draw the line from left to right.
::MoveToEx( hdc, prc->left, y, NULL);
::LineTo(hdc, prc->right, y);
// Delete your brush.
if (hNewBrush)
{
::DeleteObject( hNewBrush );
}
// Delete your pen.
if (hNewPen)
{
::SelectObject( hdc, hOldPen );
::DeleteObject( hNewPen );
}
// You're done for this round.
return S_OK;
}
Die Render-Funktion ist der Ort, an dem die Hauptarbeit Ihres Codes stattfindet. Jedes Mal, wenn Windows Media Player eine Momentaufnahme der Audiodaten erstellt, wird diese Funktion aufgerufen, und Ihr Code wird ausgeführt.
Dieser Code führt die folgenden Aufgaben aus. Weitere Informationen zu bestimmten Funktionen finden Sie im Microsoft Windows Platform SDK für 32-Bit-Windows.
Erstellen von Objekten
In der Regel verwenden Sie die Zeichnungsfunktionen, die im Lieferumfang von Microsoft Windows Graphical Display Interface (GDI) stehen. Sie müssen Stifte erstellen, um Linien und Pinsel zu zeichnen, um Bereiche zu füllen.
Ein solider schwarzer Pinsel wird erstellt, um den Hintergrund auszufüllen.
Ein Vollkörperstift wird erstellt, um eine Linie zu zeichnen. Die Farbe ist die Vordergrundfarbe, wie von der Skin definiert, die die Visualisierung anzeigen soll.
Hinzufügen des Objekts zum DC
Sie müssen den Stift dem Gerätekontext (DC) hinzufügen. Der DC ist der Teil des Arbeitsspeichers, in dem alle Zeichnungsdaten und -objekte gespeichert werden. Im Wesentlichen ist der DC der Fenster-Traffic Manager, der alles grafisch nachverfolgt.
Sie müssen das von Ihnen erstellte Stiftobjekt umwerfen und als alten Stift speichern. Verwenden Sie dieses Codierungsverfahren für alle neuen Stifte. Diese Technik ist für die 32-Bit-Programmierung erforderlich.
Ausfüllen des Hintergrunds
Sie können jetzt zeichnen. Die FillRect-Funktion füllt das Rechteck des Fensters, wie durch die Parameter der Render-Funktion definiert. Das Rechteck ist mit einem schwarzen Pinsel gefüllt.
Abrufen von Audiodaten
Als Nächstes ruft der Code einige Audiodaten aus Windows Media Player ab. Mithilfe des Wellenformarrays können Sie den aktuellen Wert der Audioleistung zum Zeitpunkt der Momentaufnahme abrufen. In diesem Fall nehmen Sie die Audiodaten des linken Kanals an. Der erste Wert im Array ist der erste 1024. der Audiostrom-Momentaufnahme.
Diese Informationen werden verwendet, um eine Linie anzuzeigen, deren Höhe der Audiostrommomentaufnahme entspricht.
Einen Punkt machen
Die Linie wird mithilfe der Funktionen MoveToEx und LineTo GDI von links nach rechts gezeichnet.
Zuerst verschieben Sie den Stift an den Anfangspunkt. In diesem Fall werden x und y verwendet, um die Werte von links nach rechts und von oben nach unten zu definieren, die dem Benutzer auf dem Bildschirm angezeigt werden. X wird durch das Rechteck prc und insbesondere durch den Wert von prc->links definiert. Y ist als Wert der Wellenformdaten zu diesem Zeitpunkt definiert.
Anschließend zeichnen Sie eine Linie auf der anderen Seite des Fensters. Der Punkt, zu dem Sie die Linie zeichnen, ist wieder ein x-, y-Wert. X wird durch den Rechteck-Prc definiert, dieses Mal jedoch durch prc->rechts. Y wird weiterhin durch die Wellenformdaten definiert und entspricht dem Punkt, von dem aus Sie begonnen haben, da Sie eine gerade Linie von links nach rechts zeichnen.
Alles bereinigen
Sie müssen die erstellten Objekte löschen. Insbesondere müssen Sie alle Pinsel und Stifte löschen, die Sie erstellen. Es empfiehlt sich, Stifte und Pinsel zu löschen, wenn Sie sie nicht mehr verwenden.
Wenn Sie sie nicht löschen, bevor Sie die Implementierung der Render-Funktion abschließen, stürzt Die Visualisierung in einer Minute oder weniger ab. Sie müssen die Anzahl Ihrer Stifte und Pinsel beibehalten und jeden einzelnen zerstören. Achten Sie besonders darauf, keine Stifte innerhalb einer Codeschleife zu erstellen.
Verwenden Sie die im Beispiel beschriebene Codierungstechnik, um Ihre Stifte und Pinsel zu zerstören.
- Wichtig Zerstören Sie Ihre Stifte und Pinsel!
Wenn Sie die Bereinigung abgeschlossen haben, geben Sie S _ OK zurück, damit Windows Media Player wissen, dass Sie mit dem Zeichnen fertig sind. Sobald Sie fertig sind, wird ihre Zeichnung in das Fenster übertragen, eine weitere Momentaufnahme wird erstellt, Render fordert Ihren Code zum erneuten Zeichnen auf usw.