source: branches/classes/mm-progs/volume/classvol.c

Last change on this file was 145, checked in by gyoung, 19 months ago

Fix compiler warnings and a freespace check

File size: 22.3 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(void);
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(void);
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];
139static void _loadBmps(void);
140
141ULONG ulVolume=75;
142
143HWND hwndObject;
144
145HMODULE RESSOURCEHANDLE=0;
146
147HMODULE BMP_RESSOURCEHANDLE=0;
148
149PFNWP oldPlayTimeProc;
150PFNWP orgBgProc=NULLHANDLE; /* Org proc of background */
151PFNWP orgButtonProc=NULLHANDLE;
152
153HPOINTER hptrArrowWE=NULLHANDLE;
154
155static void _loadBmps()
156{
157 HPS hps;
158 HMODULE hResource;
159
160 if(allBMPs[MAIN_BMP_IDX].hbm)
161 return;
162
163 hResource=BMP_RESSOURCEHANDLE; //_queryResModuleHandle();
164 hps=WinGetPS(HWND_DESKTOP);
165
166 /* The main BMP */
167 allBMPs[MAIN_BMP_IDX].hbm=GpiLoadBitmap(hps, hResource, IDBMP_MAIN, 0, 0);
168 GpiQueryBitmapParameters(allBMPs[MAIN_BMP_IDX].hbm, &allBMPs[MAIN_BMP_IDX].bmpInfoHdr);
169
170#if 0
171 /* Stop */
172 allBMPs[CTRLIDX_STOPBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOP, 0, 0);
173 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTON].hbm, &allBMPs[CTRLIDX_STOPBUTTON].bmpInfoHdr);
174 ciControls[CTRLIDX_STOPBUTTON].hbmSource=allBMPs[CTRLIDX_STOPBUTTON].hbm;
175
176 /* Stop sel */
177 allBMPs[CTRLIDX_STOPBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOPSEL, 0, 0);
178 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTONSEL].hbm, &allBMPs[CTRLIDX_STOPBUTTONSEL].bmpInfoHdr);
179 ciControls[CTRLIDX_STOPBUTTONSEL].hbmSource=allBMPs[CTRLIDX_STOPBUTTONSEL].hbm;
180
181 /* Pause */
182 allBMPs[CTRLIDX_PAUSEBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSE, 0, 0);
183 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTON].hbm, &allBMPs[CTRLIDX_PAUSEBUTTON].bmpInfoHdr);
184 ciControls[CTRLIDX_PAUSEBUTTON].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTON].hbm;
185
186 /* Pause sel */
187 allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSESEL, 0, 0);
188 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm, &allBMPs[CTRLIDX_PAUSEBUTTONSEL].bmpInfoHdr);
189 ciControls[CTRLIDX_PAUSEBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm;
190
191 /* Play */
192 allBMPs[CTRLIDX_PLAYBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAY, 0, 0);
193 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTON].hbm, &allBMPs[CTRLIDX_PLAYBUTTON].bmpInfoHdr);
194 ciControls[CTRLIDX_PLAYBUTTON].hbmSource=allBMPs[CTRLIDX_PLAYBUTTON].hbm;
195
196 /* Play sel */
197 allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAYSEL, 0, 0);
198 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm, &allBMPs[CTRLIDX_PLAYBUTTONSEL].bmpInfoHdr);
199 ciControls[CTRLIDX_PLAYBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm;
200
201 /* Positionslider bg */
202 ciControls[CTRLIDX_POSSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
203
204 /* Positionslider arm */
205 allBMPs[CTRLIDX_POSSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_POSSLIDERARM, 0, 0);
206 GpiQueryBitmapParameters(allBMPs[CTRLIDX_POSSLIDERARM].hbm, &allBMPs[CTRLIDX_POSSLIDERARM].bmpInfoHdr);
207 ciControls[CTRLIDX_POSSLIDERARM].hbmSource=allBMPs[CTRLIDX_POSSLIDERARM].hbm;
208
209 /* Playtime text field */
210 ciControls[CTRLIDX_PLAYTIME].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
211#endif
212
213 /* Volume slider background */
214 ciControls[CTRLIDX_VOLSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
215
216 /* Volume slider arm */
217 allBMPs[CTRLIDX_VOLSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARM, 0, 0);
218 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARM].hbm, &allBMPs[CTRLIDX_VOLSLIDERARM].bmpInfoHdr);
219 ciControls[CTRLIDX_VOLSLIDERARM].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARM].hbm;
220
221 /* Volume slider arm selected*/
222 allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARMSEL, 0, 0);
223 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm, &allBMPs[CTRLIDX_VOLSLIDERARMSEL].bmpInfoHdr);
224 ciControls[CTRLIDX_VOLSLIDERARMSEL].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm;
225
226 WinReleasePS(hps);
227}
228
229
230/***********************************************************/
231/* */
232/* Move the controls to the position defined by the */
233/* background bitmap. */
234/* */
235/***********************************************************/
236void adjustDialogControlPos(HWND hwnd)
237{
238 CONTROLINFO ci;
239
240#if 0
241 ULONG ulStyle;
242 /* STOP button */
243 ci=ciControls[CTRLIDX_STOPBUTTON];
244 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
245 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
246 WinSetWindowPos(WinWindowFromID(hwnd, ci.id), HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
247 ci.rclDest.xRight-ci.rclDest.xLeft,
248 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
249 /* Pause button */
250 ci=ciControls[CTRLIDX_PAUSEBUTTON];
251 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
252 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
253 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
254 ci.rclDest.xRight-ci.rclDest.xLeft,
255 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
256 /* Play button */
257 ci=ciControls[CTRLIDX_PLAYBUTTON];
258 ulStyle=WinQueryWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE);
259 WinSetWindowULong(WinWindowFromID(hwnd, ci.id),QWL_STYLE,ulStyle|BS_USERBUTTON);
260 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft , ci.rclDest.yBottom,
261 ci.rclDest.xRight-ci.rclDest.xLeft,
262 ci.rclDest.yTop-ci.rclDest.yBottom, SWP_MOVE|SWP_SIZE);
263
264 /* Playtime text */
265 ci=ciControls[CTRLIDX_PLAYTIME];
266 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclSource.xLeft,ci.rclSource.yBottom,
267 ci.rclSource.xRight-ci.rclSource.xLeft,
268 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE|SWP_SIZE);
269 oldPlayTimeProc=WinSubclassWindow(WinWindowFromID(hwnd, IDST_MMPLAYERPLAYTIME), playTimeTextProc);
270
271 /* Pos slider */
272 ci=ciControls[CTRLIDX_POSSLIDER];//ciPosSlider;
273 WinCreateWindow(hwnd, SLIDER_CLASS, "", WS_VISIBLE | WS_TABSTOP, 0,0, 10, 10,
274 hwnd, HWND_TOP, ci.id, NULLHANDLE, NULLHANDLE);
275 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft, ci.rclDest.yBottom,
276 ci.rclSource.xRight-ci.rclSource.xLeft,
277 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE | SWP_SIZE);
278
279 WinSendMsg(WinWindowFromID(hwnd, ci.id),SLM_SETSLIDERINFO,
280 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS,0),
281 MPFROM2SHORT( 9, 9));
282#endif
283
284 /* Vol slider */
285 ci=ciControls[CTRLIDX_VOLSLIDER];//ciVolSlider;
286 WinCreateWindow(hwnd, SLIDER_CLASS, "", WS_VISIBLE | WS_TABSTOP, 0,0, 10, 10,
287 hwnd, HWND_TOP, ci.id, NULLHANDLE, NULLHANDLE);
288 WinSetWindowPos(WinWindowFromID(hwnd, ci.id),HWND_TOP, ci.rclDest.xLeft, ci.rclDest.yBottom,
289 ci.rclSource.xRight-ci.rclSource.xLeft,
290 ci.rclSource.yTop-ci.rclSource.yBottom, SWP_MOVE | SWP_SIZE);
291 WinSendMsg(WinWindowFromID(hwnd, ci.id),SLM_SETSLIDERINFO,
292 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS,0),
293 MPFROM2SHORT( 9, 9));
294
295}
296
297
298/****************************************************************
299 * FixSysMenu procedure
300 *--------------------------------------------------------------
301 *
302 * Name: FixSysMenu(HWND hwndDlg)
303 *
304 * Purpose: This routine removes the Restore, Size, Minimize, and
305 * Maximize options from the system menu of a dialog.
306 *
307 * Usage
308 *
309 * Method: Called during the WM_INITDLG of a dialog procedure.
310 *
311 * Returns: VOID
312 *
313 ****************************************************************/
314VOID FixSysMenu(HWND hwndDlg)
315{
316 HWND hwndMenu; /* Handle to system menu */
317 MENUITEM mi={0};
318
319 hwndMenu = WinWindowFromID(hwndDlg, FID_SYSMENU);
320
321
322 WinSendMsg(hwndMenu, /* Delete Restore from the system menu */
323 MM_DELETEITEM,
324 MPFROM2SHORT(SC_RESTORE, TRUE),
325 MPFROMP(NULL));
326
327 WinSendMsg(hwndMenu, /* Delete Size from the system menu */
328 MM_DELETEITEM,
329 MPFROM2SHORT(SC_SIZE, TRUE),
330 MPFROMP(NULL));
331
332 WinSendMsg(hwndMenu, /* Delete Minimize from the system menu */
333 MM_DELETEITEM,
334 MPFROM2SHORT(SC_MINIMIZE, TRUE),
335 MPFROMP(NULL));
336
337 WinSendMsg(hwndMenu, /* Delete Maximize from the system menu */
338 MM_DELETEITEM,
339 MPFROM2SHORT(SC_MAXIMIZE, TRUE),
340 MPFROMP(NULL));
341
342 WinSendMsg(hwndMenu, /* Delete Maximize from the system menu */
343 MM_DELETEITEM,
344 MPFROM2SHORT(SC_HIDE, TRUE),
345 MPFROMP(NULL));
346
347 if(WinSendMsg(hwndMenu, /* Get sys menu menuitem */
348 MM_QUERYITEM,
349 MPFROM2SHORT(SC_SYSMENU, FALSE),
350 MPFROMP(&mi)))
351 {
352 char chrText[100];
353 menuInsertMenuSeparator( mi.hwndSubMenu, NULLHANDLE, MIT_END);
354 if(!getMessage(chrText, IDSTR_MASTERVOLUMEITEM, sizeof(chrText), RESSOURCEHANDLE, hwndMenu))
355 strcpy(chrText, "Master ~Volume");
356 menuInsertMenuItem( mi.hwndSubMenu, NULLHANDLE, MIT_END, ID_MENUITEMMASTERVOLUME, chrText);
357 }
358 return;
359}
360
361
362/* This Proc handles the main dialog */
363MRESULT EXPENTRY decodeStatusDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
364{
365 // char text[CCHMAXPATH*4 +10];
366 // char title[CCHMAXPATH*4];
367 SWCNTRL swctl;
368 PID pid;
369
370 switch (msg)
371 {
372 case WM_INITDLG:
373 {
374
375 /* Add switch entry */
376 memset(&swctl,0,sizeof(swctl));
377 WinQueryWindowProcess(hwnd,&pid,NULL);
378 swctl.hwnd=hwnd;
379 swctl.uchVisibility=SWL_VISIBLE;
380 swctl.idProcess=pid;
381 swctl.bProgType=PROG_DEFAULT;
382 swctl.fbJump=SWL_JUMPABLE;
383 WinAddSwitchEntry(&swctl);
384
385 adjustDialogControlPos(hwnd);
386
387 /* Set volume slider*/
388 WinSendMsg( WinWindowFromID(hwnd, IDSL_MMPLAYERVOLUME),
389 SLM_SETSLIDERINFO,
390 MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_INCREMENTVALUE),
391 MPFROMLONG( ulVolume));
392
393 FixSysMenu(hwnd);
394
395 /* Size dialog */
396 if(allBMPs[MAIN_BMP_IDX].hbm) {
397 SWP swp;
398 POINTL ptl;
399
400 WinQueryWindowPos(WinWindowFromID(hwnd, FID_TITLEBAR), &swp);
401 WinSetWindowPos(WinWindowFromID(hwnd, ID_CLASSVOLCLIENT), NULLHANDLE,
402 WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME),
403 WinQuerySysValue(HWND_DESKTOP, SV_CYDLGFRAME),
404 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx,
405 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy,
406 SWP_SIZE|SWP_MOVE);
407 orgBgProc=WinSubclassWindow(WinWindowFromID(hwnd, ID_CLASSVOLCLIENT), bgProc);
408
409 /* Get mouse position */
410 WinQueryPointerPos(HWND_DESKTOP, &ptl);
411 if(ptl.x+allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx > WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN))
412 ptl.x=WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN)-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx-20;
413
414 WinSetWindowPos(hwnd, HWND_TOP, ptl.x/*-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx/2*/,
415 ptl.y-allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy ,
416 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cx+WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME)*2,
417 allBMPs[MAIN_BMP_IDX].bmpInfoHdr.cy+swp.cy+WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME)*2
418 , SWP_SIZE|SWP_MOVE|SWP_ACTIVATE);
419 }
420 /* Set dialog font to WarpSans for Warp 4 and above */
421 if(SysQueryOSRelease()>=40) {
422 WinSetPresParam(WinWindowFromID(hwnd, IDST_MMPLAYERPLAYTIME),
423 PP_FONTNAMESIZE,(ULONG)sizeof(DEFAULT_DIALOG_FONT),
424 DEFAULT_DIALOG_FONT );
425 }
426 return (MRESULT) TRUE;
427 }
428 case WM_CLOSE:
429 writeVolumeToIni(chrIniFile, ulVolume);
430 break;
431 /* The play control handling for starting, stopping etc. */
432 case WM_COMMAND:
433 {
434 switch(SHORT1FROMMP(mp1))
435 {
436 case ID_MENUITEMMASTERVOLUME:
437 {
438 HOBJECT hObject;
439 /* User selected master volume item from sys menu */
440 if((hObject=WinQueryObject("<MMPM2_MMVOLUME>"))!=NULLHANDLE) {
441 WinOpenObject(hObject,OPEN_DEFAULT,TRUE);
442 }
443 break;
444 }
445 default:
446 break;
447 }/* switch() */
448
449 return (MRESULT)FALSE;
450 }/* case */
451
452 /*****************************************************/
453 /* Draw the sliders. */
454 /*****************************************************/
455 case WM_DRAWITEM:
456 switch(SHORT1FROMMP(mp1))
457 {
458 case IDSL_MMPLAYERVOLUME:
459 return drawSlider(hwnd, msg, mp1, mp2, SHORT1FROMMP(mp1));
460 default:
461 break;
462 }
463 break;
464
465 /*****************************************************/
466 /* Control messages */
467 /*****************************************************/
468 case WM_CONTROL:
469 {
470 SWP swp;
471
472 switch(SHORT2FROMMP(mp1))
473 {
474 case BN_PAINT:
475 /* Paint the custom controls (buttons, sliders ) */
476 WinQueryWindowPos(hwnd,&swp);
477 if(swp.fl & SWP_MINIMIZE)
478 break;
479 return paintControls(hwnd, msg, mp1, mp2);
480 /*****************************************************/
481 /* Handle position and volume changes. */
482 /*****************************************************/
483 case SLN_SLIDERTRACK:
484 {
485 switch(SHORT1FROMMP(mp1))
486 {
487 case IDSL_MMPLAYERVOLUME:
488 {
489 ULONG ulValue;
490 char command[200];
491
492 ulValue=LONGFROMMP(mp2);
493
494 ulVolume=ulValue;
495 sprintf(command,"MMAUDIOVOLUME=%lu", ulVolume);
496 sendCommandToObject(chrSourceName, command);
497 break;
498 }
499 default:
500 break;
501 }/* switch */
502 return (MRESULT) 0;
503 break;
504 }
505 case SLN_CHANGE:
506 {
507 switch(SHORT1FROMMP(mp1))
508 {
509 case IDSL_MMPLAYERVOLUME:
510 {
511 ULONG ulValue;
512
513 ulValue=LONGFROMMP(mp2);
514 ulVolume=ulValue;
515 // sprintf(chrCommand,"SET wave%ld AUDIO VOLUME %ld WAIT", ulPid, ulVolume);
516 // mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0);
517 break;
518 }
519 default:
520 break;
521 }/* switch */
522 return (MRESULT)TRUE;
523 }
524 default:
525 break;
526 }/* switch */
527 break;
528 }/* WM_CONTROL */
529 default:
530 break;
531 }/* switch */
532
533 return WinDefDlgProc( hwnd, msg, mp1, mp2);
534}
535
536
537int readVolumeFromIni(char * iniFile, int iDefault)
538{
539 return IniRestoreInt(iniFile, INI_CLASSVOLUME_APP, INI_VOLUME_KEY, iDefault);
540}
541
542BOOL writeVolumeToIni(char * iniFile, ULONG ulVolume)
543{
544
545 return IniSaveInt(iniFile, INI_CLASSVOLUME_APP, INI_VOLUME_KEY, ulVolume);
546}
547
548void sendCommandToObject(char* chrObject, char* command)
549{
550 static HOBJECT hObject;
551
552 if(!hObject) {
553 hObject=WinQueryObject(chrObject);
554 }
555 if(hObject!=NULLHANDLE)
556 WinSetObjectData(hObject, command);
557}
558
559int main (int argc, char *argv[])
560{
561 HAB hab;
562 HMQ hmq;
563 char text[CCHMAXPATH];
564 char title[CCHMAXPATH];
565 short a;
566
567 /* Create a copy of the args */
568 /* argv[0]: progname
569 * argv[1]: HWND object
570 */
571
572 numArgs=argc;
573
574 strcpy(text,"");
575 for(a=0;a<argc;a++)
576 {
577 params[a]=argv[a];
578 }
579
580 hab=WinInitialize(0);
581 if(hab) {
582 hmq=WinCreateMsgQueue(hab,0);
583 if(hmq) {
584 /* Check if user started prog by hand */
585 if(argc!=NUMPARAMS ) {/* Not the right num of params */
586 pmUsage();
587 }
588 else {
589 /* Save source name */
590 strcpy(chrSourceName, params[1]);
591 // if((chrPtrName=strrchr(chrSourceName, '\\'))!=NULLHANDLE)
592 // ++chrPtrName;
593 //SysWriteToTrapLog("Name: %s\n", chrSourceName);
594 /* Get our ressource dll */
595 RESSOURCEHANDLE=queryResModuleHandle(argv[0]);
596 /* Get data from INI file */
597 HlpBuildMMProgIniFileName(argv[0], chrIniFile, sizeof(chrIniFile));
598 ulVolume=readVolumeFromIni(chrIniFile, DEFAULT_VOLUME);
599
600 /* Load pointer for slider */
601 hptrArrowWE=WinLoadPointer(HWND_DESKTOP, BMP_RESSOURCEHANDLE /*_queryResModuleHandle()*/, IDPTR_ARROWWE);
602 /* Register the slider window class */
603 WinRegisterClass(WinQueryAnchorBlock(HWND_DESKTOP), SLIDER_CLASS, privateSliderProc,0, SLADDBYTES);
604
605 _loadBmps();
606
607 if( WinDlgBox( HWND_DESKTOP, NULLHANDLE, decodeStatusDialogProc,
608 RESSOURCEHANDLE, IDDLG_CLASSVOLUME, 0) == DID_ERROR )
609 {
610 /*
611 Text:
612 Title: "Installation problem"
613 */
614 messageBox( text, IDSTR_CONVERTDIALOGERROR , sizeof(text),
615 title, IDSTR_INSTALLERRORTITLE , sizeof(title),
616 RESSOURCEHANDLE, HWND_DESKTOP, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE);
617 freeResHandle();
618 WinDestroyMsgQueue( hmq );
619 WinTerminate( hab );
620 DosBeep(100,600);
621 return( 1 );
622 }
623 }
624 freeResHandle();
625 WinDestroyMsgQueue(hmq);
626 }
627 WinTerminate(hab);
628 }
629 return 0;
630}
631
Note: See TracBrowser for help on using the repository browser.