source: trunk/classes/mm-progs/volume/classvol.c@ 2

Last change on this file since 2 was 2, checked in by stevenhl, 8 years ago

Import sources from cwmm-full.zip dated 2005-03-21

File size: 22.4 KB
Line 
1/*
2 * classvol.c (C) Chris Wohlgemuth 2002-2003
3 *
4 * Vokume applet for audio classes.
5 */
6/*
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; see the file COPYING. If not, write to
19 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21/*
22 * If you need another license for your project/product (commercial,
23 * noncommercial, whatever) contact me at
24 *
25 * http://www.os2world.com/cdwriting
26 * http://www.geocities.com/SiliconValley/Sector/5785/
27 *
28 */
29
30#define INCL_DOS
31#define INCL_DOSFILEMGR
32#define INCL_DOSERRORS
33#define INCL_WIN
34#define INCL_WINWORKPLACE
35#define INCL_OS2MM
36#define INCL_MMIOOS2
37#define INCL_MCIOS2
38#define INCL_GPI
39#define INCL_PM
40
41#include <os2.h>
42#include <sys\types.h>
43#include <sys\stat.h>
44#include <stdio.h>
45#include <string.h>
46#include <stdlib.h>
47#include "os2me.h"
48#include "common.h"
49#include "classvolumeres.h"
50#include "mmres.h"
51#include "classvolume.h"
52#include "mmprogs_defaults.h"
53#include "sys_funcs.h"
54//#include "cwaudioinc.h"
55
56#ifndef OPEN_DEFAULT
57/* Open views for the wpOpen() method */
58 #define OPEN_UNKNOWN -1
59 #define OPEN_DEFAULT 0
60 #define OPEN_CONTENTS 1
61 #define OPEN_SETTINGS 2
62 #define OPEN_HELP 3
63 #define OPEN_RUNNING 4
64 #define OPEN_PROMPTDLG 5
65 #define OPEN_PALETTE 121 /*SPLIT*/
66 #define OPEN_USER 0x6500
67#endif
68
69LOADEDBITMAP allBMPs[NUM_CTRL_IDX];
70
71/* Format:
72 typedef struct
73 {
74 INT id;
75 RECTL rclSource;
76 HBITMAP hbmSource;
77 RECTL rclDest;
78 }CONTROLINFO;
79 */
80CONTROLINFO ciControls[NUM_CTRL_IDX]={
81 {0,{0,0,161,17}, NULLHANDLE,{0}}, /* main */
82 /* Achtung destination verwendet fuer position */
83 {IDSL_MMPLAYERVOLUME,{15, 2,141,17},NULLHANDLE, {20, 6, 146, 21} }, //{0, 0, 126, 9} /* {10,18,93,13} */ },
84 {IDSL_MMPLAYERVOLUMEARM,{0,0,9,9},NULLHANDLE, {0,0,9,9}},
85 {IDSL_MMPLAYERVOLUMEARM,{0,0,9,9},NULLHANDLE, {0,0,9,9}},
86};
87
88
89#define NUMPARAMS 2
90
91/* argv[0]: progname
92 * argv[1]: HWND object
93 */
94
95//#define DEBUG
96#ifdef DEBUG
97void HlpWriteToTrapLog(const char* chrFormat, ...);
98#endif
99
100int IniRestoreInt(char * iniFile, char* chrApp, char *chrKey, int defaultInt);
101BOOL IniSaveInt(char * iniFile, char* chrApp, char *chrKey, int theInt);
102BOOL HlpBuildMMProgIniFileName(char* chrProgname, char * chrBuffer, ULONG ulBufferSize);
103void freeResHandle();
104HMODULE queryResModuleHandle(char *chrExePath);
105BOOL getMessage(char* text,ULONG ulID, LONG lSizeText, HMODULE hResource,HWND hwnd);
106MRESULT menuInsertMenuSeparator(HWND hwndMenu, HWND hwndSubMenu, SHORT sPosition );
107SHORT menuInsertMenuItem( HWND hwndMenu, HWND hwndSubMenu, SHORT sPosition, int iID, char * chrText);
108
109void pmUsage();
110ULONG messageBox( char* text, ULONG ulTextID , LONG lSizeText,
111 char* title, ULONG ulTitleID, LONG lSizeTitle,
112 HMODULE hResource, HWND hwnd, ULONG ulFlags);
113
114MRESULT drawSlider(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2, USHORT id);
115MRESULT EXPENTRY privateSliderProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
116BOOL paintHilitedControl(HWND hwnd, USHORT usControl, BOOL bHilite);
117MRESULT paintControls(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
118MRESULT EXPENTRY bgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
119MRESULT EXPENTRY buttonProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
120
121BOOL writeVolumeToIni(char * iniFile, ULONG ulVoume);
122int readVolumeFromIni(char * iniFile, int iDefault);
123void sendCommandToObject(char* chrObject, char* command);
124
125char logName[]="classvol.log";
126
127extern SWP swpWindow;
128BOOL bHaveWindowPos=FALSE;
129
130/* Track to play. Full path */
131char chrSourceName[CCHMAXPATH]={0};
132char * chrPtrName=NULLHANDLE; /* Pointer to filename */
133char chrClassName[100]= {0};
134
135char chrIniFile[CCHMAXPATH];
136
137int numArgs;
138char* params[NUMPARAMS];
139
140ULONG ulVolume=75;
141
142HWND hwndObject;
143
144HMODULE RESSOURCEHANDLE=0;
145
146HMODULE BMP_RESSOURCEHANDLE=0;
147
148PFNWP oldPlayTimeProc;
149PFNWP orgBgProc=NULLHANDLE; /* Org proc of background */
150PFNWP orgButtonProc=NULLHANDLE;
151
152HPOINTER hptrArrowWE=NULLHANDLE;
153
154static void _loadBmps()
155{
156 HPS hps;
157 HMODULE hResource;
158
159 if(allBMPs[MAIN_BMP_IDX].hbm)
160 return;
161
162 hResource=BMP_RESSOURCEHANDLE; //_queryResModuleHandle();
163 hps=WinGetPS(HWND_DESKTOP);
164
165 /* The main BMP */
166 allBMPs[MAIN_BMP_IDX].hbm=GpiLoadBitmap(hps, hResource, IDBMP_MAIN, 0, 0);
167 GpiQueryBitmapParameters(allBMPs[MAIN_BMP_IDX].hbm, &allBMPs[MAIN_BMP_IDX].bmpInfoHdr);
168
169#if 0
170 /* Stop */
171 allBMPs[CTRLIDX_STOPBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOP, 0, 0);
172 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTON].hbm, &allBMPs[CTRLIDX_STOPBUTTON].bmpInfoHdr);
173 ciControls[CTRLIDX_STOPBUTTON].hbmSource=allBMPs[CTRLIDX_STOPBUTTON].hbm;
174
175 /* Stop sel */
176 allBMPs[CTRLIDX_STOPBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOPSEL, 0, 0);
177 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTONSEL].hbm, &allBMPs[CTRLIDX_STOPBUTTONSEL].bmpInfoHdr);
178 ciControls[CTRLIDX_STOPBUTTONSEL].hbmSource=allBMPs[CTRLIDX_STOPBUTTONSEL].hbm;
179
180 /* Pause */
181 allBMPs[CTRLIDX_PAUSEBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSE, 0, 0);
182 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTON].hbm, &allBMPs[CTRLIDX_PAUSEBUTTON].bmpInfoHdr);
183 ciControls[CTRLIDX_PAUSEBUTTON].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTON].hbm;
184
185 /* Pause sel */
186 allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSESEL, 0, 0);
187 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm, &allBMPs[CTRLIDX_PAUSEBUTTONSEL].bmpInfoHdr);
188 ciControls[CTRLIDX_PAUSEBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm;
189
190 /* Play */
191 allBMPs[CTRLIDX_PLAYBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAY, 0, 0);
192 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTON].hbm, &allBMPs[CTRLIDX_PLAYBUTTON].bmpInfoHdr);
193 ciControls[CTRLIDX_PLAYBUTTON].hbmSource=allBMPs[CTRLIDX_PLAYBUTTON].hbm;
194
195 /* Play sel */
196 allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAYSEL, 0, 0);
197 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm, &allBMPs[CTRLIDX_PLAYBUTTONSEL].bmpInfoHdr);
198 ciControls[CTRLIDX_PLAYBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm;
199
200 /* Positionslider bg */
201 ciControls[CTRLIDX_POSSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
202
203 /* Positionslider arm */
204 allBMPs[CTRLIDX_POSSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_POSSLIDERARM, 0, 0);
205 GpiQueryBitmapParameters(allBMPs[CTRLIDX_POSSLIDERARM].hbm, &allBMPs[CTRLIDX_POSSLIDERARM].bmpInfoHdr);
206 ciControls[CTRLIDX_POSSLIDERARM].hbmSource=allBMPs[CTRLIDX_POSSLIDERARM].hbm;
207
208 /* Playtime text field */
209 ciControls[CTRLIDX_PLAYTIME].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
210#endif
211
212 /* Volume slider background */
213 ciControls[CTRLIDX_VOLSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
214
215 /* Volume slider arm */
216 allBMPs[CTRLIDX_VOLSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARM, 0, 0);
217 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARM].hbm, &allBMPs[CTRLIDX_VOLSLIDERARM].bmpInfoHdr);
218 ciControls[CTRLIDX_VOLSLIDERARM].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARM].hbm;
219
220 /* Volume slider arm selected*/
221 allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARMSEL, 0, 0);
222 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm, &allBMPs[CTRLIDX_VOLSLIDERARMSEL].bmpInfoHdr);
223 ciControls[CTRLIDX_VOLSLIDERARMSEL].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm;
224
225 WinReleasePS(hps);
226}
227
228
229/***********************************************************/
230/* */
231/* Move the controls to the position defined by the */
232/* background bitmap. */
233/* */
234/***********************************************************/
235void adjustDialogControlPos(HWND hwnd)
236{
237 CONTROLINFO ci;
238
239#if 0
240 ULONG ulStyle;
241 /* STOP button */
242 ci=ciControls[CTRLIDX_STOPBUTTON];
243 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
244 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
245 WinSetWindowPos(WinWindowFromID(hwnd, ci.id), HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
246 ci.rclDest.xRight-ci.rclDest.xLeft,
247 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
248 /* Pause button */
249 ci=ciControls[CTRLIDX_PAUSEBUTTON];
250 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
251 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
252 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
253 ci.rclDest.xRight-ci.rclDest.xLeft,
254 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
255 /* Play button */
256 ci=ciControls[CTRLIDX_PLAYBUTTON];
257 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
258 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
259 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
260 ci.rclDest.xRight-ci.rclDest.xLeft,
261 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
262
263 /* Playtime text */
264 ci=ciControls[CTRLIDX_PLAYTIME];
265 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclSource.xLeft,ci.rclSource.yBottom,
266 ci.rclSource.xRight-ci.rclSource.xLeft,
267 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE|SWP_SIZE);
268 oldPlayTimeProc=WinSubclassWindow(WinWindowFromID(hwnd, IDST_MMPLAYERPLAYTIME), playTimeTextProc);
269
270 /* Pos slider */
271 ci=ciControls[CTRLIDX_POSSLIDER];//ciPosSlider;
272 WinCreateWindow(hwnd, SLIDER_CLASS, "", WS_VISIBLE | WS_TABSTOP, 0,0, 10, 10,
273 hwnd, HWND_TOP, ci.id, NULLHANDLE, NULLHANDLE);
274 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft, ci.rclDest.yBottom,
275 ci.rclSource.xRight-ci.rclSource.xLeft,
276 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE | SWP_SIZE);
277
278 WinSendMsg(WinWindowFromID(hwnd, ci.id),SLM_SETSLIDERINFO,
279 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS,0),
280 MPFROM2SHORT( 9, 9));
281#endif
282
283 /* Vol slider */
284 ci=ciControls[CTRLIDX_VOLSLIDER];//ciVolSlider;
285 WinCreateWindow(hwnd, SLIDER_CLASS, "", WS_VISIBLE | WS_TABSTOP, 0,0, 10, 10,
286 hwnd, HWND_TOP, ci.id, NULLHANDLE, NULLHANDLE);
287 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft, ci.rclDest.yBottom,
288 ci.rclSource.xRight-ci.rclSource.xLeft,
289 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE | SWP_SIZE);
290 WinSendMsg(WinWindowFromID(hwnd, ci.id),SLM_SETSLIDERINFO,
291 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS,0),
292 MPFROM2SHORT( 9, 9));
293
294}
295
296
297/****************************************************************
298 * FixSysMenu procedure
299 *--------------------------------------------------------------
300 *
301 * Name: FixSysMenu(HWND hwndDlg)
302 *
303 * Purpose: This routine removes the Restore, Size, Minimize, and
304 * Maximize options from the system menu of a dialog.
305 *
306 * Usage
307 *
308 * Method: Called during the WM_INITDLG of a dialog procedure.
309 *
310 * Returns: VOID
311 *
312 ****************************************************************/
313VOID FixSysMenu(HWND hwndDlg)
314{
315 HWND hwndMenu; /* Handle to system menu */
316 MENUITEM mi={0};
317
318 hwndMenu = WinWindowFromID(hwndDlg, FID_SYSMENU);
319
320
321 WinSendMsg(hwndMenu, /* Delete Restore from the system menu */
322 MM_DELETEITEM,
323 MPFROM2SHORT(SC_RESTORE, TRUE),
324 MPFROMP(NULL));
325
326 WinSendMsg(hwndMenu, /* Delete Size from the system menu */
327 MM_DELETEITEM,
328 MPFROM2SHORT(SC_SIZE, TRUE),
329 MPFROMP(NULL));
330
331 WinSendMsg(hwndMenu, /* Delete Minimize from the system menu */
332 MM_DELETEITEM,
333 MPFROM2SHORT(SC_MINIMIZE, TRUE),
334 MPFROMP(NULL));
335
336 WinSendMsg(hwndMenu, /* Delete Maximize from the system menu */
337 MM_DELETEITEM,
338 MPFROM2SHORT(SC_MAXIMIZE, TRUE),
339 MPFROMP(NULL));
340
341 WinSendMsg(hwndMenu, /* Delete Maximize from the system menu */
342 MM_DELETEITEM,
343 MPFROM2SHORT(SC_HIDE, TRUE),
344 MPFROMP(NULL));
345
346 if(WinSendMsg(hwndMenu, /* Get sys menu menuitem */
347 MM_QUERYITEM,
348 MPFROM2SHORT(SC_SYSMENU, FALSE),
349 MPFROMP(&mi)))
350 {
351 char chrText[100];
352 menuInsertMenuSeparator( mi.hwndSubMenu, NULLHANDLE, MIT_END);
353 if(!getMessage(chrText, IDSTR_MASTERVOLUMEITEM, sizeof(chrText), RESSOURCEHANDLE, hwndMenu))
354 strcpy(chrText, "Master ~Volume");
355 menuInsertMenuItem( mi.hwndSubMenu, NULLHANDLE, MIT_END, ID_MENUITEMMASTERVOLUME, chrText);
356 }
357 return;
358}
359
360
361/* This Proc handles the main dialog */
362MRESULT EXPENTRY decodeStatusDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
363{
364 // char text[CCHMAXPATH*4 +10];
365 // char title[CCHMAXPATH*4];
366 SWCNTRL swctl;
367 PID pid;
368
369 switch (msg)
370 {
371 case WM_INITDLG:
372 {
373
374 /* Add switch entry */
375 memset(&swctl,0,sizeof(swctl));
376 WinQueryWindowProcess(hwnd,&pid,NULL);
377 swctl.hwnd=hwnd;
378 swctl.uchVisibility=SWL_VISIBLE;
379 swctl.idProcess=pid;
380 swctl.bProgType=PROG_DEFAULT;
381 swctl.fbJump=SWL_JUMPABLE;
382 WinAddSwitchEntry(&swctl);
383
384 adjustDialogControlPos(hwnd);
385
386 /* Set volume slider*/
387 WinSendMsg( WinWindowFromID(hwnd, IDSL_MMPLAYERVOLUME),
388 SLM_SETSLIDERINFO,
389 MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_INCREMENTVALUE),
390 MPFROMLONG( ulVolume));
391
392 FixSysMenu(hwnd);
393
394 /* Size dialog */
395 if(allBMPs[MAIN_BMP_IDX].hbm) {
396 SWP swp;
397 POINTL ptl;
398
399 WinQueryWindowPos(WinWindowFromID(hwnd, FID_TITLEBAR), &swp);
400 WinSetWindowPos(WinWindowFromID(hwnd, ID_CLASSVOLCLIENT), NULLHANDLE,
401 WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME),
402 WinQuerySysValue(HWND_DESKTOP, SV_CYDLGFRAME),
403 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx,
404 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy,
405 SWP_SIZE|SWP_MOVE);
406 orgBgProc=WinSubclassWindow(WinWindowFromID(hwnd, ID_CLASSVOLCLIENT), bgProc);
407
408 /* Get mouse position */
409 WinQueryPointerPos(HWND_DESKTOP, &ptl);
410 if(ptl.x+allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx > WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN))
411 ptl.x=WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN)-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx-20;
412
413 WinSetWindowPos(hwnd, HWND_TOP, ptl.x/*-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx/2*/,
414 ptl.y-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy ,
415 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx+WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME)*2,
416 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy+swp.cy+WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME)*2
417 , SWP_SIZE|SWP_MOVE|SWP_ACTIVATE);
418 }
419 /* Set dialog font to WarpSans for Warp 4 and above */
420 if(SysQueryOSRelease()>=40) {
421 WinSetPresParam(WinWindowFromID(hwnd, IDST_MMPLAYERPLAYTIME),
422 PP_FONTNAMESIZE,(ULONG)sizeof(DEFAULT_DIALOG_FONT),
423 DEFAULT_DIALOG_FONT );
424 }
425 return (MRESULT) TRUE;
426 }
427 case WM_CLOSE:
428 writeVolumeToIni(chrIniFile, ulVolume);
429 break;
430 /* The play control handling for starting, stopping etc. */
431 case WM_COMMAND:
432 {
433 switch(SHORT1FROMMP(mp1))
434 {
435 case ID_MENUITEMMASTERVOLUME:
436 {
437 HOBJECT hObject;
438 /* User selected master volume item from sys menu */
439 if((hObject=WinQueryObject("<MMPM2_MMVOLUME>"))!=NULLHANDLE) {
440 WinOpenObject(hObject,OPEN_DEFAULT,TRUE);
441 }
442 break;
443 }
444 default:
445 break;
446 }/* switch() */
447
448 return (MRESULT)FALSE;
449 }/* case */
450
451 /*****************************************************/
452 /* Draw the sliders. */
453 /*****************************************************/
454 case WM_DRAWITEM:
455 switch(SHORT1FROMMP(mp1))
456 {
457 case IDSL_MMPLAYERVOLUME:
458 return drawSlider(hwnd, msg, mp1, mp2, SHORT1FROMMP(mp1));
459 default:
460 break;
461 }
462 break;
463
464 /*****************************************************/
465 /* Control messages */
466 /*****************************************************/
467 case WM_CONTROL:
468 {
469 SWP swp;
470
471 switch(SHORT2FROMMP(mp1))
472 {
473 case BN_PAINT:
474 /* Paint the custom controls (buttons, sliders ) */
475 WinQueryWindowPos(hwnd,&swp);
476 if(swp.fl & SWP_MINIMIZE)
477 break;
478 return paintControls(hwnd, msg, mp1, mp2);
479 /*****************************************************/
480 /* Handle position and volume changes. */
481 /*****************************************************/
482 case SLN_SLIDERTRACK:
483 {
484 switch(SHORT1FROMMP(mp1))
485 {
486 case IDSL_MMPLAYERVOLUME:
487 {
488 ULONG ulValue;
489 char command[200];
490
491 ulValue=LONGFROMMP(mp2);
492
493 ulVolume=ulValue;
494 sprintf(command,"MMAUDIOVOLUME=%d", ulVolume);
495 sendCommandToObject(chrSourceName, command);
496 break;
497 }
498 default:
499 break;
500 }/* switch */
501 return (MRESULT) 0;
502 break;
503 }
504 case SLN_CHANGE:
505 {
506 switch(SHORT1FROMMP(mp1))
507 {
508 case IDSL_MMPLAYERVOLUME:
509 {
510 ULONG ulValue;
511
512 ulValue=LONGFROMMP(mp2);
513 ulVolume=ulValue;
514 // sprintf(chrCommand,"SET wave%ld AUDIO VOLUME %ld WAIT", ulPid, ulVolume);
515 // mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0);
516 break;
517 }
518 default:
519 break;
520 }/* switch */
521 return (MRESULT)TRUE;
522 }
523 default:
524 break;
525 }/* switch */
526 break;
527 }/* WM_CONTROL */
528 default:
529 break;
530 }/* switch */
531
532 return WinDefDlgProc( hwnd, msg, mp1, mp2);
533}
534
535
536int readVolumeFromIni(char * iniFile, int iDefault)
537{
538 return IniRestoreInt(iniFile, INI_CLASSVOLUME_APP, INI_VOLUME_KEY, iDefault);
539}
540
541BOOL writeVolumeToIni(char * iniFile, ULONG ulVolume)
542{
543
544 return IniSaveInt(iniFile, INI_CLASSVOLUME_APP, INI_VOLUME_KEY, ulVolume);
545}
546
547void sendCommandToObject(char* chrObject, char* command)
548{
549 static HOBJECT hObject;
550
551 if(!hObject) {
552 hObject=WinQueryObject(chrObject);
553 }
554 if(hObject!=NULLHANDLE)
555 WinSetObjectData(hObject, command);
556}
557
558int main (int argc, char *argv[])
559{
560 HAB hab;
561 HMQ hmq;
562 char text[CCHMAXPATH];
563 char title[CCHMAXPATH];
564 short a;
565
566 /* Create a copy of the args */
567 /* argv[0]: progname
568 * argv[1]: HWND object
569 */
570
571 numArgs=argc;
572
573 strcpy(text,"");
574 for(a=0;a<argc;a++)
575 {
576 params[a]=argv[a];
577 }
578
579 hab=WinInitialize(0);
580 if(hab) {
581 hmq=WinCreateMsgQueue(hab,0);
582 if(hmq) {
583 /* Check if user started prog by hand */
584 if(argc!=NUMPARAMS ) {/* Not the right num of params */
585 pmUsage();
586 }
587 else {
588 /* Save source name */
589 strcpy(chrSourceName, params[1]);
590 // if((chrPtrName=strrchr(chrSourceName, '\\'))!=NULLHANDLE)
591 // ++chrPtrName;
592 //SysWriteToTrapLog("Name: %s\n", chrSourceName);
593 /* Get our ressource dll */
594 RESSOURCEHANDLE=queryResModuleHandle(argv[0]);
595 /* Get data from INI file */
596 HlpBuildMMProgIniFileName(argv[0], chrIniFile, sizeof(chrIniFile));
597 ulVolume=readVolumeFromIni(chrIniFile, DEFAULT_VOLUME);
598
599 /* Load pointer for slider */
600 hptrArrowWE=WinLoadPointer(HWND_DESKTOP, BMP_RESSOURCEHANDLE /*_queryResModuleHandle()*/, IDPTR_ARROWWE);
601 /* Register the slider window class */
602 WinRegisterClass(WinQueryAnchorBlock(HWND_DESKTOP), SLIDER_CLASS, privateSliderProc,0, SLADDBYTES);
603
604 _loadBmps();
605
606 if( WinDlgBox( HWND_DESKTOP, NULLHANDLE, decodeStatusDialogProc,
607 RESSOURCEHANDLE, IDDLG_CLASSVOLUME, 0) == DID_ERROR )
608 {
609 /*
610 Text:
611 Title: "Installation problem"
612 */
613 messageBox( text, IDSTR_CONVERTDIALOGERROR , sizeof(text),
614 title, IDSTR_INSTALLERRORTITLE , sizeof(title),
615 RESSOURCEHANDLE, HWND_DESKTOP, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE);
616 freeResHandle();
617 WinDestroyMsgQueue( hmq );
618 WinTerminate( hab );
619 DosBeep(100,600);
620 return( 1 );
621 }
622 }
623 freeResHandle();
624 WinDestroyMsgQueue(hmq);
625 }
626 WinTerminate(hab);
627 }
628 return 0;
629}
630
Note: See TracBrowser for help on using the repository browser.