@@ -66,6 +66,7 @@ BOOL PlayerDlgOnInitDialog(HWND hDlg, HWND hWndFocus, LPARAM lParam)
6666 SetWindowLongPtr (hDlg, DWLP_USER, (LONG_PTR) pData);
6767
6868 const HWND hPosition = GetDlgItem (hDlg, IDC_POSITION);
69+ const HWND hVolume = GetDlgItem (hDlg, IDC_VOLUME);
6970
7071 GetWindowText (hDlg, pData->strTitle , ARRAYSIZE (pData->strTitle ));
7172
@@ -80,6 +81,11 @@ BOOL PlayerDlgOnInitDialog(HWND hDlg, HWND hWndFocus, LPARAM lParam)
8081 TrackBar_SetTicFreq (hPosition, 60 );
8182 TrackBar_SetLineSize (hPosition, 10 );
8283 TrackBar_SetPageSize (hPosition, 60 );
84+ TrackBar_SetTicFreq (hVolume, 10 );
85+ TrackBar_SetLineSize (hVolume, 1 );
86+ TrackBar_SetPageSize (hVolume, 10 );
87+ TrackBar_SetRange (hVolume, 0 , 100 );
88+ TrackBar_SetPos (hVolume, 100 - 100 );
8389
8490 for (int i = 1 ; i < __argc; ++i)
8591 {
@@ -199,6 +205,7 @@ void PlayerDlgOnAPOpen(HWND hDlg, LPCTSTR pFileName)
199205{
200206 PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr (hDlg, DWLP_USER);
201207 const HWND hPosition = GetDlgItem (hDlg, IDC_POSITION);
208+ const HWND hVolume = GetDlgItem (hDlg, IDC_VOLUME);
202209 const HWND hBegin = GetDlgItem (hDlg, IDC_BEGIN);
203210 const HWND hEnd = GetDlgItem (hDlg, IDC_END);
204211
@@ -215,6 +222,9 @@ void PlayerDlgOnAPOpen(HWND hDlg, LPCTSTR pFileName)
215222 FormatTime (dwLength, buf, ARRAYSIZE (buf));
216223 SetWindowText (hEnd, buf);
217224
225+ DWORD dwVolume = 100 - TrackBar_GetPos (hVolume);
226+ MciSetVolume (hDlg, pData->wDeviceID , dwVolume * 10 );
227+
218228 MciPlay (hDlg, pData->wDeviceID );
219229 }
220230 else
@@ -235,10 +245,12 @@ BOOL PlayerDlgOnNotify(HWND hDlg, int id, LPNMHDR pNmHdr)
235245{
236246 PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr (hDlg, DWLP_USER);
237247 const HWND hPosition = GetDlgItem (hDlg, IDC_POSITION);
248+ const HWND hVolume = GetDlgItem (hDlg, IDC_VOLUME);
238249 const HWND hBegin = GetDlgItem (hDlg, IDC_BEGIN);
239250
240- if (id == IDC_POSITION )
251+ switch (id)
241252 {
253+ case IDC_POSITION:
242254 switch (pNmHdr->code )
243255 {
244256 case NM_RELEASEDCAPTURE:
@@ -281,14 +293,47 @@ BOOL PlayerDlgOnNotify(HWND hDlg, int id, LPNMHDR pNmHdr)
281293 break ;
282294 }
283295 return TRUE ;
284- }
285- else
296+
297+ case IDC_VOLUME:
298+ switch (pNmHdr->code )
299+ {
300+ case NM_RELEASEDCAPTURE:
301+ if (pData->wDeviceID != 0 )
302+ {
303+ DWORD dwVolume = 100 - TrackBar_GetPos (hVolume);
304+ MciSetVolume (hDlg, pData->wDeviceID , dwVolume * 10 );
305+ }
306+ break ;
307+
308+ case TRBN_THUMBPOSCHANGING:
309+ if (pData->wDeviceID != 0 )
310+ {
311+ const NMTRBTHUMBPOSCHANGING* pPosChanging = (NMTRBTHUMBPOSCHANGING*) pNmHdr;
312+ DWORD dwPos = 100 - pPosChanging->dwPos ;
313+ if (dwPos > (MAXDWORD / 2 )) dwPos = 0 ;
314+ if (dwPos > 100 ) dwPos = 100 ;
315+ if (pPosChanging->nReason == TB_THUMBTRACK)
316+ {
317+ MciSetVolume (hDlg, pData->wDeviceID , dwPos * 10 );
318+ }
319+ else if (pPosChanging->nReason != TB_THUMBPOSITION && pPosChanging->nReason != TB_ENDTRACK)
320+ {
321+ MciSetVolume (hDlg, pData->wDeviceID , dwPos * 10 );
322+ }
323+ }
324+ break ;
325+ }
326+ return TRUE ;
327+
328+ default :
286329 return FALSE ;
330+ }
287331}
288332
289333void PlayerDlgOnAppCommand (HWND hDlg, HWND hChild, UINT cmd, UINT uDevice, DWORD dwKeys)
290334{
291335 PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr (hDlg, DWLP_USER);
336+ const HWND hVolume = GetDlgItem (hDlg, IDC_VOLUME);
292337 switch (cmd)
293338 {
294339 case APPCOMMAND_MEDIA_PLAY:
@@ -306,6 +351,24 @@ void PlayerDlgOnAppCommand(HWND hDlg, HWND hChild, UINT cmd, UINT uDevice, DWORD
306351 MciPlay (hDlg, pData->wDeviceID );
307352 }
308353 break ;
354+ case APPCOMMAND_VOLUME_DOWN:
355+ {
356+ DWORD dwVolume = 100 - TrackBar_GetPos (hVolume);
357+ dwVolume -= 10 ;
358+ if (dwVolume > (DWORD) -100 ) dwVolume = 0 ;
359+ MciSetVolume (hDlg, pData->wDeviceID , dwVolume * 10 );
360+ TrackBar_SetPos (hVolume, 100 - dwVolume);
361+ }
362+ break ;
363+ case APPCOMMAND_VOLUME_UP:
364+ {
365+ DWORD dwVolume = 100 - TrackBar_GetPos (hVolume);
366+ dwVolume += 10 ;
367+ if (dwVolume > 100 ) dwVolume = 100 ;
368+ MciSetVolume (hDlg, pData->wDeviceID , dwVolume * 10 );
369+ TrackBar_SetPos (hVolume, 100 - dwVolume);
370+ }
371+ break ;
309372 }
310373}
311374
0 commit comments