ReactOS  0.4.12-dev-685-gf36cbf7
dialog.c File Reference
#include "sndvol32.h"
Include dependency graph for dialog.c:

Go to the source code of this file.

Functions

VOID ConvertRect (LPRECT lpRect, UINT xBaseUnit, UINT yBaseUnit)
 
LPVOID LoadDialogResource (IN HMODULE hModule, IN LPCWSTR ResourceName, OUT LPDWORD ResourceLength)
 
LPWORD AddDialogControl (IN HWND hwndDialog, IN HWND *OutWnd, IN LPRECT DialogOffset, IN PDLGITEMTEMPLATE DialogItem, IN DWORD DialogIdMultiplier, IN HFONT hFont, UINT xBaseUnit, UINT yBaseUnit)
 
VOID LoadDialogControls (IN PMIXER_WINDOW MixerWindow, LPRECT DialogOffset, WORD ItemCount, PDLGITEMTEMPLATE DialogItem, DWORD DialogIdMultiplier, UINT xBaseUnit, UINT yBaseUnit)
 
VOID LoadDialog (IN HMODULE hModule, IN PMIXER_WINDOW MixerWindow, IN LPCWSTR DialogResId, IN DWORD Index)
 
BOOL CALLBACK EnumConnectionsCallback (PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context)
 
VOID LoadDialogCtrls (PPREFERENCES_CONTEXT PrefContext)
 
VOID UpdateDialogLineSwitchControl (PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, LONG fValue)
 
VOID UpdateDialogLineSliderControl (PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, DWORD dwDialogID, DWORD Position)
 

Function Documentation

◆ AddDialogControl()

LPWORD AddDialogControl ( IN HWND  hwndDialog,
IN HWND OutWnd,
IN LPRECT  DialogOffset,
IN PDLGITEMTEMPLATE  DialogItem,
IN DWORD  DialogIdMultiplier,
IN HFONT  hFont,
UINT  xBaseUnit,
UINT  yBaseUnit 
)

Definition at line 67 of file dialog.c.

76 {
77  RECT rect;
78  LPWORD Offset;
79  LPWSTR ClassName, WindowName = NULL;
80  HWND hwnd;
81  DWORD wID;
82  INT nSteps, i;
83 
84  /* initialize client rectangle */
85  rect.left = DialogItem->x;
86  rect.top = DialogItem->y;
87  rect.right = DialogItem->x + DialogItem->cx;
88  rect.bottom = DialogItem->y + DialogItem->cy;
89 
90  /* Convert Dialog units to pixes */
91  ConvertRect(&rect, xBaseUnit, yBaseUnit);
92 
93  rect.left += DialogOffset->left;
94  rect.right += DialogOffset->left;
95  rect.top += DialogOffset->top;
96  rect.bottom += DialogOffset->top;
97 
98  /* move offset after dialog item */
99  Offset = (LPWORD)(DialogItem + 1);
100 
101  if (*Offset == 0xFFFF)
102  {
103  /* class is encoded as type */
104  Offset++;
105 
106  /* get control type */
107  switch(*Offset)
108  {
109  case 0x80:
110  ClassName = L"button";
111  WindowName = (LPWSTR)(Offset + 1);
112  break ;
113  case 0x82:
114  ClassName = L"static";
115  WindowName = (LPWSTR)(Offset + 1);
116  break;
117  default:
118  /* FIXME */
119  assert(0);
120  ClassName = NULL;
121  }
122  }
123  else
124  {
125  /* class name is encoded as string */
126  ClassName = (LPWSTR)Offset;
127 
128  /* move offset to the end of class string */
129  Offset += wcslen(ClassName);
130 
131  /* get window name */
132  WindowName = (LPWSTR)(Offset + 1);
133  }
134 
135  /* move offset past class type/string */
136  Offset++;
137 
138  if (DialogItem->id == MAXWORD)
139  {
140  /* id is not important */
141  wID = DialogItem->id;
142  }
143  else
144  {
145  /* calculate id */
146  wID = DialogItem->id * (DialogIdMultiplier + 1);
147 
148  }
149 
150  /* now create the window */
151  hwnd = CreateWindowExW(DialogItem->dwExtendedStyle,
152  ClassName,
153  WindowName,
154  DialogItem->style,
155  rect.left,
156  rect.top,
157  rect.right - rect.left,
158  rect.bottom - rect.top,
159  hwndDialog,
160  UlongToPtr(wID),
161  hAppInstance,
162  NULL);
163 
164  /* sanity check */
165  assert(hwnd);
166 
167  /* store window */
168  *OutWnd = hwnd;
169 
170  /* check if this the track bar */
171  if (!wcsicmp(ClassName, L"msctls_trackbar32"))
172  {
173  if (DialogItem->style & TBS_VERT)
174  {
175  /* Vertical trackbar: Volume */
176 
177  /* set up range */
179 
180  /* set up page size */
182 
183  /* set position */
185 
186  /* Calculate and set ticks */
187  nSteps = (VOLUME_MAX / (VOLUME_TICKS + 1));
188  if (VOLUME_MAX % (VOLUME_TICKS + 1) != 0)
189  nSteps++;
190  for (i = nSteps; i < VOLUME_MAX; i += nSteps)
192  }
193  else
194  {
195  /* Horizontal trackbar: Balance */
196 
197  /* set up range */
199 
200  /* set up page size */
202 
203  /* set position */
205 
206  /* Calculate and set ticks */
207  nSteps = (BALANCE_STEPS / (BALANCE_TICKS + 1));
208  if (BALANCE_STEPS % (BALANCE_TICKS + 1) != 0)
209  nSteps++;
210  for (i = nSteps; i < BALANCE_STEPS; i += nSteps)
212  }
213  }
214  else if (!wcsicmp(ClassName, L"static") || !wcsicmp(ClassName, L"button"))
215  {
216  /* set font */
218  }
219 
220  //ShowWindow(hwnd, SW_SHOWNORMAL);
221 
222  if (WindowName != NULL)
223  {
224  /* move offset past window name */
225  Offset += wcslen(WindowName) + 1;
226  }
227 
228  /* check if there is additional data */
229  if (*Offset == 0)
230  {
231  /* no additional data */
232  Offset++;
233  }
234  else
235  {
236  /* FIXME: Determine whether this should be "Offset += 1 + *Offset" to explicitly skip the data count too. */
237  /* skip past additional data */
238  Offset += *Offset;
239  }
240 
241  /* make sure next template is word-aligned */
242  Offset = (LPWORD)(((ULONG_PTR)Offset + 3) & ~3);
243 
244  /* done */
245  return Offset;
246 }
#define VOLUME_TICKS
Definition: sndvol32.h:19
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define TRUE
Definition: types.h:120
#define MAXWORD
#define TBM_SETRANGE
Definition: commctrl.h:2009
#define assert(x)
Definition: debug.h:53
#define TBM_SETPOS
Definition: commctrl.h:2008
#define VOLUME_MAX
Definition: sndvol32.h:18
int32_t INT
Definition: typedefs.h:56
& rect
Definition: startmenu.cpp:1413
HFONT hFont
Definition: main.c:53
UINT_PTR WPARAM
Definition: windef.h:207
uint32_t ULONG_PTR
Definition: typedefs.h:63
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
LONG_PTR LPARAM
Definition: windef.h:208
#define MAKELONG(a, b)
Definition: typedefs.h:248
#define TBM_SETPAGESIZE
Definition: commctrl.h:2023
smooth NULL
Definition: ftsmooth.c:416
#define BALANCE_PAGE_SIZE
Definition: sndvol32.h:26
#define BALANCE_TICKS
Definition: sndvol32.h:25
#define UlongToPtr(ul)
Definition: basetsd.h:98
unsigned long DWORD
Definition: ntddk_ex.h:95
#define TBS_VERT
Definition: commctrl.h:1988
static const WCHAR L[]
Definition: oid.c:1250
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define TBM_SETTIC
Definition: commctrl.h:2007
#define wcsicmp
Definition: string.h:1152
#define BALANCE_STEPS
Definition: sndvol32.h:24
uint16_t * LPWORD
Definition: typedefs.h:54
static HWND hwnd[MAXHWNDS]
Definition: dialog.c:47
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define VOLUME_MIN
Definition: sndvol32.h:17
#define WM_SETFONT
Definition: winuser.h:1632
#define SendMessage
Definition: winuser.h:5709
VOID ConvertRect(LPRECT lpRect, UINT xBaseUnit, UINT yBaseUnit)
Definition: dialog.c:12
#define VOLUME_PAGE_SIZE
Definition: sndvol32.h:20
WCHAR * LPWSTR
Definition: xmlstorage.h:184
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HINSTANCE hAppInstance
Definition: mmc.c:23
HWND hwndDialog
Definition: powershemes.c:43

Referenced by LoadDialogControls().

◆ ConvertRect()

VOID ConvertRect ( LPRECT  lpRect,
UINT  xBaseUnit,
UINT  yBaseUnit 
)

Definition at line 12 of file dialog.c.

13 {
14  lpRect->left = MulDiv(lpRect->left, xBaseUnit, 4);
15  lpRect->right = MulDiv(lpRect->right, xBaseUnit, 4);
16  lpRect->top = MulDiv(lpRect->top, yBaseUnit, 8);
17  lpRect->bottom = MulDiv(lpRect->bottom, yBaseUnit, 8);
18 }
LONG top
Definition: windef.h:292
LONG left
Definition: windef.h:291
LONG right
Definition: windef.h:293
LONG bottom
Definition: windef.h:294
#define MulDiv(x, y, z)
Definition: gdifloat.h:86

Referenced by AddDialogControl(), and LoadDialog().

◆ EnumConnectionsCallback()

BOOL CALLBACK EnumConnectionsCallback ( PSND_MIXER  Mixer,
DWORD  LineID,
LPMIXERLINE  Line,
PVOID  Context 
)

Definition at line 405 of file dialog.c.

410 {
411  WCHAR LineName[MIXER_LONG_NAME_CHARS];
412  DWORD Flags;
413  DWORD wID;
414  UINT ControlCount = 0, Index;
416  HWND hDlgCtrl;
417  PMIXERCONTROLDETAILS_UNSIGNED pVolumeDetails = NULL;
419 
420  if (Line->cControls == 0)
421  return TRUE;
422 
423  /* get line name */
424  if (SndMixerGetLineName(PrefContext->MixerWindow->Mixer, PrefContext->SelectedLine, LineName, MIXER_LONG_NAME_CHARS, TRUE) == -1)
425  {
426  /* failed to get line name */
427  LineName[0] = L'\0';
428  }
429 
430  pVolumeDetails = HeapAlloc(GetProcessHeap(),
431  0,
432  Line->cChannels * sizeof(MIXERCONTROLDETAILS_UNSIGNED));
433  if (pVolumeDetails == NULL)
434  goto done;
435 
436  /* check if line is found in registry settings */
437  if (ReadLineConfig(PrefContext->DeviceName,
438  LineName,
439  Line->szName,
440  &Flags))
441  {
442  /* is it selected */
443  if (Flags != 0x4)
444  {
445  int dlgId;
446 
447  if ((Line->dwComponentType == MIXERLINE_COMPONENTTYPE_DST_SPEAKERS) ||
448  (Line->dwComponentType == MIXERLINE_COMPONENTTYPE_DST_HEADPHONES))
449  dlgId = (PrefContext->MixerWindow->Mode == SMALL_MODE) ? IDD_SMALL_MASTER : IDD_NORMAL_MASTER;
450  else
451  dlgId = (PrefContext->MixerWindow->Mode == SMALL_MODE) ? IDD_SMALL_LINE : IDD_NORMAL_LINE;
452 
453  /* load dialog resource */
454  LoadDialog(hAppInstance, PrefContext->MixerWindow, MAKEINTRESOURCE(dlgId), PrefContext->Count);
455 
456  /* get id */
457  wID = (PrefContext->Count + 1) * IDC_LINE_NAME;
458 
459  /* set line name */
460  SetDlgItemTextW(PrefContext->MixerWindow->hWnd, wID, Line->szName);
461 
462  /* query controls */
463  if (SndMixerQueryControls(Mixer, &ControlCount, Line, &Control) != FALSE)
464  {
465  /* now go through all controls and update their states */
466  for (Index = 0; Index < Line->cControls; Index++)
467  {
469  {
471 
472  /* get volume control details */
473  if (SndMixerGetVolumeControlDetails(Mixer, Control[Index].dwControlID, 1, sizeof(MIXERCONTROLDETAILS_BOOLEAN), (LPVOID)&Details) != -1)
474  {
475  /* update dialog control */
476  wID = (PrefContext->Count + 1) * IDC_LINE_SWITCH;
477 
478  /* get dialog control */
479  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
480 
481  if (hDlgCtrl != NULL)
482  {
483  /* check state */
484  if (SendMessageW(hDlgCtrl, BM_GETCHECK, 0, 0) != Details.fValue)
485  {
486  /* update control state */
487  SendMessageW(hDlgCtrl, BM_SETCHECK, (WPARAM)Details.fValue, 0);
488  }
489  }
490  }
491  }
493  {
494  /* get volume control details */
495  if (SndMixerGetVolumeControlDetails(Mixer, Control[Index].dwControlID, Line->cChannels, sizeof(MIXERCONTROLDETAILS_UNSIGNED), (LPVOID)pVolumeDetails) != -1)
496  {
497  /* update dialog control */
498  DWORD volumePosition, volumeStep, maxVolume, i;
499  DWORD balancePosition, balanceStep;
500 
501  volumeStep = (Control[Index].Bounds.dwMaximum - Control[Index].Bounds.dwMinimum) / (VOLUME_MAX - VOLUME_MIN);
502 
503  maxVolume = 0;
504  for (i = 0; i < Line->cChannels; i++)
505  {
506  if (pVolumeDetails[i].dwValue > maxVolume)
507  maxVolume = pVolumeDetails[i].dwValue;
508  }
509 
510  volumePosition = (maxVolume - Control[Index].Bounds.dwMinimum) / volumeStep;
511 
512  if (Line->cChannels == 1)
513  {
514  balancePosition = BALANCE_CENTER;
515  }
516  else if (Line->cChannels == 2)
517  {
518  if (pVolumeDetails[0].dwValue == pVolumeDetails[1].dwValue)
519  {
520  balancePosition = BALANCE_CENTER;
521  }
522  else if (pVolumeDetails[0].dwValue == Control[Index].Bounds.dwMinimum)
523  {
524  balancePosition = BALANCE_RIGHT;
525  }
526  else if (pVolumeDetails[1].dwValue == Control[Index].Bounds.dwMinimum)
527  {
528  balancePosition = BALANCE_LEFT;
529  }
530  else
531  {
532  balanceStep = (maxVolume - Control[Index].Bounds.dwMinimum) / (BALANCE_STEPS / 2);
533 
534  if (pVolumeDetails[0].dwValue < pVolumeDetails[1].dwValue)
535  {
536  balancePosition = (pVolumeDetails[0].dwValue - Control[Index].Bounds.dwMinimum) / balanceStep;
537  balancePosition = BALANCE_RIGHT - balancePosition;
538  }
539  else if (pVolumeDetails[1].dwValue < pVolumeDetails[0].dwValue)
540  {
541  balancePosition = (pVolumeDetails[1].dwValue - Control[Index].Bounds.dwMinimum) / balanceStep;
542  balancePosition = BALANCE_LEFT + balancePosition;
543  }
544  }
545  }
546 
547  /* Set the volume trackbar */
548  wID = (PrefContext->Count + 1) * IDC_LINE_SLIDER_VERT;
549 
550  /* get dialog control */
551  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
552 
553  if (hDlgCtrl != NULL)
554  {
555  /* check state */
556  LRESULT OldPosition = SendMessageW(hDlgCtrl, TBM_GETPOS, 0, 0);
557 
558  if (OldPosition != (VOLUME_MAX - volumePosition))
559  {
560  /* update control state */
561  SendMessageW(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, VOLUME_MAX - volumePosition);
562  }
563  }
564 
565  if (Line->cChannels == 1)
566  {
567  /* Disable the balance trackbar for mono channels */
568  wID = (PrefContext->Count + 1) * IDC_LINE_SLIDER_HORZ;
569 
570  /* get dialog control */
571  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
572  if (hDlgCtrl != NULL)
573  {
574  EnableWindow(hDlgCtrl, FALSE);
575  }
576  }
577  else if (Line->cChannels == 2)
578  {
579  /* Set the balance trackbar */
580  wID = (PrefContext->Count + 1) * IDC_LINE_SLIDER_HORZ;
581 
582  /* get dialog control */
583  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
584 
585  if (hDlgCtrl != NULL)
586  {
587  /* check state */
588  LRESULT OldPosition = SendMessageW(hDlgCtrl, TBM_GETPOS, 0, 0);
589 
590  if (OldPosition != balancePosition)
591  {
592  /* update control state */
593  SendMessageW(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, balancePosition);
594  }
595  }
596  }
597  }
598  }
599  }
600 
601  /* free controls */
603  }
604 
605  /* increment dialog count */
606  PrefContext->Count++;
607  }
608  }
609 
610 done:
611  /* Free the volume details */
612  if (pVolumeDetails)
613  HeapFree(GetProcessHeap(), 0, pVolumeDetails);
614 
615  return TRUE;
616 }
#define IDC_LINE_SLIDER_VERT
Definition: resources.h:25
#define MAKEINTRESOURCE
Definition: winuser.h:591
BOOL ReadLineConfig(IN LPTSTR szDeviceName, IN LPTSTR szLineName, IN LPTSTR szControlName, OUT DWORD *Flags)
Definition: misc.c:197
#define TRUE
Definition: types.h:120
#define IDD_NORMAL_LINE
Definition: resources.h:32
INT SndMixerGetLineName(PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName)
Definition: mixer.c:390
__wchar_t WCHAR
Definition: xmlstorage.h:180
struct _PREFERENCES_CONTEXT * PPREFERENCES_CONTEXT
#define IDD_SMALL_MASTER
Definition: resources.h:33
#define BALANCE_LEFT
Definition: sndvol32.h:21
#define IDD_NORMAL_MASTER
Definition: resources.h:31
#define TBM_SETPOS
Definition: commctrl.h:2008
#define VOLUME_MAX
Definition: sndvol32.h:18
#define MIXERCONTROL_CT_CLASS_MASK
Definition: mmsystem.h:353
UINT_PTR WPARAM
Definition: windef.h:207
#define BALANCE_CENTER
Definition: sndvol32.h:22
BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls)
Definition: mixer.c:112
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MIXERCONTROL_CT_CLASS_SWITCH
Definition: mmsystem.h:356
#define BALANCE_RIGHT
Definition: sndvol32.h:23
#define TBM_GETPOS
Definition: commctrl.h:2003
struct _SND_MIXER * Mixer
Definition: sndvol32.h:39
#define IDC_LINE_NAME
Definition: resources.h:22
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString)
Definition: dialog.c:2748
#define BM_GETCHECK
Definition: winuser.h:1879
VOID LoadDialog(IN HMODULE hModule, IN PMIXER_WINDOW MixerWindow, IN LPCWSTR DialogResId, IN DWORD Index)
Definition: dialog.c:292
#define BM_SETCHECK
Definition: winuser.h:1882
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
INT SndMixerGetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails)
Definition: mixer.c:498
unsigned int UINT
Definition: ndis.h:50
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned long DWORD
Definition: ntddk_ex.h:95
WINDOW_MODE Mode
Definition: sndvol32.h:44
Definition: ncftp.h:79
static const WCHAR L[]
Definition: oid.c:1250
#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES
Definition: mmsystem.h:320
#define MIXER_LONG_NAME_CHARS
Definition: mmsystem.h:294
static const WCHAR Control[]
Definition: interface.c:27
#define BALANCE_STEPS
Definition: sndvol32.h:24
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
TCHAR DeviceName[128]
Definition: sndvol32.h:104
#define IDC_LINE_SLIDER_HORZ
Definition: resources.h:24
#define MIXERCONTROL_CT_CLASS_FADER
Definition: mmsystem.h:359
#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
Definition: mmsystem.h:319
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define VOLUME_MIN
Definition: sndvol32.h:17
#define IDD_SMALL_LINE
Definition: resources.h:34
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
LONG_PTR LRESULT
Definition: windef.h:209
#define HeapFree(x, y, z)
Definition: compat.h:394
HINSTANCE hAppInstance
Definition: mmc.c:23
PMIXER_WINDOW MixerWindow
Definition: sndvol32.h:95
#define IDC_LINE_SWITCH
Definition: resources.h:23

Referenced by LoadDialogCtrls().

◆ LoadDialog()

VOID LoadDialog ( IN HMODULE  hModule,
IN PMIXER_WINDOW  MixerWindow,
IN LPCWSTR  DialogResId,
IN DWORD  Index 
)

Definition at line 292 of file dialog.c.

297 {
298  LPDLGTEMPLATE DlgTemplate;
299  PDLGITEMTEMPLATE DlgItem;
300  RECT dialogRect;
301  LPWORD Offset;
302  WORD FontSize;
303  WCHAR FontName[100];
304  WORD Length;
305  int width;
306 
308  UINT xBaseUnit = LOWORD(units);
309  UINT yBaseUnit = HIWORD(units);
310 
311  /* first load the dialog resource */
312  DlgTemplate = (LPDLGTEMPLATE)LoadDialogResource(hModule, DialogResId, NULL);
313  if (!DlgTemplate)
314  {
315  /* failed to load resource */
316  return;
317  }
318 
319  /* Now walk past the dialog header */
320  Offset = (LPWORD)(DlgTemplate + 1);
321 
322  /* FIXME: support menu */
323  assert(*Offset == 0);
324  Offset++;
325 
326  /* FIXME: support classes */
327  assert(*Offset == 0);
328  Offset++;
329 
330  /* FIXME: support titles */
331  assert(*Offset == 0);
332  Offset++;
333 
334  /* get font size */
335  FontSize = *Offset;
336  Offset++;
337 
338  /* calculate font length */
339  Length = wcslen((LPWSTR)Offset) + 1;
340  assert(Length < (sizeof(FontName) / sizeof(WCHAR)));
341 
342  /* copy font */
343  wcscpy(FontName, (LPWSTR)Offset);
344 
345  if (DlgTemplate->style & DS_SETFONT)
346  {
347  HDC hDC;
348 
349  hDC = GetDC(0);
350 
351  if (!MixerWindow->hFont)
352  {
353  int pixels = MulDiv(FontSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
355  }
356 
357  if (MixerWindow->hFont)
358  {
359  SIZE charSize;
360  HFONT hOldFont;
361 
362  hOldFont = SelectObject(hDC, MixerWindow->hFont);
363  charSize.cx = GdiGetCharDimensions(hDC, NULL, &charSize.cy);
364  if (charSize.cx)
365  {
366  xBaseUnit = charSize.cx;
367  yBaseUnit = charSize.cy;
368  }
369  SelectObject(hDC, hOldFont);
370  }
371  }
372 
373 // assert(MixerWindow->hFont);
374 
375  /* move offset after font name */
376  Offset += Length;
377 
378  /* offset is now at first dialog item control */
379  DlgItem = (PDLGITEMTEMPLATE)Offset;
380 
381  dialogRect.left = 0;
382  dialogRect.right = DlgTemplate->cx;
383  dialogRect.top = 0;
384  dialogRect.bottom = DlgTemplate->cy;
385 
386  ConvertRect(&dialogRect, xBaseUnit, yBaseUnit);
387 
388  width = dialogRect.right - dialogRect.left;
389 
390  dialogRect.left += MixerWindow->rect.right;
391  dialogRect.right += MixerWindow->rect.right;
392  dialogRect.top += MixerWindow->rect.top;
393  dialogRect.bottom += MixerWindow->rect.top;
394 
395  MixerWindow->rect.right += width;
396  if ((dialogRect.bottom - dialogRect.top) > (MixerWindow->rect.bottom - MixerWindow->rect.top))
397  MixerWindow->rect.bottom = MixerWindow->rect.top + dialogRect.bottom - dialogRect.top;
398 
399  /* now add the controls */
400  LoadDialogControls(MixerWindow, &dialogRect, DlgTemplate->cdit, DlgItem, Index, xBaseUnit, yBaseUnit);
401 }
#define HDC
Definition: msvc.h:22
GLint GLint GLsizei width
Definition: gl.h:1546
HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR)
VOID LoadDialogControls(IN PMIXER_WINDOW MixerWindow, LPRECT DialogOffset, WORD ItemCount, PDLGITEMTEMPLATE DialogItem, DWORD DialogIdMultiplier, UINT xBaseUnit, UINT yBaseUnit)
Definition: dialog.c:249
#define DEFAULT_QUALITY
Definition: wingdi.h:435
#define FF_DONTCARE
Definition: wingdi.h:447
HDC WINAPI GetDC(_In_opt_ HWND)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG top
Definition: windef.h:292
LPVOID LoadDialogResource(IN HMODULE hModule, IN LPCWSTR ResourceName, OUT LPDWORD ResourceLength)
Definition: dialog.c:21
DWORD style
Definition: winuser.h:3012
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
#define assert(x)
Definition: debug.h:53
LONG left
Definition: windef.h:291
#define DEFAULT_CHARSET
Definition: wingdi.h:383
LONG right
Definition: windef.h:293
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG WINAPI GetDialogBaseUnits(VOID)
Definition: dialog.c:2076
smooth NULL
Definition: ftsmooth.c:416
LONG cx
Definition: windef.h:319
struct DLGTEMPLATE * LPDLGTEMPLATE
unsigned int UINT
Definition: ndis.h:50
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned short WORD
Definition: ntddk_ex.h:93
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define DS_SETFONT
Definition: winuser.h:378
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
WORD cdit
Definition: winuser.h:3014
uint16_t * LPWORD
Definition: typedefs.h:54
static HDC hDC
Definition: 3dtext.c:33
LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *)
Definition: font.c:2008
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: gl.h:1546
short cy
Definition: winuser.h:3018
#define FW_NORMAL
Definition: wingdi.h:372
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define HIWORD(l)
Definition: typedefs.h:246
VOID ConvertRect(LPRECT lpRect, UINT xBaseUnit, UINT yBaseUnit)
Definition: dialog.c:12
LONG bottom
Definition: windef.h:294
#define LOGPIXELSY
Definition: wingdi.h:718
WCHAR * LPWSTR
Definition: xmlstorage.h:184
GLfloat units
Definition: glext.h:11727
short cx
Definition: winuser.h:3017
LONG cy
Definition: windef.h:320
#define LOWORD(l)
Definition: pedump.c:82
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define MulDiv(x, y, z)
Definition: gdifloat.h:86
HMODULE hModule
Definition: animate.c:44

Referenced by EnumConnectionsCallback().

◆ LoadDialogControls()

VOID LoadDialogControls ( IN PMIXER_WINDOW  MixerWindow,
LPRECT  DialogOffset,
WORD  ItemCount,
PDLGITEMTEMPLATE  DialogItem,
DWORD  DialogIdMultiplier,
UINT  xBaseUnit,
UINT  yBaseUnit 
)

Definition at line 249 of file dialog.c.

257 {
258  LPWORD Offset;
259  WORD Index;
260 
261  /* sanity check */
262  assert(ItemCount);
263 
264  if (MixerWindow->Window)
265  MixerWindow->Window = (HWND*)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MixerWindow->Window, (MixerWindow->WindowCount + ItemCount) * sizeof(HWND));
266  else
267  MixerWindow->Window = (HWND*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ItemCount * sizeof(HWND));
268  if (!MixerWindow->Window)
269  {
270  /* no memory */
271  return;
272  }
273 
274  /* enumerate now all controls */
275  for (Index = 0; Index < ItemCount; Index++)
276  {
277  /* add controls */
278  Offset = AddDialogControl(MixerWindow->hWnd, &MixerWindow->Window[MixerWindow->WindowCount], DialogOffset, DialogItem, DialogIdMultiplier, MixerWindow->hFont, xBaseUnit, yBaseUnit);
279 
280  /* sanity check */
281  assert(Offset);
282 
283  /* move dialog item to new offset */
284  DialogItem =(PDLGITEMTEMPLATE)Offset;
285 
286  /* increment window count */
287  MixerWindow->WindowCount++;
288  }
289 }
HANDLE HWND
Definition: compat.h:13
#define assert(x)
Definition: debug.h:53
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned short WORD
Definition: ntddk_ex.h:93
LPWORD AddDialogControl(IN HWND hwndDialog, IN HWND *OutWnd, IN LPRECT DialogOffset, IN PDLGITEMTEMPLATE DialogItem, IN DWORD DialogIdMultiplier, IN HFONT hFont, UINT xBaseUnit, UINT yBaseUnit)
Definition: dialog.c:67
uint16_t * LPWORD
Definition: typedefs.h:54
#define HeapReAlloc
Definition: compat.h:393
#define HEAP_ZERO_MEMORY
Definition: compat.h:123

Referenced by LoadDialog().

◆ LoadDialogCtrls()

VOID LoadDialogCtrls ( PPREFERENCES_CONTEXT  PrefContext)

Definition at line 619 of file dialog.c.

621 {
622  HWND hDlgCtrl;
623  RECT statusRect;
624 
625  /* set dialog count to zero */
626  PrefContext->Count = 0;
627 
628  SetRectEmpty(&PrefContext->MixerWindow->rect);
629 
630  /* enumerate controls */
631  SndMixerEnumConnections(PrefContext->MixerWindow->Mixer, PrefContext->SelectedLine, EnumConnectionsCallback, (PVOID)PrefContext);
632 
633  if (PrefContext->MixerWindow->hStatusBar)
634  {
635  GetWindowRect(PrefContext->MixerWindow->hStatusBar, &statusRect);
636  PrefContext->MixerWindow->rect.bottom += (statusRect.bottom - statusRect.top);
637  }
638 
639  /* now move the window */
641  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);
642 
643  /* get last line separator */
644  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, IDC_LINE_SEP * PrefContext->Count);
645 
646  if (hDlgCtrl != NULL)
647  {
648  /* hide last separator */
649  ShowWindow(hDlgCtrl, SW_HIDE);
650  }
651 }
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define TRUE
Definition: types.h:120
#define SW_HIDE
Definition: winuser.h:762
LONG top
Definition: windef.h:292
BOOL SndMixerEnumConnections(PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context)
Definition: mixer.c:552
#define WS_DLGFRAME
Definition: pedump.c:626
#define HWND_TOP
Definition: winuser.h:1193
LONG left
Definition: windef.h:291
#define SWP_NOZORDER
Definition: winuser.h:1232
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LONG right
Definition: windef.h:293
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
#define IDC_LINE_SEP
Definition: resources.h:26
BOOL CALLBACK EnumConnectionsCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context)
Definition: dialog.c:405
struct _SND_MIXER * Mixer
Definition: sndvol32.h:39
smooth NULL
Definition: ftsmooth.c:416
#define WS_CAPTION
Definition: pedump.c:624
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
#define WS_MINIMIZEBOX
Definition: pedump.c:631
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
LONG bottom
Definition: windef.h:294
#define SWP_NOMOVE
Definition: winuser.h:1229
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_SYSMENU
Definition: pedump.c:629
HWND hStatusBar
Definition: sndvol32.h:38
PMIXER_WINDOW MixerWindow
Definition: sndvol32.h:95

Referenced by RebuildMixerWindowControls().

◆ LoadDialogResource()

LPVOID LoadDialogResource ( IN HMODULE  hModule,
IN LPCWSTR  ResourceName,
OUT LPDWORD  ResourceLength 
)

Definition at line 21 of file dialog.c.

25 {
26  HRSRC hSrc;
27  HGLOBAL hRes;
28  PVOID Result;
29 
30  /* find resource */
31  hSrc = FindResourceW(hModule, ResourceName, (LPCWSTR)RT_DIALOG);
32 
33  if (!hSrc)
34  {
35  /* failed to find resource */
36  return NULL;
37  }
38 
39  /* now load the resource */
40  hRes = LoadResource(hAppInstance, hSrc);
41  if (!hRes)
42  {
43  /* failed to load resource */
44  return NULL;
45  }
46 
47  /* now lock the resource */
48  Result = LockResource(hRes);
49 
50  if (!Result)
51  {
52  /* failed to lock resource */
53  return NULL;
54  }
55 
56  if (ResourceLength)
57  {
58  /* store output length */
59  *ResourceLength = SizeofResource(hAppInstance, hSrc);
60  }
61 
62  /* done */
63  return Result;
64 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
smooth NULL
Definition: ftsmooth.c:416
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define RT_DIALOG
Definition: pedump.c:367
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
HINSTANCE hAppInstance
Definition: mmc.c:23
HMODULE hModule
Definition: animate.c:44

Referenced by LoadDialog().

◆ UpdateDialogLineSliderControl()

VOID UpdateDialogLineSliderControl ( PPREFERENCES_CONTEXT  PrefContext,
LPMIXERLINE  Line,
DWORD  dwDialogID,
DWORD  Position 
)

Definition at line 700 of file dialog.c.

705 {
706  DWORD Index;
707  DWORD wID;
708  HWND hDlgCtrl;
709  WCHAR LineName[MIXER_LONG_NAME_CHARS];
710 
711  /* find the index of this line */
712  for (Index = 0; Index < PrefContext->Count; Index++)
713  {
714  /* get id */
715  wID = (Index + 1) * IDC_LINE_NAME;
716 
717  if (GetDlgItemText(PrefContext->MixerWindow->hWnd, wID, LineName, MIXER_LONG_NAME_CHARS) == 0)
718  {
719  /* failed to retrieve id */
720  continue;
721  }
722 
723  /* check if the line name matches */
724  if (!wcsicmp(LineName, Line->szName))
725  {
726  /* found matching line name */
727  wID = (Index + 1) * dwDialogID;
728 
729  /* get dialog control */
730  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
731 
732  if (hDlgCtrl != NULL)
733  {
734  /* check state */
735  LRESULT OldPosition = SendMessageW(hDlgCtrl, TBM_GETPOS, 0, 0);
736  if (OldPosition != Position)
737  {
738  /* update control state */
740  }
741  }
742  break;
743  }
744  }
745 }
#define TRUE
Definition: types.h:120
__wchar_t WCHAR
Definition: xmlstorage.h:180
static COORD Position
Definition: mouse.c:34
#define TBM_SETPOS
Definition: commctrl.h:2008
UINT_PTR WPARAM
Definition: windef.h:207
#define TBM_GETPOS
Definition: commctrl.h:2003
#define IDC_LINE_NAME
Definition: resources.h:22
smooth NULL
Definition: ftsmooth.c:416
#define GetDlgItemText
Definition: winuser.h:5651
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: ncftp.h:79
#define MIXER_LONG_NAME_CHARS
Definition: mmsystem.h:294
#define wcsicmp
Definition: string.h:1152
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
LONG_PTR LRESULT
Definition: windef.h:209
PMIXER_WINDOW MixerWindow
Definition: sndvol32.h:95

Referenced by MixerControlChangeCallback().

◆ UpdateDialogLineSwitchControl()

VOID UpdateDialogLineSwitchControl ( PPREFERENCES_CONTEXT  PrefContext,
LPMIXERLINE  Line,
LONG  fValue 
)

Definition at line 654 of file dialog.c.

658 {
659  DWORD Index;
660  DWORD wID;
661  HWND hDlgCtrl;
662  WCHAR LineName[MIXER_LONG_NAME_CHARS];
663 
664  /* find the index of this line */
665  for (Index = 0; Index < PrefContext->Count; Index++)
666  {
667  /* get id */
668  wID = (Index + 1) * IDC_LINE_NAME;
669 
670  if (GetDlgItemText(PrefContext->MixerWindow->hWnd, wID, LineName, MIXER_LONG_NAME_CHARS) == 0)
671  {
672  /* failed to retrieve id */
673  continue;
674  }
675 
676  /* check if the line name matches */
677  if (!wcsicmp(LineName, Line->szName))
678  {
679  /* found matching line name */
680  wID = (Index + 1) * IDC_LINE_SWITCH;
681 
682  /* get dialog control */
683  hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
684 
685  if (hDlgCtrl != NULL)
686  {
687  /* check state */
688  if (SendMessageW(hDlgCtrl, BM_GETCHECK, 0, 0) != fValue)
689  {
690  /* update control state */
691  SendMessageW(hDlgCtrl, BM_SETCHECK, (WPARAM)fValue, 0);
692  }
693  }
694  break;
695  }
696  }
697 }
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT_PTR WPARAM
Definition: windef.h:207
#define IDC_LINE_NAME
Definition: resources.h:22
smooth NULL
Definition: ftsmooth.c:416
#define BM_GETCHECK
Definition: winuser.h:1879
#define BM_SETCHECK
Definition: winuser.h:1882
#define GetDlgItemText
Definition: winuser.h:5651
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: ncftp.h:79
#define MIXER_LONG_NAME_CHARS
Definition: mmsystem.h:294
#define wcsicmp
Definition: string.h:1152
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
PMIXER_WINDOW MixerWindow
Definition: sndvol32.h:95
#define IDC_LINE_SWITCH
Definition: resources.h:23

Referenced by MixerControlChangeCallback().