+//---------------------------------------------------------------------------
+// wxMCIMediaBackend::GetVolume
+//
+// Gets the volume of the current media via the MCI_DGV_STATUS_VOLUME
+// message. Value ranges from 0 (minimum) to 1000 (maximum volume).
+//---------------------------------------------------------------------------
+double wxMCIMediaBackend::GetVolume()
+{
+ MCI_STATUS_PARMS statusParms;
+ statusParms.dwCallback = NULL;
+ statusParms.dwItem = 0x4019; //MCI_DGV_STATUS_VOLUME
+
+ if (mciSendCommand(m_hDev, MCI_STATUS, MCI_STATUS_ITEM,
+ (DWORD)(LPSTR)&statusParms) != 0)
+ return 0;
+
+ return ((double)statusParms.dwReturn) / 1000.0;
+}
+
+//---------------------------------------------------------------------------
+// wxMCIMediaBackend::SetVolume
+//
+// Sets the volume of the current media via the MCI_DGV_SETAUDIO_VOLUME
+// message. Value ranges from 0 (minimum) to 1000 (maximum volume).
+//---------------------------------------------------------------------------
+bool wxMCIMediaBackend::SetVolume(double dVolume)
+{
+ MCI_DGV_SETAUDIO_PARMS audioParms;
+ audioParms.dwCallback = NULL;
+ audioParms.dwItem = 0x4002; //MCI_DGV_SETAUDIO_VOLUME
+ audioParms.dwValue = (DWORD) (dVolume * 1000.0);
+ audioParms.dwOver = 0;
+ audioParms.lpstrAlgorithm = NULL;
+ audioParms.lpstrQuality = NULL;
+
+ if (mciSendCommand(m_hDev, 0x0873, //MCI_SETAUDIO
+ 0x00800000L | 0x01000000L, //MCI_DGV_SETAUDIO+(_ITEM | _VALUE)
+ (DWORD)(LPSTR)&audioParms) != 0)
+ return false;
+ return true;
+}
+