- More implement "Audio" dialog
authorDmitry Chapyshev <dmitry@reactos.org>
Sun, 29 Jun 2008 12:30:36 +0000 (12:30 +0000)
committerDmitry Chapyshev <dmitry@reactos.org>
Sun, 29 Jun 2008 12:30:36 +0000 (12:30 +0000)
svn path=/trunk/; revision=34185

reactos/dll/cpl/mmsys/audio.c

index 6fff614..5dd7bb0 100644 (file)
@@ -43,6 +43,7 @@ InitAudioDlg(HWND hwnd)
 
         if (CB_ERR != Res)
         {
+            SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex);
             // TODO: Getting default device
             SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
         }
@@ -63,6 +64,7 @@ InitAudioDlg(HWND hwnd)
 
         if (CB_ERR != Res)
         {
+            SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex);
             // TODO: Getting default device
             SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
         }
@@ -83,12 +85,34 @@ InitAudioDlg(HWND hwnd)
 
         if (CB_ERR != Res)
         {
+            SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex);
             // TODO: Getting default device
             SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
         }
     }
 }
 
+static UINT
+GetDevNum(HWND hControl, DWORD Id)
+{
+    int iCurSel;
+    UINT DevNum;
+
+    iCurSel = SendMessage(hControl, CB_GETCURSEL, 0, 0);
+
+    if (iCurSel == CB_ERR)
+        return 0;
+
+    DevNum = (UINT) SendMessage(hControl, CB_GETITEMDATA, iCurSel, 0);
+    if (DevNum == (UINT) CB_ERR)
+        return 0;
+
+    if (mixerGetID((HMIXEROBJ) DevNum, &DevNum, Id) != MMSYSERR_NOERROR)
+        return 0;
+
+    return DevNum;
+}
+
 /* Audio property page dialog callback */
 INT_PTR CALLBACK
 AudioDlgProc(HWND hwndDlg,
@@ -99,6 +123,7 @@ AudioDlgProc(HWND hwndDlg,
     UNREFERENCED_PARAMETER(lParam);
     UNREFERENCED_PARAMETER(wParam);
     UNREFERENCED_PARAMETER(hwndDlg);
+
     switch(uMsg)
     {
         case WM_INITDIALOG:
@@ -125,6 +150,74 @@ AudioDlgProc(HWND hwndDlg,
             }
         }
         break;
+
+        case WM_COMMAND:
+        {
+            STARTUPINFO si;
+            PROCESS_INFORMATION pi;
+            WCHAR szPath[MAX_PATH];
+
+            switch(LOWORD(wParam))
+            {
+                case IDC_VOLUME1_BTN:
+                {
+                    wsprintf(szPath, L"sndvol32.exe -d %d",
+                             GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_PLAY_LIST), MIXER_OBJECTF_WAVEOUT));
+
+                    ZeroMemory(&si, sizeof(si));
+                    si.cb = sizeof(si);
+                    si.wShowWindow = SW_SHOW;
+
+                    CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+                }
+                break;
+
+                case IDC_ADV2_BTN:
+                {
+                
+                }
+                break;
+
+                case IDC_VOLUME2_BTN:
+                {
+                    wsprintf(szPath, L"sndvol32.exe -r -d %d",
+                             GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_REC_LIST), MIXER_OBJECTF_WAVEIN));
+
+                    ZeroMemory(&si, sizeof(si));
+                    si.cb = sizeof(si);
+                    si.wShowWindow = SW_SHOW;
+
+                    CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+                }
+                break;
+
+                case IDC_ADV1_BTN:
+                {
+                
+                }
+                break;
+
+                case IDC_VOLUME3_BTN:
+                {
+                    wsprintf(szPath, L"sndvol32.exe -d %d",
+                             GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_MIDI_LIST), MIXER_OBJECTF_MIDIOUT));
+
+                    ZeroMemory(&si, sizeof(si));
+                    si.cb = sizeof(si);
+                    si.wShowWindow = SW_SHOW;
+
+                    CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+                }
+                break;
+
+                case IDC_ADV3_BTN:
+                {
+                
+                }
+                break;
+            }
+        }
+        break;
     }
 
     return FALSE;