| 1 | /* | 
|---|
| 2 | * pmwvinfo.c (C) Chris Wohlgemuth 2001 | 
|---|
| 3 | * | 
|---|
| 4 | * This helper shows the format of a wavefile in a dialog box | 
|---|
| 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 | #define INCL_DOS | 
|---|
| 22 | #define INCL_DOSFILEMGR | 
|---|
| 23 | #define INCL_DOSERRORS | 
|---|
| 24 | #define INCL_WIN | 
|---|
| 25 | #define INCL_OS2MM | 
|---|
| 26 | #define INCL_MMIOOS2 | 
|---|
| 27 | #define INCL_MCIOS2 | 
|---|
| 28 | #define INCL_REXXSAA | 
|---|
| 29 | #include <os2.h> | 
|---|
| 30 | //#include <rexxsaa.h>                   /* needed for RexxStart()     */ | 
|---|
| 31 | #include <sys\types.h> | 
|---|
| 32 | #include <sys\stat.h> | 
|---|
| 33 | #include <stdio.h> | 
|---|
| 34 | #include <string.h> | 
|---|
| 35 | #include "os2me.h" | 
|---|
| 36 | #include "pmtst.h" | 
|---|
| 37 |  | 
|---|
| 38 |  | 
|---|
| 39 | //#define DEBUG | 
|---|
| 40 |  | 
|---|
| 41 | #define CLASS_NAME "MY_WIN" | 
|---|
| 42 | #define SLIDERID   200 | 
|---|
| 43 |  | 
|---|
| 44 | char chrInstallDir[CCHMAXPATH]; | 
|---|
| 45 | char logName[]="WaveInfo.log"; | 
|---|
| 46 |  | 
|---|
| 47 | int numArgs; | 
|---|
| 48 | char* params[4]; | 
|---|
| 49 |  | 
|---|
| 50 | /* argv[0]: progname | 
|---|
| 51 | * argv[1]: installdir of Audio/Data-CD-Creator | 
|---|
| 52 | * argv[2]: wavefile | 
|---|
| 53 | */ | 
|---|
| 54 |  | 
|---|
| 55 | HWND hwndNew; | 
|---|
| 56 | PFNWP oldProc; | 
|---|
| 57 |  | 
|---|
| 58 | /* | 
|---|
| 59 | Sliderdata: | 
|---|
| 60 |  | 
|---|
| 61 | USHORT  sliderarmwidth | 
|---|
| 62 | USHORT  sliderarmheight | 
|---|
| 63 | USHORT  ptr position in sliderarm | 
|---|
| 64 |  | 
|---|
| 65 | */ | 
|---|
| 66 |  | 
|---|
| 67 |  | 
|---|
| 68 | ULONG rexxFunc1(PSZ name, PLONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring, LONG next) | 
|---|
| 69 | { | 
|---|
| 70 | PRXSTRING prx; | 
|---|
| 71 | char text[200]; | 
|---|
| 72 | DosBeep(1000, 100); | 
|---|
| 73 | DosBeep(2000, 100); | 
|---|
| 74 | DosBeep(3000, 100); | 
|---|
| 75 | DosBeep(2000, 100); | 
|---|
| 76 | DosBeep(1000, 100); | 
|---|
| 77 | prx=&argv[0]; | 
|---|
| 78 | //  prx=(RXSTRING*)(*prx); | 
|---|
| 79 |  | 
|---|
| 80 | sprintf(text, "%x %x %s %d  ", argc, prx->strlength, prx->strptr,123); | 
|---|
| 81 | WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, text, "", 1234, MB_OK|MB_MOVEABLE); | 
|---|
| 82 | prx++; | 
|---|
| 83 | sprintf(text, "%x %x %s %d  ", argc, prx->strlength, prx->strptr,123); | 
|---|
| 84 | WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, text, "", 1234, MB_OK|MB_MOVEABLE); | 
|---|
| 85 |  | 
|---|
| 86 | #if 0 | 
|---|
| 87 | if(argc==1) | 
|---|
| 88 | { | 
|---|
| 89 |  | 
|---|
| 90 | sprintf(text, "%s %x",argv[0].strptr, atol(argv[0].strptr)); | 
|---|
| 91 | WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, text, "", 1234, MB_OK|MB_MOVEABLE); | 
|---|
| 92 | } | 
|---|
| 93 | else | 
|---|
| 94 | { | 
|---|
| 95 | #endif | 
|---|
| 96 |  | 
|---|
| 97 | #if 0 | 
|---|
| 98 | } | 
|---|
| 99 | #endif | 
|---|
| 100 | return 0; | 
|---|
| 101 | } | 
|---|
| 102 |  | 
|---|
| 103 | #define SLIDERARMWITH    0 | 
|---|
| 104 | #define SLIDERARMHEIGHT  2 | 
|---|
| 105 | #define PTRPOSINSLARM    4 | 
|---|
| 106 | #define USRESERVED1      6 | 
|---|
| 107 | #define SLIDERCX         8   /* ULONG */ | 
|---|
| 108 | #define SLIDERCY         12  /* ULONG */ | 
|---|
| 109 | #define SLIDERX          16   /* ULONG */ | 
|---|
| 110 | #define SLIDERY          20  /* ULONG */ | 
|---|
| 111 | #define SLIDERARMPOS     24  /* LONG  */ | 
|---|
| 112 | #define SLDRAGGING       28  /* BOOL  */ | 
|---|
| 113 |  | 
|---|
| 114 | #define SLADDBYTES       32 | 
|---|
| 115 |  | 
|---|
| 116 | //USHORT usWidth=10; | 
|---|
| 117 |  | 
|---|
| 118 | //USHORT usHeight=10; | 
|---|
| 119 | //USHORT usPosInSl=0; | 
|---|
| 120 | //USHORT usReserved1; | 
|---|
| 121 | //ULONG  ulSlidercx; | 
|---|
| 122 | //ULONG  ulSlidercy; | 
|---|
| 123 | //LONG lPos=0; | 
|---|
| 124 | //BOOL bDragging=FALSE; | 
|---|
| 125 |  | 
|---|
| 126 | //SWP swpSl; | 
|---|
| 127 |  | 
|---|
| 128 | char text[200]; | 
|---|
| 129 |  | 
|---|
| 130 | #if 0 | 
|---|
| 131 | MRESULT EXPENTRY newProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) | 
|---|
| 132 | { | 
|---|
| 133 |  | 
|---|
| 134 | switch (msg) | 
|---|
| 135 | { | 
|---|
| 136 | case WM_CREATE: | 
|---|
| 137 | { | 
|---|
| 138 | PCREATESTRUCT pCreate=PVOIDFROMMP(mp2); | 
|---|
| 139 |  | 
|---|
| 140 | /* Initialize the slider data */ | 
|---|
| 141 | WinSetWindowUShort(hwnd, SLIDERARMWITH,20); | 
|---|
| 142 | WinSetWindowUShort(hwnd, SLIDERARMHEIGHT,10); | 
|---|
| 143 | /* Dimensions of slider. The slider active area is smaller than the window to | 
|---|
| 144 | allow drawing of active state. */ | 
|---|
| 145 | WinSetWindowULong(hwnd, SLIDERCX,pCreate->cx-4); | 
|---|
| 146 | WinSetWindowULong(hwnd, SLIDERCY,pCreate->cy-4); | 
|---|
| 147 | WinSetWindowULong(hwnd, SLIDERX,2); | 
|---|
| 148 | WinSetWindowULong(hwnd, SLIDERY,2); | 
|---|
| 149 | WinSetWindowULong(hwnd, SLIDERARMPOS, 0); | 
|---|
| 150 | WinSetWindowULong(hwnd, SLDRAGGING,FALSE); | 
|---|
| 151 | return (MRESULT)0; | 
|---|
| 152 | } | 
|---|
| 153 | case WM_SIZE: | 
|---|
| 154 | WinSetWindowULong(hwnd, SLIDERCX, SHORT1FROMMP(mp2)-4); | 
|---|
| 155 | WinSetWindowULong(hwnd, SLIDERCY, SHORT2FROMMP(mp2)-4); | 
|---|
| 156 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 157 | return (MRESULT)0; | 
|---|
| 158 | case WM_BUTTON1DOWN: | 
|---|
| 159 | { | 
|---|
| 160 | SHORT x=SHORT1FROMMP( mp1); | 
|---|
| 161 | SHORT y=SHORT2FROMMP( mp1); | 
|---|
| 162 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 163 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 164 | #if 0 | 
|---|
| 165 | sprintf(text,"%d %d %d %d", WinQueryWindowUShort(hwnd, SLIDERY) ,WinQueryWindowUShort(hwnd, SLIDERCY) | 
|---|
| 166 | ,x, y); | 
|---|
| 167 | WinMessageBox( HWND_DESKTOP, HWND_DESKTOP, text, | 
|---|
| 168 | "", | 
|---|
| 169 | 0UL, MB_OK | MB_ICONEXCLAMATION|MB_MOVEABLE ); | 
|---|
| 170 | #endif | 
|---|
| 171 | if(x<lPos+usWidth && y<WinQueryWindowUShort(hwnd, SLIDERY)+WinQueryWindowUShort(hwnd, SLIDERCY) | 
|---|
| 172 | && y>WinQueryWindowUShort(hwnd, SLIDERY)) { | 
|---|
| 173 | WinSetWindowUShort(hwnd, PTRPOSINSLARM, x-lPos); | 
|---|
| 174 | } | 
|---|
| 175 | WinSetFocus(HWND_DESKTOP, hwnd); | 
|---|
| 176 | break; | 
|---|
| 177 | } | 
|---|
| 178 | case WM_FOCUSCHANGE: | 
|---|
| 179 | { | 
|---|
| 180 | HPS hps; | 
|---|
| 181 | RECTL rcl; | 
|---|
| 182 | POINTL ptl; | 
|---|
| 183 |  | 
|---|
| 184 | if(SHORT1FROMMP(mp2)) { | 
|---|
| 185 | hps=WinGetPS(hwnd); | 
|---|
| 186 | WinQueryWindowRect(hwnd, &rcl); | 
|---|
| 187 | GpiSetLineType(hps, LINETYPE_DOT); | 
|---|
| 188 | ptl.x=rcl.xLeft; | 
|---|
| 189 | ptl.y=rcl.yBottom; | 
|---|
| 190 | GpiMove(hps,&ptl); | 
|---|
| 191 | ptl.x=rcl.xRight-1; | 
|---|
| 192 | GpiLine(hps,&ptl); | 
|---|
| 193 | ptl.y=rcl.yTop-1; | 
|---|
| 194 | GpiLine(hps,&ptl); | 
|---|
| 195 | ptl.x=rcl.xLeft; | 
|---|
| 196 | GpiLine(hps,&ptl); | 
|---|
| 197 | ptl.y=rcl.yBottom; | 
|---|
| 198 | GpiLine(hps,&ptl); | 
|---|
| 199 | WinReleasePS(hps); | 
|---|
| 200 | } | 
|---|
| 201 | else { | 
|---|
| 202 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 203 | } | 
|---|
| 204 |  | 
|---|
| 205 | break; | 
|---|
| 206 | } | 
|---|
| 207 | case WM_CHAR: | 
|---|
| 208 | if(WinQueryFocus(HWND_DESKTOP)==hwnd) { | 
|---|
| 209 | /* We have the focus */ | 
|---|
| 210 | if((SHORT1FROMMP(mp1) & (KC_VIRTUALKEY))==(KC_VIRTUALKEY)) { | 
|---|
| 211 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 212 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 213 | ULONG ulCx=WinQueryWindowULong(hwnd, SLIDERCX); | 
|---|
| 214 |  | 
|---|
| 215 | /*(KC_KEYUP|KC_PREVDOWN|KC_VIRTUALKEY)*/ | 
|---|
| 216 | switch(SHORT2FROMMP(mp2)) | 
|---|
| 217 | { | 
|---|
| 218 | case VK_RIGHT: | 
|---|
| 219 | if(SHORT1FROMMP(mp1) & (KC_KEYUP|KC_PREVDOWN)) { | 
|---|
| 220 | lPos+=2; | 
|---|
| 221 | if(lPos>ulCx-usWidth) | 
|---|
| 222 | lPos=ulCx-usWidth; | 
|---|
| 223 | else { | 
|---|
| 224 | WinPostMsg( hwnd, | 
|---|
| 225 | SLM_SETSLIDERINFO, | 
|---|
| 226 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 227 | MPFROMLONG( (LONG) lPos )); | 
|---|
| 228 | /* Post SLN_CHANGE notification */ | 
|---|
| 229 | WinPostMsg( WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, | 
|---|
| 230 | MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 231 | MPFROMLONG(WinQueryWindowULong(hwnd, SLIDERARMPOS))); | 
|---|
| 232 | } | 
|---|
| 233 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 234 | } | 
|---|
| 235 | return (MRESULT)TRUE; | 
|---|
| 236 | case VK_LEFT: | 
|---|
| 237 | if(SHORT1FROMMP(mp1) & (KC_KEYUP|KC_PREVDOWN)) { | 
|---|
| 238 | lPos-=2; | 
|---|
| 239 | if(lPos<0) { | 
|---|
| 240 | lPos=0; | 
|---|
| 241 | } | 
|---|
| 242 | else { | 
|---|
| 243 | WinPostMsg( hwnd, | 
|---|
| 244 | SLM_SETSLIDERINFO, | 
|---|
| 245 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 246 | MPFROMLONG( (LONG) lPos )); | 
|---|
| 247 | /* Post SLN_CHANGE notification */ | 
|---|
| 248 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_CONTROL, | 
|---|
| 249 | MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 250 | MPFROMLONG(WinQueryWindowULong(hwnd, SLIDERARMPOS))); | 
|---|
| 251 |  | 
|---|
| 252 | } | 
|---|
| 253 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 254 | } | 
|---|
| 255 | return (MRESULT)TRUE; | 
|---|
| 256 | default: | 
|---|
| 257 | break; | 
|---|
| 258 | } | 
|---|
| 259 | } | 
|---|
| 260 | } | 
|---|
| 261 | break; | 
|---|
| 262 | case WM_BUTTON1MOTIONSTART: | 
|---|
| 263 | { | 
|---|
| 264 | SHORT x=SHORT1FROMMP( mp1); | 
|---|
| 265 | SHORT y=SHORT2FROMMP( mp1); | 
|---|
| 266 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 267 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 268 |  | 
|---|
| 269 | if(x<lPos+usWidth && y<WinQueryWindowUShort(hwnd, SLIDERY)+WinQueryWindowUShort(hwnd, SLIDERCY) | 
|---|
| 270 | && y>WinQueryWindowUShort(hwnd, SLIDERY)) { | 
|---|
| 271 | WinSetWindowULong(hwnd, SLDRAGGING, TRUE); | 
|---|
| 272 | WinSetCapture(HWND_DESKTOP, hwnd); | 
|---|
| 273 | } | 
|---|
| 274 | break; | 
|---|
| 275 | } | 
|---|
| 276 | case WM_BUTTON1MOTIONEND: | 
|---|
| 277 | if(WinQueryWindowULong(hwnd, SLDRAGGING)) { | 
|---|
| 278 | WinSetWindowULong(hwnd, SLDRAGGING,FALSE); | 
|---|
| 279 | WinSetCapture(HWND_DESKTOP, NULLHANDLE); | 
|---|
| 280 | /* Post SLN_CHANGE notification */ | 
|---|
| 281 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 282 | MPFROMLONG(WinQueryWindowULong(hwnd, SLIDERARMPOS))); | 
|---|
| 283 | } | 
|---|
| 284 | break; | 
|---|
| 285 | case SLM_SETSLIDERINFO: | 
|---|
| 286 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 287 | { | 
|---|
| 288 | case SMA_SLIDERARMPOSITION: | 
|---|
| 289 | /*  SMA_RANGEVALUE only for now !! */ | 
|---|
| 290 | if(SHORT2FROMMP(mp1)==SMA_RANGEVALUE) { | 
|---|
| 291 | WinSetWindowULong(hwnd, SLIDERARMPOS, LONGFROMMP(mp2)); | 
|---|
| 292 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 293 | return (MRESULT)0; | 
|---|
| 294 | } | 
|---|
| 295 | break; | 
|---|
| 296 | default: | 
|---|
| 297 | break; | 
|---|
| 298 | } | 
|---|
| 299 | break; | 
|---|
| 300 | case WM_MOUSEMOVE: | 
|---|
| 301 | if(WinQueryWindowULong(hwnd, SLDRAGGING)) { | 
|---|
| 302 | HPS hps; | 
|---|
| 303 | RECTL rcl, rcl2, rcl3; | 
|---|
| 304 | LONG lTemp; | 
|---|
| 305 | SHORT x=SHORT1FROMMP(mp1); | 
|---|
| 306 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 307 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 308 |  | 
|---|
| 309 | lTemp=lPos; | 
|---|
| 310 |  | 
|---|
| 311 | rcl.xLeft=WinQueryWindowULong(hwnd, SLIDERX); | 
|---|
| 312 | rcl.yBottom=WinQueryWindowULong(hwnd, SLIDERY); | 
|---|
| 313 | rcl.xRight=rcl.xLeft+WinQueryWindowULong(hwnd, SLIDERCX); | 
|---|
| 314 | rcl.yTop=rcl.yBottom+WinQueryWindowULong(hwnd, SLIDERCY); | 
|---|
| 315 |  | 
|---|
| 316 | rcl2=rcl3=rcl; | 
|---|
| 317 | rcl.xLeft=x-WinQueryWindowUShort(hwnd, PTRPOSINSLARM); | 
|---|
| 318 | if(rcl.xLeft<rcl2.xLeft)/* Make sure we stop at the left border */ | 
|---|
| 319 | rcl.xLeft=rcl2.xLeft; | 
|---|
| 320 |  | 
|---|
| 321 | rcl.xRight=rcl.xLeft+usWidth; | 
|---|
| 322 | if(rcl.xRight>rcl2.xRight) | 
|---|
| 323 | {/* Make sure we stop at the right border */ | 
|---|
| 324 | rcl.xRight=rcl2.xRight; | 
|---|
| 325 | rcl.xLeft=rcl.xRight-usWidth; | 
|---|
| 326 | } | 
|---|
| 327 | lPos=rcl.xLeft-WinQueryWindowULong(hwnd, SLIDERX);/* Save position zero based */ | 
|---|
| 328 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 329 | if(lPos!=lTemp) { | 
|---|
| 330 | hps=WinGetPS(hwnd); | 
|---|
| 331 | /* Paint Background not necessary here */ | 
|---|
| 332 | /* Shaft */ | 
|---|
| 333 | /* Left part */ | 
|---|
| 334 | rcl3.xRight=rcl.xLeft; | 
|---|
| 335 | WinFillRect(hps, &rcl3, CLR_GREEN); | 
|---|
| 336 | /* Right part */ | 
|---|
| 337 | rcl3.xRight=rcl2.xRight; | 
|---|
| 338 | rcl3.xLeft=rcl.xRight; | 
|---|
| 339 | WinFillRect(hps, &rcl3, CLR_WHITE); | 
|---|
| 340 |  | 
|---|
| 341 | /* Paint Slider */ | 
|---|
| 342 | WinFillRect(hps,&rcl, CLR_BLUE); | 
|---|
| 343 | WinDrawBorder(hps, &rcl, 2, 2, 0, 0 ,0x0400); | 
|---|
| 344 |  | 
|---|
| 345 | WinReleasePS(hps); | 
|---|
| 346 | /* Post SLN_SLIDERTRACK notification */ | 
|---|
| 347 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_SLIDERTRACK), | 
|---|
| 348 | MPFROMLONG(lPos)); | 
|---|
| 349 | } | 
|---|
| 350 | } | 
|---|
| 351 | break; | 
|---|
| 352 | case WM_PAINT: | 
|---|
| 353 | { | 
|---|
| 354 | HPS hps, hps2; | 
|---|
| 355 | RECTL rcl, rcl2, rcl3; | 
|---|
| 356 | POINTL ptl; | 
|---|
| 357 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 358 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 359 |  | 
|---|
| 360 | WinQueryWindowRect(hwnd, &rcl); | 
|---|
| 361 |  | 
|---|
| 362 | /* Shaft */ | 
|---|
| 363 | rcl2.xLeft=WinQueryWindowULong(hwnd, SLIDERX); | 
|---|
| 364 | rcl2.yBottom=WinQueryWindowULong(hwnd, SLIDERY); | 
|---|
| 365 | rcl2.xRight=rcl2.xLeft+WinQueryWindowULong(hwnd, SLIDERCX)-1; | 
|---|
| 366 | rcl2.yTop=rcl2.yBottom+WinQueryWindowULong(hwnd, SLIDERCY)-1; | 
|---|
| 367 |  | 
|---|
| 368 | /* Background */ | 
|---|
| 369 | hps2=WinGetPS(hwnd); | 
|---|
| 370 | GpiExcludeClipRectangle(hps2,&rcl2); | 
|---|
| 371 | WinFillRect(hps2, &rcl, CLR_PALEGRAY); | 
|---|
| 372 | WinReleasePS(hps2); | 
|---|
| 373 | rcl2.yTop+=1; | 
|---|
| 374 | rcl2.xRight+=1; | 
|---|
| 375 |  | 
|---|
| 376 | hps=WinBeginPaint(hwnd, NULLHANDLE, NULLHANDLE); | 
|---|
| 377 | /* Focus */ | 
|---|
| 378 | if(WinQueryFocus(HWND_DESKTOP)==hwnd) { | 
|---|
| 379 | GpiSetLineType(hps, LINETYPE_DOT); | 
|---|
| 380 | ptl.x=rcl.xLeft; | 
|---|
| 381 | ptl.y=rcl.yBottom; | 
|---|
| 382 | GpiMove(hps,&ptl); | 
|---|
| 383 | ptl.x=rcl.xRight-1; | 
|---|
| 384 | GpiLine(hps,&ptl); | 
|---|
| 385 | ptl.y=rcl.yTop-1; | 
|---|
| 386 | GpiLine(hps,&ptl); | 
|---|
| 387 | ptl.x=rcl.xLeft; | 
|---|
| 388 | GpiLine(hps,&ptl); | 
|---|
| 389 | ptl.y=rcl.yBottom; | 
|---|
| 390 | GpiLine(hps,&ptl); | 
|---|
| 391 | } | 
|---|
| 392 |  | 
|---|
| 393 | rcl3=rcl=rcl2; | 
|---|
| 394 |  | 
|---|
| 395 | /* Arm pos */ | 
|---|
| 396 | rcl2.xLeft+=lPos; | 
|---|
| 397 | /* Arm size */ | 
|---|
| 398 | rcl2.xRight=rcl2.xLeft+usWidth; | 
|---|
| 399 |  | 
|---|
| 400 | /* Shaft */ | 
|---|
| 401 | /* Left part */ | 
|---|
| 402 | rcl3.xRight=rcl2.xLeft; | 
|---|
| 403 | WinFillRect(hps, &rcl3, CLR_GREEN); | 
|---|
| 404 |  | 
|---|
| 405 | /* Right part */ | 
|---|
| 406 | rcl3.xRight=rcl.xRight; | 
|---|
| 407 | rcl3.xLeft=rcl2.xRight; | 
|---|
| 408 | WinFillRect(hps, &rcl3, CLR_WHITE); | 
|---|
| 409 |  | 
|---|
| 410 | WinFillRect(hps,&rcl2, CLR_BLUE); | 
|---|
| 411 | WinDrawBorder(hps, &rcl2, 2, 2, 0, 0 ,0x0400); | 
|---|
| 412 |  | 
|---|
| 413 | WinEndPaint(hps); | 
|---|
| 414 | return (MRESULT)0; | 
|---|
| 415 | } | 
|---|
| 416 | break; | 
|---|
| 417 | default: | 
|---|
| 418 | break; | 
|---|
| 419 | } | 
|---|
| 420 |  | 
|---|
| 421 | return WinDefWindowProc(hwnd, msg, mp1, mp2); | 
|---|
| 422 | } | 
|---|
| 423 | #endif | 
|---|
| 424 |  | 
|---|
| 425 |  | 
|---|
| 426 |  | 
|---|
| 427 |  | 
|---|
| 428 |  | 
|---|
| 429 |  | 
|---|
| 430 |  | 
|---|
| 431 |  | 
|---|
| 432 |  | 
|---|
| 433 |  | 
|---|
| 434 | #define USERSLIDER 1 | 
|---|
| 435 |  | 
|---|
| 436 | MRESULT EXPENTRY newProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) | 
|---|
| 437 | { | 
|---|
| 438 |  | 
|---|
| 439 | switch (msg) | 
|---|
| 440 | { | 
|---|
| 441 | case WM_CREATE: | 
|---|
| 442 | { | 
|---|
| 443 | PCREATESTRUCT pCreate=PVOIDFROMMP(mp2); | 
|---|
| 444 |  | 
|---|
| 445 | /* Initialize the slider data */ | 
|---|
| 446 | WinSetWindowUShort(hwnd, SLIDERARMWITH,20); | 
|---|
| 447 | WinSetWindowUShort(hwnd, SLIDERARMHEIGHT,10); | 
|---|
| 448 | /* Dimensions of slider. The slider active area is smaller than the window to | 
|---|
| 449 | allow drawing of active state. */ | 
|---|
| 450 | WinSetWindowULong(hwnd, SLIDERCX,pCreate->cx-4); | 
|---|
| 451 | WinSetWindowULong(hwnd, SLIDERCY,pCreate->cy-4); | 
|---|
| 452 | WinSetWindowULong(hwnd, SLIDERX,2); | 
|---|
| 453 | WinSetWindowULong(hwnd, SLIDERY,2); | 
|---|
| 454 | WinSetWindowULong(hwnd, SLIDERARMPOS, 0); | 
|---|
| 455 | WinSetWindowULong(hwnd, SLDRAGGING,FALSE); | 
|---|
| 456 | return (MRESULT)0; | 
|---|
| 457 | } | 
|---|
| 458 | case WM_SIZE: | 
|---|
| 459 | WinSetWindowULong(hwnd, SLIDERCX, SHORT1FROMMP(mp2)-4); | 
|---|
| 460 | WinSetWindowULong(hwnd, SLIDERCY, SHORT2FROMMP(mp2)-4); | 
|---|
| 461 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 462 | return (MRESULT)0; | 
|---|
| 463 | case WM_BUTTON1DOWN: | 
|---|
| 464 | { | 
|---|
| 465 | SHORT x=SHORT1FROMMP( mp1); | 
|---|
| 466 | SHORT y=SHORT2FROMMP( mp1); | 
|---|
| 467 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 468 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 469 |  | 
|---|
| 470 | if(x<lPos+usWidth && y<WinQueryWindowUShort(hwnd, SLIDERY)+WinQueryWindowUShort(hwnd, SLIDERCY) | 
|---|
| 471 | && y>WinQueryWindowUShort(hwnd, SLIDERY)) { | 
|---|
| 472 | WinSetWindowUShort(hwnd, PTRPOSINSLARM, x-lPos); | 
|---|
| 473 | } | 
|---|
| 474 | WinSetFocus(HWND_DESKTOP, hwnd); | 
|---|
| 475 | break; | 
|---|
| 476 | } | 
|---|
| 477 | case WM_FOCUSCHANGE: | 
|---|
| 478 | { | 
|---|
| 479 | HPS hps; | 
|---|
| 480 | RECTL rcl; | 
|---|
| 481 | POINTL ptl; | 
|---|
| 482 |  | 
|---|
| 483 | if(SHORT1FROMMP(mp2)) { | 
|---|
| 484 | hps=WinGetPS(hwnd); | 
|---|
| 485 | WinQueryWindowRect(hwnd, &rcl); | 
|---|
| 486 | GpiSetLineType(hps, LINETYPE_DOT); | 
|---|
| 487 | ptl.x=rcl.xLeft; | 
|---|
| 488 | ptl.y=rcl.yBottom; | 
|---|
| 489 | GpiMove(hps,&ptl); | 
|---|
| 490 | ptl.x=rcl.xRight-1; | 
|---|
| 491 | GpiLine(hps,&ptl); | 
|---|
| 492 | ptl.y=rcl.yTop-1; | 
|---|
| 493 | GpiLine(hps,&ptl); | 
|---|
| 494 | ptl.x=rcl.xLeft; | 
|---|
| 495 | GpiLine(hps,&ptl); | 
|---|
| 496 | ptl.y=rcl.yBottom; | 
|---|
| 497 | GpiLine(hps,&ptl); | 
|---|
| 498 | WinReleasePS(hps); | 
|---|
| 499 | } | 
|---|
| 500 | else { | 
|---|
| 501 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 502 | } | 
|---|
| 503 |  | 
|---|
| 504 | break; | 
|---|
| 505 | } | 
|---|
| 506 | case WM_CHAR: | 
|---|
| 507 | if(WinQueryFocus(HWND_DESKTOP)==hwnd) { | 
|---|
| 508 | /* We have the focus */ | 
|---|
| 509 | if((SHORT1FROMMP(mp1) & (KC_VIRTUALKEY))==(KC_VIRTUALKEY)) { | 
|---|
| 510 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 511 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 512 | ULONG ulCx=WinQueryWindowULong(hwnd, SLIDERCX); | 
|---|
| 513 | #if 0 | 
|---|
| 514 | FILE* file; | 
|---|
| 515 | file=fopen("d:\\md.log","a"); | 
|---|
| 516 | fprintf(file,"0x%x 0x%x \n",SHORT1FROMMP(mp1),SHORT2FROMMP(mp1) ); | 
|---|
| 517 | fclose(file); | 
|---|
| 518 | #endif | 
|---|
| 519 | /*(KC_KEYUP|KC_PREVDOWN|KC_VIRTUALKEY)*/ | 
|---|
| 520 | switch(SHORT2FROMMP(mp2)) | 
|---|
| 521 | { | 
|---|
| 522 | case VK_RIGHT: | 
|---|
| 523 |  | 
|---|
| 524 | if(SHORT1FROMMP(mp1) & (KC_KEYUP|KC_PREVDOWN)) { | 
|---|
| 525 | lPos+=2; | 
|---|
| 526 | if(lPos>ulCx-usWidth) | 
|---|
| 527 | lPos=ulCx-usWidth; | 
|---|
| 528 | else { | 
|---|
| 529 | WinPostMsg( hwnd, | 
|---|
| 530 | SLM_SETSLIDERINFO, | 
|---|
| 531 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 532 | MPFROMLONG( (LONG) lPos )); | 
|---|
| 533 | if(SHORT1FROMMP(mp1) & KC_LONEKEY) | 
|---|
| 534 | /* Post SLN_CHANGE notification */ | 
|---|
| 535 | WinPostMsg( WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, | 
|---|
| 536 | MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 537 | MPFROMLONG(lPos)); | 
|---|
| 538 | else | 
|---|
| 539 | /* Post SLN_SLIDERTRACK notification */ | 
|---|
| 540 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, | 
|---|
| 541 | MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_SLIDERTRACK), | 
|---|
| 542 | MPFROMLONG(lPos)); | 
|---|
| 543 |  | 
|---|
| 544 | } | 
|---|
| 545 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 546 | } | 
|---|
| 547 | return (MRESULT)TRUE; | 
|---|
| 548 | case VK_LEFT: | 
|---|
| 549 | if(SHORT1FROMMP(mp1) & (KC_KEYUP|KC_PREVDOWN)) { | 
|---|
| 550 | lPos-=2; | 
|---|
| 551 | if(lPos<0) { | 
|---|
| 552 | lPos=0; | 
|---|
| 553 | } | 
|---|
| 554 | else { | 
|---|
| 555 | WinPostMsg( hwnd, | 
|---|
| 556 | SLM_SETSLIDERINFO, | 
|---|
| 557 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 558 | MPFROMLONG( (LONG) lPos )); | 
|---|
| 559 | /* Post SLN_CHANGE notification */ | 
|---|
| 560 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_CONTROL, | 
|---|
| 561 | MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 562 | MPFROMLONG(WinQueryWindowULong(hwnd, SLIDERARMPOS))); | 
|---|
| 563 |  | 
|---|
| 564 | } | 
|---|
| 565 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 566 | } | 
|---|
| 567 | return (MRESULT)TRUE; | 
|---|
| 568 | default: | 
|---|
| 569 | break; | 
|---|
| 570 | } | 
|---|
| 571 | } | 
|---|
| 572 | } | 
|---|
| 573 | break; | 
|---|
| 574 | case WM_BUTTON1MOTIONSTART: | 
|---|
| 575 | { | 
|---|
| 576 | SHORT x=SHORT1FROMMP( mp1); | 
|---|
| 577 | SHORT y=SHORT2FROMMP( mp1); | 
|---|
| 578 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 579 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 580 |  | 
|---|
| 581 | if(x<lPos+usWidth && y<WinQueryWindowUShort(hwnd, SLIDERY)+WinQueryWindowUShort(hwnd, SLIDERCY) | 
|---|
| 582 | && y>WinQueryWindowUShort(hwnd, SLIDERY)) { | 
|---|
| 583 | WinSetWindowULong(hwnd, SLDRAGGING, TRUE); | 
|---|
| 584 | WinSetCapture(HWND_DESKTOP, hwnd); | 
|---|
| 585 | } | 
|---|
| 586 | break; | 
|---|
| 587 | } | 
|---|
| 588 | case WM_BUTTON1MOTIONEND: | 
|---|
| 589 | if(WinQueryWindowULong(hwnd, SLDRAGGING)) { | 
|---|
| 590 | WinSetWindowULong(hwnd, SLDRAGGING,FALSE); | 
|---|
| 591 | WinSetCapture(HWND_DESKTOP, NULLHANDLE); | 
|---|
| 592 | /* Post SLN_CHANGE notification */ | 
|---|
| 593 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_CHANGE), | 
|---|
| 594 | MPFROMLONG(WinQueryWindowULong(hwnd, SLIDERARMPOS))); | 
|---|
| 595 | } | 
|---|
| 596 | break; | 
|---|
| 597 | case SLM_SETSLIDERINFO: | 
|---|
| 598 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 599 | { | 
|---|
| 600 | case SMA_SLIDERARMPOSITION: | 
|---|
| 601 | /*  SMA_RANGEVALUE only for now !! */ | 
|---|
| 602 | if(SHORT2FROMMP(mp1)==SMA_RANGEVALUE) { | 
|---|
| 603 | WinSetWindowULong(hwnd, SLIDERARMPOS, LONGFROMMP(mp2)); | 
|---|
| 604 | WinInvalidateRect(hwnd, NULLHANDLE,TRUE); | 
|---|
| 605 | return (MRESULT)0; | 
|---|
| 606 | } | 
|---|
| 607 | break; | 
|---|
| 608 | default: | 
|---|
| 609 | break; | 
|---|
| 610 | } | 
|---|
| 611 | break; | 
|---|
| 612 | case WM_MOUSEMOVE: | 
|---|
| 613 | if(WinQueryWindowULong(hwnd, SLDRAGGING)) { | 
|---|
| 614 | HPS hps; | 
|---|
| 615 | RECTL rcl, rcl2, rcl3; | 
|---|
| 616 | LONG lTemp; | 
|---|
| 617 | SHORT x=SHORT1FROMMP(mp1); | 
|---|
| 618 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 619 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 620 |  | 
|---|
| 621 | lTemp=lPos; | 
|---|
| 622 |  | 
|---|
| 623 | rcl.xLeft=WinQueryWindowULong(hwnd, SLIDERX); | 
|---|
| 624 | rcl.yBottom=WinQueryWindowULong(hwnd, SLIDERY); | 
|---|
| 625 | rcl.xRight=rcl.xLeft+WinQueryWindowULong(hwnd, SLIDERCX); | 
|---|
| 626 | rcl.yTop=rcl.yBottom+WinQueryWindowULong(hwnd, SLIDERCY); | 
|---|
| 627 |  | 
|---|
| 628 | rcl2=rcl3=rcl; | 
|---|
| 629 | rcl.xLeft=x-WinQueryWindowUShort(hwnd, PTRPOSINSLARM); | 
|---|
| 630 | if(rcl.xLeft<rcl2.xLeft)/* Make sure we stop at the left border */ | 
|---|
| 631 | rcl.xLeft=rcl2.xLeft; | 
|---|
| 632 |  | 
|---|
| 633 | rcl.xRight=rcl.xLeft+usWidth; | 
|---|
| 634 | if(rcl.xRight>rcl2.xRight) | 
|---|
| 635 | {/* Make sure we stop at the right border */ | 
|---|
| 636 | rcl.xRight=rcl2.xRight; | 
|---|
| 637 | rcl.xLeft=rcl.xRight-usWidth; | 
|---|
| 638 | } | 
|---|
| 639 | lPos=rcl.xLeft-WinQueryWindowULong(hwnd, SLIDERX);/* Save position zero based */ | 
|---|
| 640 | WinSetWindowULong(hwnd, SLIDERARMPOS, lPos); | 
|---|
| 641 | if(lPos!=lTemp) { | 
|---|
| 642 | BOOL rc; | 
|---|
| 643 |  | 
|---|
| 644 | hps=WinGetPS(hwnd); | 
|---|
| 645 | /* Paint Background not necessary here */ | 
|---|
| 646 |  | 
|---|
| 647 | /* Shaft */ | 
|---|
| 648 | /* Left part */ | 
|---|
| 649 | rcl3.xRight=rcl.xLeft; | 
|---|
| 650 | rc=FALSE; | 
|---|
| 651 | if(USERSLIDER) { | 
|---|
| 652 | OWNERITEM oi={0}; | 
|---|
| 653 | oi.hwnd=hwnd; | 
|---|
| 654 | oi.hps=hps; | 
|---|
| 655 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 656 | oi.rclItem=rcl3; | 
|---|
| 657 | oi.idItem=SDA_SLIDERSHAFT; | 
|---|
| 658 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 659 | MPFROMP(&oi) ); | 
|---|
| 660 | } | 
|---|
| 661 | if(!rc) | 
|---|
| 662 | WinFillRect(hps, &rcl3, CLR_GREEN); | 
|---|
| 663 |  | 
|---|
| 664 | /* Right part */ | 
|---|
| 665 | rcl3.xRight=rcl2.xRight; | 
|---|
| 666 | rcl3.xLeft=rcl.xRight; | 
|---|
| 667 | rc=FALSE; | 
|---|
| 668 | if(USERSLIDER) { | 
|---|
| 669 | OWNERITEM oi={0}; | 
|---|
| 670 | oi.hwnd=hwnd; | 
|---|
| 671 | oi.hps=hps; | 
|---|
| 672 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 673 | oi.rclItem=rcl3; | 
|---|
| 674 | oi.idItem=SDA_SLIDERSHAFT; | 
|---|
| 675 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 676 | MPFROMP(&oi) ); | 
|---|
| 677 | } | 
|---|
| 678 | if(!rc) | 
|---|
| 679 | WinFillRect(hps, &rcl3, CLR_WHITE); | 
|---|
| 680 |  | 
|---|
| 681 | /* Paint Slider */ | 
|---|
| 682 | rc=FALSE; | 
|---|
| 683 | if(USERSLIDER) { | 
|---|
| 684 | OWNERITEM oi={0}; | 
|---|
| 685 | oi.hwnd=hwnd; | 
|---|
| 686 | oi.hps=hps; | 
|---|
| 687 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 688 | oi.rclItem=rcl; | 
|---|
| 689 | oi.idItem=SDA_SLIDERARM; | 
|---|
| 690 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 691 | MPFROMP(&oi) ); | 
|---|
| 692 | } | 
|---|
| 693 | if(!rc) | 
|---|
| 694 | { | 
|---|
| 695 | WinFillRect(hps,&rcl, CLR_BLUE); | 
|---|
| 696 | WinDrawBorder(hps, &rcl, 2, 2, 0, 0 ,0x0400); | 
|---|
| 697 | } | 
|---|
| 698 |  | 
|---|
| 699 | WinReleasePS(hps); | 
|---|
| 700 |  | 
|---|
| 701 | /* Post SLN_SLIDERTRACK notification */ | 
|---|
| 702 | WinPostMsg(WinQueryWindow(hwnd, QW_PARENT),WM_CONTROL, MPFROM2SHORT(WinQueryWindowUShort(hwnd, QWS_ID), SLN_SLIDERTRACK), | 
|---|
| 703 | MPFROMLONG(lPos)); | 
|---|
| 704 | } | 
|---|
| 705 | } | 
|---|
| 706 | break; | 
|---|
| 707 | case WM_PAINT: | 
|---|
| 708 | { | 
|---|
| 709 | HPS hps, hps2; | 
|---|
| 710 | RECTL rcl, rcl2, rcl3; | 
|---|
| 711 | POINTL ptl; | 
|---|
| 712 | LONG  lPos=WinQueryWindowULong(hwnd, SLIDERARMPOS); | 
|---|
| 713 | USHORT usWidth=WinQueryWindowUShort(hwnd, SLIDERARMWITH); | 
|---|
| 714 | BOOL rc; | 
|---|
| 715 |  | 
|---|
| 716 | WinQueryWindowRect(hwnd, &rcl); | 
|---|
| 717 |  | 
|---|
| 718 | /* Shaft */ | 
|---|
| 719 | rcl2.xLeft=WinQueryWindowULong(hwnd, SLIDERX); | 
|---|
| 720 | rcl2.yBottom=WinQueryWindowULong(hwnd, SLIDERY); | 
|---|
| 721 | rcl2.xRight=rcl2.xLeft+WinQueryWindowULong(hwnd, SLIDERCX)-1; | 
|---|
| 722 | rcl2.yTop=rcl2.yBottom+WinQueryWindowULong(hwnd, SLIDERCY)-1; | 
|---|
| 723 |  | 
|---|
| 724 | /* Background */ | 
|---|
| 725 | hps2=WinGetPS(hwnd); | 
|---|
| 726 | GpiExcludeClipRectangle(hps2,&rcl2); | 
|---|
| 727 | WinFillRect(hps2, &rcl, CLR_PALEGRAY); | 
|---|
| 728 | WinReleasePS(hps2); | 
|---|
| 729 | rcl2.yTop+=1; | 
|---|
| 730 | rcl2.xRight+=1; | 
|---|
| 731 |  | 
|---|
| 732 | hps=WinBeginPaint(hwnd, NULLHANDLE, NULLHANDLE); | 
|---|
| 733 | /* Focus */ | 
|---|
| 734 | if(WinQueryFocus(HWND_DESKTOP)==hwnd) { | 
|---|
| 735 | GpiSetLineType(hps, LINETYPE_DOT); | 
|---|
| 736 | ptl.x=rcl.xLeft; | 
|---|
| 737 | ptl.y=rcl.yBottom; | 
|---|
| 738 | GpiMove(hps,&ptl); | 
|---|
| 739 | ptl.x=rcl.xRight-1; | 
|---|
| 740 | GpiLine(hps,&ptl); | 
|---|
| 741 | ptl.y=rcl.yTop-1; | 
|---|
| 742 | GpiLine(hps,&ptl); | 
|---|
| 743 | ptl.x=rcl.xLeft; | 
|---|
| 744 | GpiLine(hps,&ptl); | 
|---|
| 745 | ptl.y=rcl.yBottom; | 
|---|
| 746 | GpiLine(hps,&ptl); | 
|---|
| 747 | } | 
|---|
| 748 |  | 
|---|
| 749 | rcl3=rcl=rcl2; | 
|---|
| 750 |  | 
|---|
| 751 | /* Arm pos */ | 
|---|
| 752 | rcl2.xLeft+=lPos; | 
|---|
| 753 | /* Arm size */ | 
|---|
| 754 | rcl2.xRight=rcl2.xLeft+usWidth; | 
|---|
| 755 |  | 
|---|
| 756 | /* Shaft */ | 
|---|
| 757 | /* Left part */ | 
|---|
| 758 | rcl3.xRight=rcl2.xLeft; | 
|---|
| 759 | rc=FALSE; | 
|---|
| 760 | if(USERSLIDER) { | 
|---|
| 761 | OWNERITEM oi={0}; | 
|---|
| 762 | oi.hwnd=hwnd; | 
|---|
| 763 | oi.hps=hps; | 
|---|
| 764 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 765 | oi.rclItem=rcl3; | 
|---|
| 766 | oi.idItem=SDA_SLIDERSHAFT; | 
|---|
| 767 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 768 | MPFROMP(&oi) ); | 
|---|
| 769 | } | 
|---|
| 770 | if(!rc) | 
|---|
| 771 | WinFillRect(hps, &rcl3, CLR_GREEN); | 
|---|
| 772 |  | 
|---|
| 773 | /* Right part */ | 
|---|
| 774 | rcl3.xRight=rcl.xRight; | 
|---|
| 775 | rcl3.xLeft=rcl2.xRight; | 
|---|
| 776 | rc=FALSE; | 
|---|
| 777 | if(USERSLIDER) { | 
|---|
| 778 | OWNERITEM oi={0}; | 
|---|
| 779 | oi.hwnd=hwnd; | 
|---|
| 780 | oi.hps=hps; | 
|---|
| 781 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 782 | oi.rclItem=rcl3; | 
|---|
| 783 | oi.idItem=SDA_SLIDERSHAFT; | 
|---|
| 784 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 785 | MPFROMP(&oi) ); | 
|---|
| 786 | } | 
|---|
| 787 | if(!rc) | 
|---|
| 788 | WinFillRect(hps, &rcl3, CLR_WHITE); | 
|---|
| 789 |  | 
|---|
| 790 | rc=FALSE; | 
|---|
| 791 | if(USERSLIDER) { | 
|---|
| 792 | OWNERITEM oi={0}; | 
|---|
| 793 | oi.hwnd=hwnd; | 
|---|
| 794 | oi.hps=hps; | 
|---|
| 795 | oi.fsState=SLS_OWNERDRAW;/* More to come */ | 
|---|
| 796 | oi.rclItem=rcl2; | 
|---|
| 797 | oi.idItem=SDA_SLIDERARM; | 
|---|
| 798 | rc=(BOOL)WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_DRAWITEM, MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)), | 
|---|
| 799 | MPFROMP(&oi) ); | 
|---|
| 800 | } | 
|---|
| 801 | if(!rc) | 
|---|
| 802 | { | 
|---|
| 803 | WinFillRect(hps,&rcl2, CLR_BLUE); | 
|---|
| 804 | WinDrawBorder(hps, &rcl2, 2, 2, 0, 0 ,0x0400); | 
|---|
| 805 | } | 
|---|
| 806 |  | 
|---|
| 807 | WinEndPaint(hps); | 
|---|
| 808 | return (MRESULT)0; | 
|---|
| 809 | } | 
|---|
| 810 | break; | 
|---|
| 811 | default: | 
|---|
| 812 | break; | 
|---|
| 813 | } | 
|---|
| 814 |  | 
|---|
| 815 | return WinDefWindowProc(hwnd, msg, mp1, mp2); | 
|---|
| 816 | } | 
|---|
| 817 |  | 
|---|
| 818 |  | 
|---|
| 819 | MRESULT drawSlider(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2, USHORT id) | 
|---|
| 820 | { | 
|---|
| 821 | POWNERITEM poi; | 
|---|
| 822 |  | 
|---|
| 823 | RECTL rcl; | 
|---|
| 824 | POINTL ptl= {0}; | 
|---|
| 825 |  | 
|---|
| 826 | poi=(POWNERITEM)PVOIDFROMMP(mp2); | 
|---|
| 827 |  | 
|---|
| 828 | switch(poi->idItem) | 
|---|
| 829 | { | 
|---|
| 830 | case SDA_SLIDERARM: | 
|---|
| 831 |  | 
|---|
| 832 | WinFillRect(poi->hps,&poi->rclItem, CLR_RED); | 
|---|
| 833 | WinDrawBorder(poi->hps,&poi->rclItem, 2, 2, 0, 0 ,0x0400); | 
|---|
| 834 |  | 
|---|
| 835 | return (MRESULT) TRUE; | 
|---|
| 836 | break; | 
|---|
| 837 | case SDA_BACKGROUND: | 
|---|
| 838 | { | 
|---|
| 839 | HPS hps; | 
|---|
| 840 |  | 
|---|
| 841 | WinFillRect(poi->hps,&poi->rclItem, CLR_WHITE); | 
|---|
| 842 |  | 
|---|
| 843 | return (MRESULT) TRUE; | 
|---|
| 844 | } | 
|---|
| 845 | case SDA_SLIDERSHAFT: | 
|---|
| 846 | { | 
|---|
| 847 | HPS hps; | 
|---|
| 848 | RECTL rcl; | 
|---|
| 849 | MRESULT mr; | 
|---|
| 850 |  | 
|---|
| 851 | WinFillRect(poi->hps,&poi->rclItem, CLR_BLUE); | 
|---|
| 852 |  | 
|---|
| 853 | return (MRESULT)TRUE; | 
|---|
| 854 | } | 
|---|
| 855 | default: | 
|---|
| 856 | return (MRESULT)TRUE; | 
|---|
| 857 | } | 
|---|
| 858 |  | 
|---|
| 859 | /* Done */ | 
|---|
| 860 | return (MRESULT)TRUE; | 
|---|
| 861 | } | 
|---|
| 862 |  | 
|---|
| 863 |  | 
|---|
| 864 | /* This Proc handles the on-the-fly data CD writing */ | 
|---|
| 865 | MRESULT EXPENTRY waveinfoStatusDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) | 
|---|
| 866 | { | 
|---|
| 867 | char text[CCHMAXPATH*2 +10]; | 
|---|
| 868 | char title[CCHMAXPATH]; | 
|---|
| 869 | SWCNTRL swctl; | 
|---|
| 870 | PID pid; | 
|---|
| 871 | int a; | 
|---|
| 872 |  | 
|---|
| 873 |  | 
|---|
| 874 | switch (msg) | 
|---|
| 875 | { | 
|---|
| 876 | case WM_DRAWITEM: | 
|---|
| 877 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 878 | { | 
|---|
| 879 | case SLIDERID: | 
|---|
| 880 | return drawSlider(hwnd, msg, mp1, mp2, SHORT1FROMMP(mp1)); | 
|---|
| 881 | default: | 
|---|
| 882 | break; | 
|---|
| 883 | } | 
|---|
| 884 | break; | 
|---|
| 885 | case WM_INITDLG: | 
|---|
| 886 | /* Add switch entry */ | 
|---|
| 887 | memset(&swctl,0,sizeof(swctl)); | 
|---|
| 888 | WinQueryWindowProcess(hwnd,&pid,NULL); | 
|---|
| 889 | swctl.hwnd=hwnd; | 
|---|
| 890 | swctl.uchVisibility=SWL_VISIBLE; | 
|---|
| 891 | swctl.idProcess=pid; | 
|---|
| 892 | swctl.bProgType=PROG_DEFAULT; | 
|---|
| 893 | swctl.fbJump=SWL_JUMPABLE; | 
|---|
| 894 | WinAddSwitchEntry(&swctl); | 
|---|
| 895 |  | 
|---|
| 896 | #if 0 | 
|---|
| 897 | WinMessageBox( HWND_DESKTOP, HWND_DESKTOP, "", | 
|---|
| 898 | "", | 
|---|
| 899 | 0UL, MB_OK | MB_ICONEXCLAMATION|MB_MOVEABLE ); | 
|---|
| 900 | #endif | 
|---|
| 901 | //      oldProc=WinSubclassWindow(WinWindowFromID(hwnd, IDST_TEXT), newProc); | 
|---|
| 902 | hwndNew=WinCreateWindow(hwnd, CLASS_NAME, "Title", WS_VISIBLE |WS_TABSTOP, 10,50, SLIDERID, 40, | 
|---|
| 903 | hwnd, HWND_TOP, SLIDERID, NULLHANDLE, NULLHANDLE); | 
|---|
| 904 | WinShowWindow(hwnd, TRUE); | 
|---|
| 905 | //      WinQueryWindowPos(hwndNew,&swpSl); | 
|---|
| 906 | return (MRESULT) TRUE; | 
|---|
| 907 | /* WM_APPTERMINATENOTIFY messages are sent from the helper programs e.g. format checker. */ | 
|---|
| 908 | case WM_CLOSE: | 
|---|
| 909 | WinDismissDlg(hwnd,0); | 
|---|
| 910 | return FALSE; | 
|---|
| 911 | case WM_CONTROL: | 
|---|
| 912 | { | 
|---|
| 913 | switch(SHORT2FROMMP(mp1)) | 
|---|
| 914 | { | 
|---|
| 915 | case SLN_SLIDERTRACK: | 
|---|
| 916 | { | 
|---|
| 917 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 918 | { | 
|---|
| 919 | case SLIDERID: | 
|---|
| 920 | DosBeep(5000, 10); | 
|---|
| 921 | break; | 
|---|
| 922 | default: | 
|---|
| 923 | break; | 
|---|
| 924 | }/* switch */ | 
|---|
| 925 | return (MRESULT) 0; | 
|---|
| 926 | break; | 
|---|
| 927 | } | 
|---|
| 928 | case SLN_CHANGE: | 
|---|
| 929 | { | 
|---|
| 930 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 931 | { | 
|---|
| 932 | case SLIDERID: | 
|---|
| 933 | DosBeep(500, 100); | 
|---|
| 934 | break; | 
|---|
| 935 | default: | 
|---|
| 936 | break; | 
|---|
| 937 | }/* switch */ | 
|---|
| 938 | return (MRESULT)TRUE; | 
|---|
| 939 | } | 
|---|
| 940 | default: | 
|---|
| 941 | break; | 
|---|
| 942 | }/* switch */ | 
|---|
| 943 | break; | 
|---|
| 944 | }/* WM_CONTROL */ | 
|---|
| 945 |  | 
|---|
| 946 | case WM_COMMAND: | 
|---|
| 947 | switch(SHORT1FROMMP(mp1)) | 
|---|
| 948 | { | 
|---|
| 949 | case DID_OK: | 
|---|
| 950 | /* User pressed the OK button */ | 
|---|
| 951 | WinPostMsg(hwnd,WM_CLOSE,0,0); | 
|---|
| 952 | break; | 
|---|
| 953 | case IDPB_RIGHT: | 
|---|
| 954 | WinPostMsg( WinWindowFromID(hwnd, SLIDERID), | 
|---|
| 955 | SLM_SETSLIDERINFO, | 
|---|
| 956 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 957 | MPFROMLONG( (LONG) 70 )); | 
|---|
| 958 |  | 
|---|
| 959 | break; | 
|---|
| 960 | case IDPB_LEFT: | 
|---|
| 961 | WinPostMsg( WinWindowFromID(hwnd, SLIDERID), | 
|---|
| 962 | SLM_SETSLIDERINFO, | 
|---|
| 963 | MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE), | 
|---|
| 964 | MPFROMLONG( (LONG) 20 )); | 
|---|
| 965 |  | 
|---|
| 966 | break; | 
|---|
| 967 | case IDPB_SIZE: | 
|---|
| 968 | { | 
|---|
| 969 | SWP swp; | 
|---|
| 970 | RXSTRING arg[2];                       /* argument string for REXX  */ | 
|---|
| 971 | RXSTRING rexxretval;                /* return value from REXX    */ | 
|---|
| 972 | APIRET   rc;                        /* return code from REXX     */ | 
|---|
| 973 | SHORT    rexxrc = 0;                /* return code from function */ | 
|---|
| 974 | char chrThis[20]; | 
|---|
| 975 | char chrHwnd[20]; | 
|---|
| 976 |  | 
|---|
| 977 | char    *str = "These words will be swapped"; /* text to swap   */ | 
|---|
| 978 |  | 
|---|
| 979 |  | 
|---|
| 980 | RexxRegisterFunctionExe("CWRXFunc1", (PFN)rexxFunc1); | 
|---|
| 981 |  | 
|---|
| 982 |  | 
|---|
| 983 | sprintf(chrThis, "%d",123); | 
|---|
| 984 | sprintf(chrHwnd, "%d", WinQueryWindow(hwnd,QW_PARENT)); | 
|---|
| 985 |  | 
|---|
| 986 | /* By setting the strlength of the output RXSTRING to zero, we   */ | 
|---|
| 987 | /* force the interpreter to allocate memory and return it to us. */ | 
|---|
| 988 | /* We could provide a buffer for the interpreter to use instead. */ | 
|---|
| 989 | rexxretval.strlength = 0L;          /* initialize return to empty*/ | 
|---|
| 990 |  | 
|---|
| 991 | MAKERXSTRING(arg[0], chrHwnd, strlen(chrHwnd));/* create input argument     */ | 
|---|
| 992 | MAKERXSTRING(arg[1], chrThis, strlen(chrThis));/* create input argument     */ | 
|---|
| 993 |  | 
|---|
| 994 | /* Here we call the interpreter.  We don't really need to use    */ | 
|---|
| 995 | /* all the casts in this call; they just help illustrate         */ | 
|---|
| 996 | /* the data types used.                                          */ | 
|---|
| 997 | rc=RexxStart((LONG)      2,             /* number of arguments   */ | 
|---|
| 998 | (PRXSTRING)  &arg,          /* array of arguments    */ | 
|---|
| 999 | (PSZ)        "G:\\Projects_working\\mmclasses-0.3.0\\testfunc.cwr",/* name of REXX file     */ | 
|---|
| 1000 | (PRXSTRING)  0,             /* No INSTORE used       */ | 
|---|
| 1001 | (PSZ)        "CWRXX",         /* Command env. name     */ | 
|---|
| 1002 | (LONG)       RXSUBROUTINE,  /* Code for how invoked  */ | 
|---|
| 1003 | (PRXSYSEXIT) 0,             /* No EXITs on this call */ | 
|---|
| 1004 | (PSHORT)     &rexxrc,       /* Rexx program output   */ | 
|---|
| 1005 | (PRXSTRING)  &rexxretval ); /* Rexx program output   */ | 
|---|
| 1006 |  | 
|---|
| 1007 | sprintf(text,"rc: %d, function return code: %d, %s ", | 
|---|
| 1008 | rc, (int) rexxrc, rexxretval.strptr); | 
|---|
| 1009 |  | 
|---|
| 1010 | WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, text, "", 1234, MB_OK|MB_MOVEABLE); | 
|---|
| 1011 |  | 
|---|
| 1012 | DosFreeMem(rexxretval.strptr);          /* Release storage | 
|---|
| 1013 | given to us by REXX.  */ | 
|---|
| 1014 |  | 
|---|
| 1015 |  | 
|---|
| 1016 |  | 
|---|
| 1017 | //            WinQueryWindowPos(hwndNew,&swp); | 
|---|
| 1018 | //    WinSetWindowPos(hwndNew, NULLHANDLE, 0, 0, swp.cx-30, swp.cy+10,SWP_SIZE); | 
|---|
| 1019 | break; | 
|---|
| 1020 | } | 
|---|
| 1021 | default: | 
|---|
| 1022 | break; | 
|---|
| 1023 | } | 
|---|
| 1024 | return (MRESULT) FALSE; | 
|---|
| 1025 | default: | 
|---|
| 1026 | break; | 
|---|
| 1027 | }/* switch */ | 
|---|
| 1028 |  | 
|---|
| 1029 | return WinDefDlgProc( hwnd, msg, mp1, mp2); | 
|---|
| 1030 | } | 
|---|
| 1031 |  | 
|---|
| 1032 | int main (int argc, char *argv[]) | 
|---|
| 1033 | { | 
|---|
| 1034 | HAB  hab; | 
|---|
| 1035 | HMQ  hmq; | 
|---|
| 1036 | QMSG qmsg; | 
|---|
| 1037 | char text[CCHMAXPATH]; | 
|---|
| 1038 | char title[CCHMAXPATH]; | 
|---|
| 1039 | short a; | 
|---|
| 1040 | HWND hwndClient; | 
|---|
| 1041 | ULONG result; | 
|---|
| 1042 | ULONG rc; | 
|---|
| 1043 |  | 
|---|
| 1044 | /* Create a copy of the args */ | 
|---|
| 1045 | /* argv[0]: progname | 
|---|
| 1046 | argv[1]: installdir | 
|---|
| 1047 | argv[2]: 0: query wave, 1: query mp3 | 
|---|
| 1048 | argv[3]: wavefile | 
|---|
| 1049 | */ | 
|---|
| 1050 | numArgs=argc; | 
|---|
| 1051 |  | 
|---|
| 1052 | hab=WinInitialize(0); | 
|---|
| 1053 | if(hab) { | 
|---|
| 1054 | hmq=WinCreateMsgQueue(hab,0); | 
|---|
| 1055 | if(hmq) { | 
|---|
| 1056 | /* Save installation directory */ | 
|---|
| 1057 |  | 
|---|
| 1058 | /* Get our ressource dll */ | 
|---|
| 1059 |  | 
|---|
| 1060 | WinRegisterClass(hab, CLASS_NAME, newProc,0, SLADDBYTES); | 
|---|
| 1061 | if( WinDlgBox( HWND_DESKTOP, NULLHANDLE, waveinfoStatusDialogProc, NULLHANDLE, IDDL_PMTST, 0) == DID_ERROR ) | 
|---|
| 1062 | { | 
|---|
| 1063 |  | 
|---|
| 1064 | WinDestroyMsgQueue( hmq ); | 
|---|
| 1065 | WinTerminate( hab ); | 
|---|
| 1066 | DosBeep(100,600); | 
|---|
| 1067 | return( 1 ); | 
|---|
| 1068 | } | 
|---|
| 1069 |  | 
|---|
| 1070 | WinDestroyMsgQueue(hmq); | 
|---|
| 1071 | } | 
|---|
| 1072 | WinTerminate(hab); | 
|---|
| 1073 | } | 
|---|
| 1074 | return 0; | 
|---|
| 1075 | } | 
|---|
| 1076 |  | 
|---|
| 1077 |  | 
|---|
| 1078 |  | 
|---|
| 1079 |  | 
|---|
| 1080 |  | 
|---|
| 1081 |  | 
|---|
| 1082 |  | 
|---|
| 1083 |  | 
|---|
| 1084 |  | 
|---|