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