https://git.reactos.org/?p=reactos.git;a=commitdiff;h=849fdca3f9401795ad6d6231e55b5c6ec6f02abd

commit 849fdca3f9401795ad6d6231e55b5c6ec6f02abd
Author:     Eric Kohl <eric.k...@reactos.org>
AuthorDate: Sat Mar 10 21:10:40 2018 +0100
Commit:     Eric Kohl <eric.k...@reactos.org>
CommitDate: Sat Mar 10 21:11:08 2018 +0100

    [SNDVOL32] Add the small master dialog
    - Add the small master dialog.
    - Add support for tray (/t), small (/s) and normal (/n) dialog sizes.
    - Fix the font size calculation for the dialogs.
    - Fix the dialog unit to pixel conversion.
    - Fix the client window size calculation.
    - Do not leak font handles.
---
 base/applications/sndvol32/dialog.c      | 216 ++++++++++++++++++++-----------
 base/applications/sndvol32/lang/bg-BG.rc |  11 ++
 base/applications/sndvol32/lang/cs-CZ.rc |  11 ++
 base/applications/sndvol32/lang/de-DE.rc |  11 ++
 base/applications/sndvol32/lang/el-GR.rc |  11 ++
 base/applications/sndvol32/lang/en-US.rc |  11 ++
 base/applications/sndvol32/lang/es-ES.rc |  11 ++
 base/applications/sndvol32/lang/fr-FR.rc |  11 ++
 base/applications/sndvol32/lang/he-IL.rc |  11 ++
 base/applications/sndvol32/lang/hu-HU.rc |  11 ++
 base/applications/sndvol32/lang/id-ID.rc |  11 ++
 base/applications/sndvol32/lang/it-IT.rc |  11 ++
 base/applications/sndvol32/lang/ja-JP.rc |  11 ++
 base/applications/sndvol32/lang/ko-KR.rc |  11 ++
 base/applications/sndvol32/lang/lt-LT.rc |  11 ++
 base/applications/sndvol32/lang/nl-NL.rc |  11 ++
 base/applications/sndvol32/lang/no-NO.rc |  11 ++
 base/applications/sndvol32/lang/pl-PL.rc |  11 ++
 base/applications/sndvol32/lang/pt-BR.rc |  11 ++
 base/applications/sndvol32/lang/ro-RO.rc |  11 ++
 base/applications/sndvol32/lang/ru-RU.rc |  11 ++
 base/applications/sndvol32/lang/sk-SK.rc |  11 ++
 base/applications/sndvol32/lang/sq-AL.rc |  11 ++
 base/applications/sndvol32/lang/sv-SE.rc |  11 ++
 base/applications/sndvol32/lang/th-TH.rc |  11 ++
 base/applications/sndvol32/lang/tr-TR.rc |  11 ++
 base/applications/sndvol32/lang/uk-UA.rc |  11 ++
 base/applications/sndvol32/lang/zh-CN.rc |  11 ++
 base/applications/sndvol32/lang/zh-TW.rc |  11 ++
 base/applications/sndvol32/resources.h   |   7 +-
 base/applications/sndvol32/sndvol32.c    |  80 +++++++-----
 base/applications/sndvol32/sndvol32.h    |  14 +-
 32 files changed, 512 insertions(+), 113 deletions(-)

diff --git a/base/applications/sndvol32/dialog.c 
b/base/applications/sndvol32/dialog.c
index 5c74e22b33..08fd6d197e 100644
--- a/base/applications/sndvol32/dialog.c
+++ b/base/applications/sndvol32/dialog.c
@@ -7,11 +7,15 @@
 
 #include "sndvol32.h"
 
-#include <wingdi.h>
 
-#define XLEFT (30)
-#define XTOP (20)
-#define DIALOG_VOLUME_SIZE (150)
+VOID
+ConvertRect(LPRECT lpRect, UINT xBaseUnit, UINT yBaseUnit)
+{
+    lpRect->left = MulDiv(lpRect->left, xBaseUnit, 4);
+    lpRect->right = MulDiv(lpRect->right, xBaseUnit, 4);
+    lpRect->top = MulDiv(lpRect->top, yBaseUnit, 8);
+    lpRect->bottom = MulDiv(lpRect->bottom, yBaseUnit, 8);
+}
 
 LPVOID
 LoadDialogResource(
@@ -66,7 +70,9 @@ AddDialogControl(
     IN LPRECT DialogOffset,
     IN PDLGITEMTEMPLATE DialogItem,
     IN DWORD DialogIdMultiplier,
-    IN HFONT hFont)
+    IN HFONT hFont,
+    UINT xBaseUnit,
+    UINT yBaseUnit)
 {
     RECT rect;
     LPWORD Offset;
@@ -75,12 +81,18 @@ AddDialogControl(
     DWORD wID;
 
     /* initialize client rectangle */
-    rect.left = DialogItem->x + DialogOffset->left;
-    rect.top = DialogItem->y + DialogOffset->top;
-    rect.right = DialogItem->cx;
-    rect.bottom = DialogItem->cy;
+    rect.left = DialogItem->x;
+    rect.top = DialogItem->y;
+    rect.right = DialogItem->x + DialogItem->cx;
+    rect.bottom = DialogItem->y + DialogItem->cy;
 
-    //MapDialogRect(hwndDialog, &rect);
+    /* Convert Dialog units to pixes */
+    ConvertRect(&rect, xBaseUnit, yBaseUnit);
+
+    rect.left += DialogOffset->left;
+    rect.right += DialogOffset->left;
+    rect.top += DialogOffset->top;
+    rect.bottom += DialogOffset->top;
 
     /* move offset after dialog item */
     Offset = (LPWORD)(DialogItem + 1);
@@ -140,8 +152,8 @@ AddDialogControl(
                            DialogItem->style,
                            rect.left,
                            rect.top,
-                           rect.right,
-                           rect.bottom,
+                           rect.right - rect.left,
+                           rect.bottom - rect.top,
                            hwndDialog,
                            (HMENU)(wID),
                            hAppInstance,
@@ -207,35 +219,75 @@ VOID
 LoadDialogControls(
     IN PMIXER_WINDOW MixerWindow,
     LPRECT DialogOffset,
-    LPVOID DlgResource,
-    DWORD DialogIdMultiplier)
+    WORD ItemCount,
+    PDLGITEMTEMPLATE DialogItem,
+    DWORD DialogIdMultiplier,
+    UINT xBaseUnit,
+    UINT yBaseUnit)
 {
-    LPDLGTEMPLATE DialogHeader;
-    PDLGITEMTEMPLATE DialogItem;
     LPWORD Offset;
-    WORD FontSize;
-    WCHAR FontName[100];
-    WORD Length, Index;
-    HFONT Font;
-
-    /* get dialog header */
-    DialogHeader = (LPDLGTEMPLATE)DlgResource;
+    WORD Index;
 
     /* sanity check */
-    assert(DialogHeader->cdit);
+    assert(ItemCount);
 
     if (MixerWindow->Window)
-        MixerWindow->Window = (HWND*)HeapReAlloc(GetProcessHeap(), 
HEAP_ZERO_MEMORY, MixerWindow->Window, (MixerWindow->WindowCount + 
DialogHeader->cdit) * sizeof(HWND));
+        MixerWindow->Window = (HWND*)HeapReAlloc(GetProcessHeap(), 
HEAP_ZERO_MEMORY, MixerWindow->Window, (MixerWindow->WindowCount + ItemCount) * 
sizeof(HWND));
     else
-        MixerWindow->Window = (HWND*)HeapAlloc(GetProcessHeap(), 
HEAP_ZERO_MEMORY, DialogHeader->cdit * sizeof(HWND));
+        MixerWindow->Window = (HWND*)HeapAlloc(GetProcessHeap(), 
HEAP_ZERO_MEMORY, ItemCount * sizeof(HWND));
     if (!MixerWindow->Window)
     {
         /* no memory */
         return;
     }
 
-    /* now walk past the dialog header */
-    Offset = (LPWORD)(DialogHeader + 1);
+    /* enumerate now all controls */
+    for (Index = 0; Index < ItemCount; Index++)
+    {
+        /* add controls */
+        Offset = AddDialogControl(MixerWindow->hWnd, 
&MixerWindow->Window[MixerWindow->WindowCount], DialogOffset, DialogItem, 
DialogIdMultiplier, MixerWindow->hFont, xBaseUnit, yBaseUnit);
+
+        /* sanity check */
+        assert(Offset);
+
+        /* move dialog item to new offset */
+        DialogItem =(PDLGITEMTEMPLATE)Offset;
+
+        /* increment window count */
+        MixerWindow->WindowCount++;
+    }
+}
+
+VOID
+LoadDialog(
+    IN HMODULE hModule,
+    IN PMIXER_WINDOW MixerWindow,
+    IN LPCWSTR DialogResId,
+    IN DWORD Index)
+{
+    LPDLGTEMPLATE DlgTemplate;
+    PDLGITEMTEMPLATE DlgItem;
+    RECT dialogRect;
+    LPWORD Offset;
+    WORD FontSize;
+    WCHAR FontName[100];
+    WORD Length;
+    int width;
+
+    DWORD units = GetDialogBaseUnits();
+    UINT xBaseUnit = LOWORD(units);
+    UINT yBaseUnit = HIWORD(units);
+
+    /* first load the dialog resource */
+    DlgTemplate = (LPDLGTEMPLATE)LoadDialogResource(hModule, DialogResId, 
NULL);
+    if (!DlgTemplate)
+    {
+        /* failed to load resource */
+        return;
+    }
+
+    /* Now walk past the dialog header */
+    Offset = (LPWORD)(DlgTemplate + 1);
 
     /* FIXME: support menu */
     assert(*Offset == 0);
@@ -260,61 +312,62 @@ LoadDialogControls(
     /* copy font */
     wcscpy(FontName, (LPWSTR)Offset);
 
-    Font = CreateFontW(FontSize+8, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, 
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
FF_DONTCARE, FontName);
-    assert(Font);
+    if (DlgTemplate->style & DS_SETFONT)
+    {
+        HDC hDC;
 
-    /* move offset after font name */
-    Offset += Length;
+        hDC = GetDC(0);
 
-    /* offset is now at first dialog item control */
-    DialogItem = (PDLGITEMTEMPLATE)Offset;
+        if (!MixerWindow->hFont)
+        {
+            int pixels = MulDiv(FontSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
+            MixerWindow->hFont = CreateFontW(-pixels, 0, 0, 0, FW_NORMAL, 
FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, 
DEFAULT_QUALITY, FF_DONTCARE, FontName);
+        }
 
-    /* enumerate now all controls */
-    for(Index = 0; Index < DialogHeader->cdit; Index++)
-    {
-        /* add controls */
-        Offset = AddDialogControl(MixerWindow->hWnd, 
&MixerWindow->Window[MixerWindow->WindowCount], DialogOffset, DialogItem, 
DialogIdMultiplier, Font);
+        if (MixerWindow->hFont)
+        {
+            SIZE charSize;
+            HFONT hOldFont;
 
-        /* sanity check */
-        assert(Offset);
+            hOldFont = SelectObject(hDC, MixerWindow->hFont);
+            charSize.cx = GdiGetCharDimensions(hDC, NULL, &charSize.cy);
+            if (charSize.cx)
+            {
+                xBaseUnit = charSize.cx;
+                yBaseUnit = charSize.cy;
+            }
+            SelectObject(hDC, hOldFont);
+        }
+    }
 
-        /* move dialog item to new offset */
-        DialogItem =(PDLGITEMTEMPLATE)Offset;
+//    assert(MixerWindow->hFont);
 
-        /* increment window count */
-        MixerWindow->WindowCount++;
-    }
-}
+    /* move offset after font name */
+    Offset += Length;
 
-VOID
-LoadDialog(
-    IN HMODULE hModule,
-    IN PMIXER_WINDOW MixerWindow,
-    IN LPCWSTR DialogResId,
-    IN DWORD Index)
-{
-    LPVOID DlgResource;
-    RECT rect;
+    /* offset is now at first dialog item control */
+    DlgItem = (PDLGITEMTEMPLATE)Offset;
 
-    /* first load the dialog resource */
-    DlgResource = LoadDialogResource(hModule, DialogResId, NULL);
+    dialogRect.left = 0;
+    dialogRect.right = DlgTemplate->cx;
+    dialogRect.top = 0;
+    dialogRect.bottom = DlgTemplate->cy;
 
-    if (!DlgResource)
-    {
-        /* failed to load resource */
-        return;
-    }
+    ConvertRect(&dialogRect, xBaseUnit, yBaseUnit);
 
-    /* get window size */
-    GetClientRect(MixerWindow->hWnd, &rect);
+    width = dialogRect.right - dialogRect.left;
 
-    /* adjust client position */
-    rect.left += (Index * DIALOG_VOLUME_SIZE);
+    dialogRect.left += MixerWindow->rect.right;
+    dialogRect.right += MixerWindow->rect.right;
+    dialogRect.top += MixerWindow->rect.top;
+    dialogRect.bottom += MixerWindow->rect.top;
 
+    MixerWindow->rect.right += width;
+    if ((dialogRect.bottom - dialogRect.top) > (MixerWindow->rect.bottom - 
MixerWindow->rect.top))
+        MixerWindow->rect.bottom = MixerWindow->rect.top + dialogRect.bottom - 
dialogRect.top;
 
     /* now add the controls */
-    LoadDialogControls(MixerWindow, &rect, DlgResource, Index);
-
+    LoadDialogControls(MixerWindow, &dialogRect, DlgTemplate->cdit, DlgItem, 
Index, xBaseUnit, yBaseUnit);
 }
 
 BOOL
@@ -328,7 +381,6 @@ EnumConnectionsCallback(
     WCHAR LineName[MIXER_LONG_NAME_CHARS];
     DWORD Flags;
     DWORD wID;
-    RECT rect;
     UINT ControlCount = 0, Index;
     LPMIXERCONTROL Control = NULL;
     HWND hDlgCtrl;
@@ -352,8 +404,10 @@ EnumConnectionsCallback(
           /* is it selected */
           if (Flags != 0x4)
           {
+              int dlgId = (PrefContext->MixerWindow->Mode == SMALL_MODE) ? 
IDD_SMALL_MASTER : IDD_VOLUME_CTRL;
+
               /* load dialog resource */
-              LoadDialog(hAppInstance, PrefContext->MixerWindow, 
MAKEINTRESOURCE(IDD_VOLUME_CTRL), PrefContext->Count);
+              LoadDialog(hAppInstance, PrefContext->MixerWindow, 
MAKEINTRESOURCE(dlgId), PrefContext->Count);
 
               /* get id */
               wID = (PrefContext->Count + 1) * IDC_LINE_NAME;
@@ -431,12 +485,6 @@ EnumConnectionsCallback(
 
               /* increment dialog count */
               PrefContext->Count++;
-
-              /* get application rectangle */
-              GetWindowRect(PrefContext->MixerWindow->hWnd, &rect);
-
-              /* now move the window */
-              MoveWindow(PrefContext->MixerWindow->hWnd, rect.left, rect.top, 
(PrefContext->Count * DIALOG_VOLUME_SIZE), rect.bottom - rect.top, TRUE);
           }
       }
     }
@@ -448,13 +496,26 @@ LoadDialogCtrls(
     PPREFERENCES_CONTEXT PrefContext)
 {
     HWND hDlgCtrl;
+    RECT statusRect;
 
     /* set dialog count to zero */
     PrefContext->Count = 0;
 
+    SetRectEmpty(&PrefContext->MixerWindow->rect);
+
     /* enumerate controls */
     SndMixerEnumConnections(PrefContext->MixerWindow->Mixer, 
PrefContext->SelectedLine, EnumConnectionsCallback, (PVOID)PrefContext);
 
+    if (PrefContext->MixerWindow->hStatusBar)
+    {
+        GetWindowRect(PrefContext->MixerWindow->hStatusBar, &statusRect);
+        PrefContext->MixerWindow->rect.bottom += (statusRect.bottom - 
statusRect.top);
+    }
+
+    /* now move the window */
+    AdjustWindowRect(&PrefContext->MixerWindow->rect, WS_DLGFRAME | WS_CAPTION 
| WS_MINIMIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE, 
TRUE);
+    SetWindowPos(PrefContext->MixerWindow->hWnd, HWND_TOP, 
PrefContext->MixerWindow->rect.left, PrefContext->MixerWindow->rect.top, 
PrefContext->MixerWindow->rect.right - PrefContext->MixerWindow->rect.left, 
PrefContext->MixerWindow->rect.bottom - PrefContext->MixerWindow->rect.top, 
SWP_NOMOVE | SWP_NOZORDER);
+
     /* get last line separator */
     hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, IDC_LINE_SEP * 
PrefContext->Count);
 
@@ -463,7 +524,6 @@ LoadDialogCtrls(
         /* hide last separator */
         ShowWindow(hDlgCtrl, SW_HIDE);
     }
-
 }
 
 VOID
diff --git a/base/applications/sndvol32/lang/bg-BG.rc 
b/base/applications/sndvol32/lang/bg-BG.rc
index 6ac13cd18e..2b09b3f943 100644
--- a/base/applications/sndvol32/lang/bg-BG.rc
+++ b/base/applications/sndvol32/lang/bg-BG.rc
@@ -59,6 +59,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Обща", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "За&глушаване", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/cs-CZ.rc 
b/base/applications/sndvol32/lang/cs-CZ.rc
index 1ac95bcda7..77f4fef0b9 100644
--- a/base/applications/sndvol32/lang/cs-CZ.rc
+++ b/base/applications/sndvol32/lang/cs-CZ.rc
@@ -61,6 +61,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Celková hlasitost", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Ztlumit", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/de-DE.rc 
b/base/applications/sndvol32/lang/de-DE.rc
index 4df44041f7..86520936a8 100644
--- a/base/applications/sndvol32/lang/de-DE.rc
+++ b/base/applications/sndvol32/lang/de-DE.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Stumm", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/el-GR.rc 
b/base/applications/sndvol32/lang/el-GR.rc
index 4c8e33ca03..3fb6485dc8 100644
--- a/base/applications/sndvol32/lang/el-GR.rc
+++ b/base/applications/sndvol32/lang/el-GR.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/en-US.rc 
b/base/applications/sndvol32/lang/en-US.rc
index 3a5e80fac6..1bd3703c40 100644
--- a/base/applications/sndvol32/lang/en-US.rc
+++ b/base/applications/sndvol32/lang/en-US.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/es-ES.rc 
b/base/applications/sndvol32/lang/es-ES.rc
index ef7a74eeaf..8672678eb7 100644
--- a/base/applications/sndvol32/lang/es-ES.rc
+++ b/base/applications/sndvol32/lang/es-ES.rc
@@ -58,6 +58,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Principal", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Silenciar", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/fr-FR.rc 
b/base/applications/sndvol32/lang/fr-FR.rc
index 7331e0ed92..a2fbf49aab 100644
--- a/base/applications/sndvol32/lang/fr-FR.rc
+++ b/base/applications/sndvol32/lang/fr-FR.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Volume principal", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Muet", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/he-IL.rc 
b/base/applications/sndvol32/lang/he-IL.rc
index 3779376bc7..6aa0e89c9f 100644
--- a/base/applications/sndvol32/lang/he-IL.rc
+++ b/base/applications/sndvol32/lang/he-IL.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "ראשי", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "השתק", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/hu-HU.rc 
b/base/applications/sndvol32/lang/hu-HU.rc
index 759ce74b3a..d89e4aea2b 100644
--- a/base/applications/sndvol32/lang/hu-HU.rc
+++ b/base/applications/sndvol32/lang/hu-HU.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/id-ID.rc 
b/base/applications/sndvol32/lang/id-ID.rc
index cc6327bcfc..81ca6a3603 100644
--- a/base/applications/sndvol32/lang/id-ID.rc
+++ b/base/applications/sndvol32/lang/id-ID.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/it-IT.rc 
b/base/applications/sndvol32/lang/it-IT.rc
index 3678b5bf0a..af90f32edb 100644
--- a/base/applications/sndvol32/lang/it-IT.rc
+++ b/base/applications/sndvol32/lang/it-IT.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Disattiva", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/ja-JP.rc 
b/base/applications/sndvol32/lang/ja-JP.rc
index 61a7b69e1a..8cbf97fae0 100644
--- a/base/applications/sndvol32/lang/ja-JP.rc
+++ b/base/applications/sndvol32/lang/ja-JP.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 9, "MS UI Gothic"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/ko-KR.rc 
b/base/applications/sndvol32/lang/ko-KR.rc
index 1abeb34f03..03c4976fa0 100644
--- a/base/applications/sndvol32/lang/ko-KR.rc
+++ b/base/applications/sndvol32/lang/ko-KR.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 9, "굴림"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/lt-LT.rc 
b/base/applications/sndvol32/lang/lt-LT.rc
index 7c44bf2eae..4ad2530513 100644
--- a/base/applications/sndvol32/lang/lt-LT.rc
+++ b/base/applications/sndvol32/lang/lt-LT.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/nl-NL.rc 
b/base/applications/sndvol32/lang/nl-NL.rc
index 18e0bb2889..f0de0b6a18 100644
--- a/base/applications/sndvol32/lang/nl-NL.rc
+++ b/base/applications/sndvol32/lang/nl-NL.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/no-NO.rc 
b/base/applications/sndvol32/lang/no-NO.rc
index ef4bde48b9..d34821f074 100644
--- a/base/applications/sndvol32/lang/no-NO.rc
+++ b/base/applications/sndvol32/lang/no-NO.rc
@@ -55,6 +55,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/pl-PL.rc 
b/base/applications/sndvol32/lang/pl-PL.rc
index c2c09123bc..93095e8eab 100644
--- a/base/applications/sndvol32/lang/pl-PL.rc
+++ b/base/applications/sndvol32/lang/pl-PL.rc
@@ -63,6 +63,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Kanał główny", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Wycisz", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/pt-BR.rc 
b/base/applications/sndvol32/lang/pt-BR.rc
index 146ffb6721..6e70068144 100644
--- a/base/applications/sndvol32/lang/pt-BR.rc
+++ b/base/applications/sndvol32/lang/pt-BR.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mudo", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/ro-RO.rc 
b/base/applications/sndvol32/lang/ro-RO.rc
index 17cf0379e3..12b1bd2243 100644
--- a/base/applications/sndvol32/lang/ro-RO.rc
+++ b/base/applications/sndvol32/lang/ro-RO.rc
@@ -56,6 +56,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Volum general", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "A&muțește tot", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/ru-RU.rc 
b/base/applications/sndvol32/lang/ru-RU.rc
index b9df68910a..5d5ffec888 100644
--- a/base/applications/sndvol32/lang/ru-RU.rc
+++ b/base/applications/sndvol32/lang/ru-RU.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Главная", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "В&ыкл. все", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/sk-SK.rc 
b/base/applications/sndvol32/lang/sk-SK.rc
index b58b95ddad..2737442928 100644
--- a/base/applications/sndvol32/lang/sk-SK.rc
+++ b/base/applications/sndvol32/lang/sk-SK.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/sq-AL.rc 
b/base/applications/sndvol32/lang/sq-AL.rc
index ac94cdb36d..8d94ed8bc2 100644
--- a/base/applications/sndvol32/lang/sq-AL.rc
+++ b/base/applications/sndvol32/lang/sq-AL.rc
@@ -59,6 +59,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "Heshtur", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/sv-SE.rc 
b/base/applications/sndvol32/lang/sv-SE.rc
index 1695b69b1f..3b58c81f6a 100644
--- a/base/applications/sndvol32/lang/sv-SE.rc
+++ b/base/applications/sndvol32/lang/sv-SE.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Huvud", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Tyst", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/th-TH.rc 
b/base/applications/sndvol32/lang/th-TH.rc
index b8ab88c434..686e217751 100644
--- a/base/applications/sndvol32/lang/th-TH.rc
+++ b/base/applications/sndvol32/lang/th-TH.rc
@@ -63,6 +63,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Master", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Mute", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/tr-TR.rc 
b/base/applications/sndvol32/lang/tr-TR.rc
index ae98afc4cb..b159804d90 100644
--- a/base/applications/sndvol32/lang/tr-TR.rc
+++ b/base/applications/sndvol32/lang/tr-TR.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Ana", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "S&essiz", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/uk-UA.rc 
b/base/applications/sndvol32/lang/uk-UA.rc
index 19270442c7..75d65f405b 100644
--- a/base/applications/sndvol32/lang/uk-UA.rc
+++ b/base/applications/sndvol32/lang/uk-UA.rc
@@ -63,6 +63,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CTEXT "Головна", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "&Тиша", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/zh-CN.rc 
b/base/applications/sndvol32/lang/zh-CN.rc
index d4cea71d42..d313046fa8 100644
--- a/base/applications/sndvol32/lang/zh-CN.rc
+++ b/base/applications/sndvol32/lang/zh-CN.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 9, "宋体"
+BEGIN
+    CTEXT "主要", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "静音(&M)", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/lang/zh-TW.rc 
b/base/applications/sndvol32/lang/zh-TW.rc
index d70bbd0a3e..0b4d765040 100644
--- a/base/applications/sndvol32/lang/zh-TW.rc
+++ b/base/applications/sndvol32/lang/zh-TW.rc
@@ -57,6 +57,17 @@ BEGIN
     CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
130, 7, 1, 200
 END
 
+IDD_SMALL_MASTER DIALOG 0, 0, 45, 100
+STYLE WS_POPUP | WS_BORDER
+FONT 9, "新細明體"
+BEGIN
+    CTEXT "主要", IDC_LINE_NAME, 3, 3, 39, 8
+    CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | 
TBS_AUTOTICKS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2, 12, 39, 18
+    CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | 
TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 30, 30, 50
+    AUTOCHECKBOX "靜音(&M)", IDC_LINE_SWITCH, 1, 85, 44, 10
+    CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 
45, 1, 1, 100
+END
+
 IDD_TRAY_CTRL DIALOGEX 0, 0, 50, 80
 STYLE DS_MODALFRAME | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
diff --git a/base/applications/sndvol32/resources.h 
b/base/applications/sndvol32/resources.h
index 80f82e7b1f..69aab744e3 100644
--- a/base/applications/sndvol32/resources.h
+++ b/base/applications/sndvol32/resources.h
@@ -26,6 +26,7 @@
 #define IDS_SNDVOL32       100
 #define IDS_NOMIXERDEVICES 101
 
-#define IDD_VOLUME_CTRL 200
-#define IDD_PREFERENCES 201
-#define IDD_TRAY_CTRL   202
+#define IDD_VOLUME_CTRL  200
+#define IDD_SMALL_MASTER 202
+#define IDD_TRAY_CTRL    204
+#define IDD_PREFERENCES  205
diff --git a/base/applications/sndvol32/sndvol32.c 
b/base/applications/sndvol32/sndvol32.c
index 7531518d64..29ae69aa4f 100644
--- a/base/applications/sndvol32/sndvol32.c
+++ b/base/applications/sndvol32/sndvol32.c
@@ -820,7 +820,8 @@ MainWindowProc(HWND hwnd,
                         }
 
                         /* destroy old status bar */
-                        DestroyWindow(MixerWindow->hStatusBar);
+                        if (MixerWindow->Mode == NORMAL_MODE)
+                            DestroyWindow(MixerWindow->hStatusBar);
 
                         /* update details */
                         Preferences.SelectedLine = Pref.SelectedLine;
@@ -835,18 +836,20 @@ MainWindowProc(HWND hwnd,
                         RebuildMixerWindowControls(&Preferences);
 
                         /* create status window */
-                        MixerWindow->hStatusBar = 
CreateStatusWindow(WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
-                                                                     NULL,
-                                                                     hwnd,
-                                                                     0);
-
-                        /* set status bar */
-                        if (MixerWindow->hStatusBar)
+                        if (MixerWindow->Mode == NORMAL_MODE)
                         {
-                            SendMessage(MixerWindow->hStatusBar,
-                                WM_SETTEXT,
-                                0,
-                                (LPARAM)szProduct);
+                            MixerWindow->hStatusBar = 
CreateStatusWindow(WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
+                                                                         NULL,
+                                                                         hwnd,
+                                                                         0);
+                            if (MixerWindow->hStatusBar)
+                            {
+                                /* Set status bar */
+                                SendMessage(MixerWindow->hStatusBar,
+                                    WM_SETTEXT,
+                                    0,
+                                    (LPARAM)szProduct);
+                            }
                         }
                     }
                     break;
@@ -999,16 +1002,19 @@ MainWindowProc(HWND hwnd,
                 }
 
                 /* create status window */
-                MixerWindow->hStatusBar = CreateStatusWindow(WS_VISIBLE | 
WS_CHILD | WS_CLIPSIBLINGS,
-                                                             NULL,
-                                                             hwnd,
-                                                             0);
-                if (MixerWindow->hStatusBar)
+                if (MixerWindow->Mode == NORMAL_MODE)
                 {
-                    SendMessage(MixerWindow->hStatusBar,
-                                WM_SETTEXT,
-                                0,
-                                (LPARAM)szProduct);
+                    MixerWindow->hStatusBar = CreateStatusWindow(WS_VISIBLE | 
WS_CHILD | WS_CLIPSIBLINGS,
+                                                                 NULL,
+                                                                 hwnd,
+                                                                 0);
+                    if (MixerWindow->hStatusBar)
+                    {
+                        SendMessage(MixerWindow->hStatusBar,
+                                    WM_SETTEXT,
+                                    0,
+                                   (LPARAM)szProduct);
+                    }
                 }
             }
             break;
@@ -1024,6 +1030,8 @@ MainWindowProc(HWND hwnd,
                 {
                     SndMixerDestroy(MixerWindow->Mixer);
                 }
+                if (MixerWindow->hFont)
+                    DeleteObject(MixerWindow->hFont);
                 HeapFree(hAppHeap, 0, MixerWindow);
             }
             break;
@@ -1080,7 +1088,9 @@ UnregisterApplicationClasses(VOID)
 }
 
 static HWND
-CreateApplicationWindow(VOID)
+CreateApplicationWindow(
+    WINDOW_MODE WindowMode,
+    BOOL bRecord)
 {
     HWND hWnd;
 
@@ -1092,6 +1102,9 @@ CreateApplicationWindow(VOID)
         return NULL;
     }
 
+    MixerWindow->Mode = WindowMode;
+
+
     if (mixerGetNumDevs() > 0)
     {
         hWnd = CreateWindowEx(WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT,
@@ -1139,10 +1152,14 @@ CreateApplicationWindow(VOID)
 static
 BOOL
 HandleCommandLine(LPTSTR cmdline,
-                  PBOOL pTray)
+                  PWINDOW_MODE pMode,
+                  PBOOL pRecord)
 {
     TCHAR option;
 
+    *pRecord = FALSE;
+    *pMode = SMALL_MODE;
+
     while (*cmdline == _T(' ') || *cmdline == _T('-') || *cmdline == _T('/'))
     {
         if (*cmdline++ == _T(' '))
@@ -1162,25 +1179,27 @@ HandleCommandLine(LPTSTR cmdline,
 
             case 'n': /* Normal size */
             case 'N':
-                *pTray = FALSE;
+                *pMode = NORMAL_MODE;
                 break;
 
             case 's': /* Small size */
             case 'S':
-                *pTray = FALSE;
+                *pMode = SMALL_MODE;
                 break;
 
             case 't': /* Tray size */
             case 'T':
-                *pTray = TRUE;
+                *pMode = TRAY_MODE;
                 break;
 
             case 'p': /* Play mode */
             case 'P':
+                *pRecord = FALSE;
                 break;
 
             case 'r': /* Record mode */
             case 'R':
+                *pRecord = TRUE;
                 break;
 
             default:
@@ -1200,7 +1219,8 @@ _tWinMain(HINSTANCE hInstance,
     MSG Msg;
     int Ret = 1;
     INITCOMMONCONTROLSEX Controls;
-    BOOL bTray = FALSE;
+    WINDOW_MODE WindowMode = SMALL_MODE;
+    BOOL bRecord = FALSE;
 
     UNREFERENCED_PARAMETER(hPrevInstance);
     UNREFERENCED_PARAMETER(nCmdShow);
@@ -1208,7 +1228,7 @@ _tWinMain(HINSTANCE hInstance,
     hAppInstance = hInstance;
     hAppHeap = GetProcessHeap();
 
-    HandleCommandLine(lpszCmdLine, &bTray);
+    HandleCommandLine(lpszCmdLine, &WindowMode, &bRecord);
 
     if (InitAppConfig())
     {
@@ -1225,7 +1245,7 @@ _tWinMain(HINSTANCE hInstance,
 
         InitCommonControlsEx(&Controls);
 
-        if (bTray)
+        if (WindowMode == TRAY_MODE)
         {
             DialogBoxParam(hAppInstance,
                            MAKEINTRESOURCE(IDD_TRAY_CTRL),
@@ -1237,7 +1257,7 @@ _tWinMain(HINSTANCE hInstance,
         {
             if (RegisterApplicationClasses())
             {
-                hMainWnd = CreateApplicationWindow();
+                hMainWnd = CreateApplicationWindow(WindowMode, bRecord);
                 if (hMainWnd != NULL)
                 {
                     BOOL bRet;
diff --git a/base/applications/sndvol32/sndvol32.h 
b/base/applications/sndvol32/sndvol32.h
index f98f23d493..640ac20c8f 100644
--- a/base/applications/sndvol32/sndvol32.h
+++ b/base/applications/sndvol32/sndvol32.h
@@ -5,6 +5,7 @@
 
 #include <windef.h>
 #include <winbase.h>
+#include <wingdi.h>
 #include <winuser.h>
 #include <mmsystem.h>
 #include <commctrl.h>
@@ -13,6 +14,13 @@
 
 #include "resources.h"
 
+typedef enum _WINDOW_MODE
+{
+    NORMAL_MODE,
+    SMALL_MODE,
+    TRAY_MODE
+} WINDOW_MODE, *PWINDOW_MODE;
+
 typedef struct _MIXER_WINDOW
 {
   HWND hWnd;
@@ -20,9 +28,11 @@ typedef struct _MIXER_WINDOW
   struct _SND_MIXER *Mixer;
   UINT SelectedLine;
   UINT WindowCount;
-  HWND * Window;
-
+  HWND *Window;
 
+    WINDOW_MODE Mode;
+    RECT rect;
+    HFONT hFont;
 } MIXER_WINDOW, *PMIXER_WINDOW;
 
 extern HINSTANCE hAppInstance;

Reply via email to