1 #ifndef __SNDVOL32_H 2 #define __SNDVOL32_H 3 4 #include <stdarg.h> 5 6 #include <windef.h> 7 #include <winbase.h> 8 #include <wingdi.h> 9 #include <winuser.h> 10 #include <mmsystem.h> 11 #include <commctrl.h> 12 #include <tchar.h> 13 #include <assert.h> 14 15 #include "resources.h" 16 17 #define VOLUME_STEPS 500 18 #define VOLUME_TICKS 5 19 #define VOLUME_PAGE_SIZE 100 20 #define BALANCE_STEPS 64 21 #define BALANCE_TICKS 1 22 #define BALANCE_PAGE_SIZE 12 23 24 typedef enum _WINDOW_MODE 25 { 26 NORMAL_MODE, 27 SMALL_MODE, 28 TRAY_MODE 29 } WINDOW_MODE, *PWINDOW_MODE; 30 31 typedef struct _MIXER_WINDOW 32 { 33 HWND hWnd; 34 HWND hStatusBar; 35 struct _SND_MIXER *Mixer; 36 UINT SelectedLine; 37 UINT WindowCount; 38 HWND *Window; 39 40 WINDOW_MODE Mode; 41 UINT MixerId; 42 RECT rect; 43 HFONT hFont; 44 } MIXER_WINDOW, *PMIXER_WINDOW; 45 46 extern HINSTANCE hAppInstance; 47 extern ATOM MainWindowClass; 48 extern HWND hMainWnd; 49 extern HANDLE hAppHeap; 50 51 #define SZ_APP_CLASS TEXT("Volume Control") 52 53 ULONG DbgPrint(PCH , ...); 54 #define DPRINT DbgPrint("SNDVOL32: %s:%i: ", __FILE__, __LINE__); DbgPrint 55 56 57 /* 58 * MIXER 59 */ 60 61 typedef struct _SND_MIXER_CONNECTION 62 { 63 struct _SND_MIXER_CONNECTION *Next; 64 MIXERLINE Info; 65 LPMIXERCONTROL Controls; 66 UINT DisplayControls; 67 } SND_MIXER_CONNECTION, *PSND_MIXER_CONNECTION; 68 69 70 typedef struct _SND_MIXER_DESTINATION 71 { 72 struct _SND_MIXER_DESTINATION *Next; 73 MIXERLINE Info; 74 LPMIXERCONTROL Controls; 75 UINT DisplayControls; 76 PSND_MIXER_CONNECTION Connections; 77 } SND_MIXER_DESTINATION, *PSND_MIXER_DESTINATION; 78 79 typedef struct _SND_MIXER 80 { 81 UINT MixersCount; 82 HWND hWndNotification; 83 UINT MixerId; 84 HMIXER hmx; 85 MIXERCAPS Caps; 86 PSND_MIXER_DESTINATION Lines; 87 } SND_MIXER, *PSND_MIXER; 88 89 typedef struct _PREFERENCES_CONTEXT 90 { 91 PMIXER_WINDOW MixerWindow; 92 PSND_MIXER Mixer; 93 HWND hwndDlg; 94 95 UINT Selected; 96 DWORD SelectedLine; 97 DWORD PlaybackID; 98 DWORD RecordingID; 99 UINT OtherLines; 100 TCHAR DeviceName[128]; 101 102 DWORD Count; 103 DWORD tmp; 104 } PREFERENCES_CONTEXT, *PPREFERENCES_CONTEXT; 105 106 typedef struct 107 { 108 WCHAR LineName[MIXER_LONG_NAME_CHARS]; 109 UINT SliderPos; 110 BOOL bVertical; 111 BOOL bSwitch; 112 113 }SET_VOLUME_CONTEXT, *PSET_VOLUME_CONTEXT; 114 115 /* NOTE: do NOT modify SNDVOL_REG_LINESTATE for binary compatibility with XP! */ 116 typedef struct _SNDVOL_REG_LINESTATE 117 { 118 DWORD Flags; 119 WCHAR LineName[MIXER_LONG_NAME_CHARS]; 120 } SNDVOL_REG_LINESTATE, *PSNDVOL_REG_LINESTATE; 121 122 123 typedef BOOL (CALLBACK *PFNSNDMIXENUMLINES)(PSND_MIXER Mixer, LPMIXERLINE Line, UINT DisplayControls, PVOID Context); 124 typedef BOOL (CALLBACK *PFNSNDMIXENUMCONNECTIONS)(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context); 125 typedef BOOL (CALLBACK *PFNSNDMIXENUMPRODUCTS)(PSND_MIXER Mixer, UINT Id, LPCTSTR ProductName, PVOID Context); 126 127 PSND_MIXER SndMixerCreate(HWND hWndNotification, UINT MixerId); 128 VOID SndMixerDestroy(PSND_MIXER Mixer); 129 VOID SndMixerClose(PSND_MIXER Mixer); 130 BOOL SndMixerSelect(PSND_MIXER Mixer, UINT MixerId); 131 UINT SndMixerGetSelection(PSND_MIXER Mixer); 132 INT SndMixerSetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cbDetails, LPVOID paDetails); 133 INT SndMixerGetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cbDetails, LPVOID paDetails); 134 INT SndMixerGetProductName(PSND_MIXER Mixer, LPTSTR lpBuffer, UINT uSize); 135 INT SndMixerGetLineName(PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName); 136 BOOL SndMixerEnumProducts(PSND_MIXER Mixer, PFNSNDMIXENUMPRODUCTS EnumProc, PVOID Context); 137 INT SndMixerGetDestinationCount(PSND_MIXER Mixer); 138 BOOL SndMixerEnumLines(PSND_MIXER Mixer, PFNSNDMIXENUMLINES EnumProc, PVOID Context); 139 BOOL SndMixerEnumConnections(PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context); 140 BOOL SndMixerIsDisplayControl(PSND_MIXER Mixer, LPMIXERCONTROL Control); 141 BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls); 142 143 /* 144 * dialog.c 145 */ 146 VOID LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext); 147 VOID UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, DWORD dwControlID, DWORD DialogID, DWORD Position); 148 VOID UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, LONG fValue); 149 150 /* 151 * MISC 152 */ 153 154 extern HKEY hAppSettingsKey; 155 156 BOOL 157 InitAppConfig(VOID); 158 159 VOID 160 CloseAppConfig(VOID); 161 162 INT 163 AllocAndLoadString(OUT LPWSTR *lpTarget, 164 IN HINSTANCE hInst, 165 IN UINT uID); 166 167 DWORD 168 LoadAndFormatString(IN HINSTANCE hInstance, 169 IN UINT uID, 170 OUT LPWSTR *lpTarget, 171 ...); 172 173 BOOL 174 ReadLineConfig(IN LPTSTR szDeviceName, 175 IN LPTSTR szLineName, 176 IN LPTSTR szControlName, 177 OUT DWORD *Flags); 178 179 BOOL 180 WriteLineConfig(IN LPTSTR szDeviceName, 181 IN LPTSTR szLineName, 182 IN PSNDVOL_REG_LINESTATE LineState, 183 IN DWORD cbSize); 184 185 /* tray.c */ 186 187 INT_PTR 188 CALLBACK 189 TrayDlgProc( 190 HWND hwndDlg, 191 UINT uMsg, 192 WPARAM wParam, 193 LPARAM lParam); 194 195 #endif /* __SNDVOL32_H */ 196