Annotation of mstools/samples/playit/playit.c, revision 1.1

1.1     ! root        1: #include <windows.h>
        !             2: #include <string.h>
        !             3: #include <stdio.h>
        !             4: 
        !             5: #if !defined(NT)
        !             6:     #if defined (NOMM)
        !             7:     // define 'NOMM' if you want to build this for a non-sound machine
        !             8:         #define SND_SYNC    0
        !             9:         #define SND_FILENAME    0
        !            10:         #define SND_ALIAS       0
        !            11:         BOOL APIENTRY PlaySound(LPSTR lpszName, HANDLE hModule, UINT flags)
        !            12:         {
        !            13:             MessageBox (GetFocus(), lpszName, "Beeeeeep", MB_OK);
        !            14:             return TRUE;
        !            15:         }
        !            16:     #else
        !            17:         #include <mmsystem.h>
        !            18:         // Win32 has some extra flags that it is using...
        !            19:         #define SND_FILENAME 0
        !            20:         #define SND_ALIAS 0
        !            21:     #endif
        !            22:     // Here are some 'types' that Win32 uses that would be handy for Win16
        !            23:     #define UINT    unsigned int
        !            24:     #define INT     int
        !            25:     #define APIENTRY    far pascal
        !            26:     // The Win16 call is different from the Win32 one
        !            27:     #define PlaySound(szFile, hMod, flags) sndPlaySound (szFile, flags)
        !            28: #endif
        !            29: #include <commdlg.h>
        !            30: #include "playit.h"
        !            31: 
        !            32: char szAppName[] = "PlayIt";
        !            33: 
        !            34: HWND    hwndMain;
        !            35: HWND    hwndChild;
        !            36: HMENU   hmenuRes;
        !            37: UINT    idMaxResource = IDM_RESOURCE;
        !            38: WORD    TimerID     = 1;    /* number used for timer-id */
        !            39: CHAR    szBuffer[200];    /* buffer for stringtable stuff */
        !            40: 
        !            41: long FAR PASCAL WndProc (HWND, UINT, UINT, LONG);
        !            42: BOOL FAR PASCAL AboutDlgProc (HWND, UINT, UINT, LONG);
        !            43: BOOL APIENTRY GetFileName(LPSTR);
        !            44: BOOL FillResMenu (HMENU);
        !            45: long FAR PASCAL ChildWndProc (HWND, UINT, UINT, LONG);
        !            46: 
        !            47: int APIENTRY WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
        !            48:     HANDLE  hInstance, hPrevInstance;
        !            49:     LPSTR   lpszCmdLine;
        !            50:     int     nCmdShow;
        !            51: {
        !            52:     MSG     msg;
        !            53:     WNDCLASS    wndclass;
        !            54:     HMENU   hmenuApp;
        !            55:         PSTR       szTooMany;
        !            56:         CHAR       TempString[100];
        !            57: 
        !            58: #if defined (NT)
        !            59:     nCmdShow = SW_SHOWNORMAL;
        !            60:     hInstance = GetModuleHandle( NULL );
        !            61: #endif
        !            62: 
        !            63:     if (!hPrevInstance) {
        !            64:         wndclass.style      = CS_HREDRAW | CS_VREDRAW;
        !            65:         wndclass.lpfnWndProc    = (WNDPROC) WndProc;
        !            66:         wndclass.cbClsExtra     = 0;
        !            67:         wndclass.cbWndExtra     = 0;
        !            68:         wndclass.hInstance      = hInstance;
        !            69:         wndclass.hIcon      = LoadIcon (hInstance, szAppName);
        !            70:         wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW);
        !            71:         wndclass.hbrBackground  = (HBRUSH)(COLOR_APPWORKSPACE+1);
        !            72:         wndclass.lpszMenuName   = szAppName;
        !            73:         wndclass.lpszClassName  = szAppName;
        !            74: 
        !            75:         if (!RegisterClass (&wndclass)) {
        !            76:             return FALSE;
        !            77:         }
        !            78:         wndclass.style      = CS_HREDRAW | CS_VREDRAW;
        !            79:         wndclass.lpfnWndProc    = (WNDPROC) ChildWndProc;
        !            80:         wndclass.cbClsExtra     = 0;
        !            81:         wndclass.cbWndExtra     = 10;
        !            82:         wndclass.hInstance      = hInstance;
        !            83:         wndclass.hIcon      = LoadIcon (hInstance, szAppName);
        !            84:         wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW);
        !            85:         wndclass.hbrBackground  = GetStockObject(WHITE_BRUSH);
        !            86:         wndclass.lpszMenuName   = (HMENU) NULL;
        !            87:         wndclass.lpszClassName  = "SoundChild";
        !            88: 
        !            89:         if (!RegisterClass (&wndclass)) {
        !            90:             return FALSE;
        !            91:         }
        !            92: 
        !            93: 
        !            94: 
        !            95:         }
        !            96: 
        !            97:     hwndMain = CreateWindow (szAppName, szAppName,
        !            98:         WS_OVERLAPPEDWINDOW,
        !            99:         CW_USEDEFAULT, 0, 300, 200,
        !           100:         NULL, (HMENU) NULL, hInstance, NULL);
        !           101: 
        !           102:         /* create non-visible child window pop up*/
        !           103:     hwndChild = CreateWindow ("SoundChild", "SoundChild",
        !           104:         WS_CHILD | WS_CAPTION,
        !           105:         CW_USEDEFAULT, 0, 200, 100,
        !           106:         hwndMain, (HMENU)NULL, hInstance, NULL);
        !           107: 
        !           108: 
        !           109:     if (!SetTimer(hwndChild, TimerID, (UINT) 5000, 0L))
        !           110:         {
        !           111:         /* Windows only supports 16 public timers */
        !           112:         if(!(szTooMany = (PSTR)LocalAlloc(LPTR, 160))){
        !           113:             strcpy(TempString, " Too Many Timers Allocated ");
        !           114:             szTooMany = TempString;
        !           115:         }
        !           116:         else{
        !           117:             LoadString(hInstance, IDS_TOOMANY, (LPSTR)szTooMany, 160);
        !           118:         }
        !           119:         MessageBox((HWND)NULL, (LPSTR)szTooMany, (LPSTR)szBuffer, MB_OK | MB_ICONHAND | MB_SYSTEMMODAL);
        !           120:         return(FALSE);
        !           121:     }
        !           122:                                  
        !           123:     hmenuApp = GetMenu (hwndMain);
        !           124:     hmenuRes = CreatePopupMenu();
        !           125:     if (FillResMenu(hmenuRes)) {
        !           126:         if (InsertMenu (hmenuApp, GetMenuItemCount(hmenuApp)-1,
        !           127:         MF_BYPOSITION | MF_POPUP, (UINT)hmenuRes, (LPSTR)"&Resources")) {
        !           128:             DrawMenuBar (hwndMain);
        !           129:         }
        !           130:     }
        !           131: 
        !           132:     ShowWindow (hwndMain, nCmdShow);
        !           133:     UpdateWindow (hwndMain);
        !           134: 
        !           135:     while (GetMessage (&msg, NULL, 0, 0)) {
        !           136:         TranslateMessage (&msg);
        !           137:         DispatchMessage (&msg);
        !           138:     }
        !           139:     return msg.wParam;
        !           140: 
        !           141:     lpszCmdLine; // Just to resolve reference
        !           142: }
        !           143: 
        !           144: 
        !           145: BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
        !           146: {
        !           147:     RECT    rChild, rParent;
        !           148:     int     wChild, hChild, wParent, hParent;
        !           149:     int     wScreen, hScreen, xNew, yNew;
        !           150:     HDC     hdc;
        !           151: 
        !           152:     GetWindowRect (hwndChild, &rChild);
        !           153:     wChild = rChild.right - rChild.left;
        !           154:     hChild = rChild.bottom - rChild.top;
        !           155: 
        !           156:     GetWindowRect (hwndParent, &rParent);
        !           157:     wParent = rParent.right - rParent.left;
        !           158:     hParent = rParent.bottom - rParent.top;
        !           159: 
        !           160:     hdc = GetDC (hwndChild);
        !           161:     wScreen = GetDeviceCaps (hdc, HORZRES);
        !           162:     hScreen = GetDeviceCaps (hdc, VERTRES);
        !           163:     ReleaseDC (hwndChild, hdc);
        !           164: 
        !           165:     xNew = rParent.left + ((wParent - wChild) /2);
        !           166:     if (xNew < 0) {
        !           167:         xNew = 0;
        !           168:     } else if ((xNew+wChild) > wScreen) {
        !           169:         xNew = wScreen - wChild;
        !           170:     }
        !           171: 
        !           172:     yNew = rParent.top  + ((hParent - hChild) /2);
        !           173:     if (yNew < 0) {
        !           174:         yNew = 0;
        !           175:     } else if ((yNew+hChild) > hScreen) {
        !           176:         yNew = hScreen - hChild;
        !           177:     }
        !           178: 
        !           179:     return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
        !           180: }
        !           181: 
        !           182: 
        !           183: BOOL APIENTRY AboutDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        !           184: {
        !           185:     INT wmId;
        !           186: 
        !           187:     switch (msg) {
        !           188:         case WM_INITDIALOG:
        !           189:             CenterWindow (hwnd, GetWindow (hwnd, GW_OWNER));
        !           190:             return (TRUE);
        !           191: 
        !           192:         case WM_COMMAND:
        !           193: #if defined (NT)
        !           194:             wmId = LOWORD(wParam);
        !           195: #elif defined (WIN16)
        !           196:             wmId = wParam;
        !           197: #endif
        !           198:         switch (wmId) {
        !           199:             case IDOK:
        !           200:             case IDCANCEL:
        !           201:                 EndDialog(hwnd, TRUE);
        !           202:                 return (TRUE);
        !           203:         }
        !           204:         break;
        !           205:     }
        !           206:     return (FALSE);
        !           207: 
        !           208:     /* Just For Reference */
        !           209:     lParam;
        !           210: }
        !           211: 
        !           212: UINT BeepFlags (UINT wParam)
        !           213: {
        !           214:     UINT flags = MB_OK;
        !           215: 
        !           216:     switch (wParam) {
        !           217:         case IDM_SYNC_ICONHAND:
        !           218:         case IDM_SYNC_ICONQUESTION:
        !           219:         case IDM_SYNC_ICONEXCLAMATION:
        !           220:         case IDM_SYNC_ICONASTERISK:
        !           221:             flags |= MB_TASKMODAL;
        !           222:             break;
        !           223:     }
        !           224: 
        !           225:     switch (wParam) {
        !           226:         case IDM_ICONHAND:
        !           227:         case IDM_SYNC_ICONHAND:
        !           228:             flags |= MB_ICONHAND;
        !           229:             break;
        !           230: 
        !           231:         case IDM_ICONQUESTION:
        !           232:         case IDM_SYNC_ICONQUESTION:
        !           233:             flags |= MB_ICONQUESTION;
        !           234:             break;
        !           235: 
        !           236:         case IDM_ICONEXCLAMATION:
        !           237:         case IDM_SYNC_ICONEXCLAMATION:
        !           238:             flags |= MB_ICONEXCLAMATION;
        !           239:             break;
        !           240: 
        !           241:         case IDM_ICONASTERISK:
        !           242:         case IDM_SYNC_ICONASTERISK:
        !           243:             flags |= MB_ICONASTERISK;
        !           244:             break;
        !           245: 
        !           246:         default:
        !           247:             break;
        !           248:     }
        !           249:     return flags;
        !           250: }
        !           251: 
        !           252: 
        !           253: 
        !           254: long FAR PASCAL WndProc (hwnd, iMessage, wParam, lParam)
        !           255:      HWND   hwnd;
        !           256:      UINT   iMessage;
        !           257:      UINT   wParam;
        !           258:      LONG   lParam;
        !           259: {
        !           260: static char szSoundName[80];
        !           261: static UINT sndFlags;
        !           262:     HANDLE  hInst;
        !           263:     FARPROC lpDlgProc;
        !           264:     UINT    wmId, wmEvent;
        !           265:     char    szBuf[25];
        !           266:     char    szErr[25];
        !           267:     UINT    flags;
        !           268:     DWORD   err, i;
        !           269: 
        !           270: #if defined (WIN16)
        !           271:     hInst = GetWindowWord (hwnd, GWW_HINSTANCE);
        !           272: #elif defined (NT)
        !           273:     hInst = GetModuleHandle (NULL);
        !           274: #endif
        !           275: 
        !           276:     switch (iMessage) {
        !           277:         case WM_CREATE:
        !           278:             szSoundName[0] = (char)0;
        !           279:             break;
        !           280: 
        !           281:         case WM_LBUTTONDOWN:
        !           282:             if (lstrlen(szSoundName) > 0) {
        !           283:                 PlaySound (szSoundName, hInst, sndFlags);
        !           284:             }
        !           285:             break;
        !           286: 
        !           287:         case WM_COMMAND:
        !           288: #if defined (NT)
        !           289:             wmId = LOWORD(wParam);
        !           290:             wmEvent = HIWORD(wParam);
        !           291: #elif defined (WIN16)
        !           292:             wmId = wParam;
        !           293:             wmEvent = HIWORD(lParam);
        !           294: #endif
        !           295: 
        !           296:             switch (wmId) {
        !           297:                 case IDM_OPEN:
        !           298:                     if (GetFileName (szSoundName)) {
        !           299:                         sndFlags = SND_ASYNC | SND_FILENAME;
        !           300: 
        !           301:                         /* SND_FILENAME doesn't seem to work, so...
        !           302:                         WriteProfileString ("SOUNDS", "PLAYIT", szSoundName);
        !           303:                         sndFlags = SND_ASYNC | SND_ALIAS;
        !           304:                         strcpy (szSoundName, "PLAYIT");
        !           305:                         */
        !           306: 
        !           307: 
        !           308:                         sndFlags = SND_SYNC | SND_FILENAME;
        !           309:                         // SND_FILENAME is currently having problems
        !           310:                         // with path slashes... so lets switch in
        !           311:                         // something that it can handle for now...
        !           312:                         for (i=0; i<strlen(szSoundName); i++) {
        !           313:                             if (szSoundName[i] == '\\')
        !           314:                                 szSoundName[i] = '/';
        !           315:                         }
        !           316: 
        !           317:                         if (!PlaySound(szSoundName, hInst, sndFlags)) {
        !           318:                             err = GetLastError();
        !           319:                             sprintf (szErr, "Error: %i [0x%x]", err, err);
        !           320:                             MessageBox (GetFocus(), szErr, szSoundName, MB_OK);
        !           321:                         }
        !           322: 
        !           323:                     }
        !           324:                     break;
        !           325: 
        !           326:                 case IDM_ABOUT:
        !           327:                     lpDlgProc = MakeProcInstance((FARPROC) AboutDlgProc, hInst);
        !           328:                     DialogBox(hInst, "AboutBox", hwnd, (WNDPROC)lpDlgProc);
        !           329:                     FreeProcInstance(lpDlgProc);
        !           330:                     break;
        !           331: 
        !           332:                 case IDM_HELP_CONTENTS:
        !           333:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"CONTENTS");
        !           334:                     break;
        !           335:                 case IDM_HELP_INDEX:
        !           336:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"INDEX");
        !           337:                     break;
        !           338:                 case IDM_HELP_OVERVIEW:
        !           339:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"OVERVIEW");
        !           340:                     break;
        !           341:                 case IDM_HELP_GLOSSARY:
        !           342:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"GLOSSARY");
        !           343:                     break;
        !           344:                 case IDM_HELP_TUTORIAL:
        !           345:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"TUTORIAL");
        !           346:                     break;
        !           347:                 case IDM_HELP_DEMO:
        !           348:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"DEMO");
        !           349:                     break;
        !           350:                 case IDM_HELP_HELP:
        !           351:                     WinHelp (hwnd, "PlayIt.HLP", HELP_KEY, (DWORD)"HELP");
        !           352:                     break;
        !           353: 
        !           354: 
        !           355:                 case IDM_EXIT:
        !           356:                     DestroyWindow(hwnd);
        !           357:                     break;
        !           358: 
        !           359: 
        !           360:                 default:
        !           361:                                                  if (wmId >= IDM_RESOURCE && wmId <= idMaxResource) {
        !           362:                         if (hmenuRes) {
        !           363:                             GetMenuString (hmenuRes, wmId, szSoundName, sizeof(szBuf),
        !           364:                                 MF_BYCOMMAND);
        !           365:                                                                          sndFlags = SND_SYNC | SND_ALIAS;
        !           366:                                                                          switch(szSoundName[6]){
        !           367:                                                                                 
        !           368:                                                                                        case 'H':
        !           369:                                                                                        case 'h':
        !           370:                                                                         
        !           371:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_ICONHAND, NULL), (LONG)szSoundName);    
        !           372:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_UNHIDE, NULL), (LONG)szSoundName);
        !           373:                                                                                                break;
        !           374: 
        !           375:                                                                                        case 'Q':
        !           376:                                                                                        case 'q':
        !           377: 
        !           378:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_ICONQUESTION, NULL), (LONG)szSoundName);        
        !           379:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_UNHIDE, NULL), (LONG) szSoundName);
        !           380:                                                                                                break;
        !           381: 
        !           382:                                                                                        case 'E':
        !           383:                                                                                        case 'e':
        !           384: 
        !           385:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_ICONEXCLAMATION, NULL), (LONG)szSoundName);     
        !           386:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_UNHIDE, NULL), (LONG) szSoundName);
        !           387:                                                                                                break;
        !           388: 
        !           389:                                                                                        case 'A':
        !           390:                                                                                        case 'a':
        !           391: 
        !           392:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_ICONASTERISK, NULL), (LONG)szSoundName);        
        !           393:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_UNHIDE, NULL), (LONG) szSoundName);
        !           394:                                                                                                break;
        !           395: 
        !           396:                                                                                        default:  
        !           397:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_SYSTEMDEFAULT, NULL), (LONG) szSoundName);      
        !           398:                                                                                                SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_UNHIDE, NULL), (LONG) szSoundName);
        !           399:                                                                         }                                 
        !           400:                             if (!PlaySound (szSoundName, hInst, sndFlags)) {
        !           401:                                 //err = GetLastError ();
        !           402:                                 //sprintf (szErr, "Error: %i [0x%x]", err, err);
        !           403:                                 MessageBox (hwnd, "ERROR", "PlaySound() Called SYNC failed", MB_OK);
        !           404:                             }
        !           405:                                                                         SendMessage(hwndChild, WM_COMMAND, MAKELONG(IDM_HIDE, NULL), (LONG) szSoundName);     
        !           406: 
        !           407:                         }
        !           408:                     }
        !           409:                     break;
        !           410: 
        !           411:             }
        !           412:             break;
        !           413: 
        !           414:         case WM_DESTROY:
        !           415:             if (hwnd == hwndMain) {
        !           416:                                         DestroyWindow(hwndChild);
        !           417:                 PostQuitMessage (0);
        !           418:             }
        !           419:             break;
        !           420: 
        !           421:         default:
        !           422:             return DefWindowProc (hwnd, iMessage, wParam, lParam);
        !           423:     }
        !           424:     return 0L;
        !           425: 
        !           426:     hInst; //Just to resolve reference
        !           427:     flags; // ditto
        !           428: }
        !           429: 
        !           430: #define ID_TEST 321
        !           431: #define ID_FN   1152
        !           432: #define ID_CANCEL IDCANCEL
        !           433: 
        !           434: BOOL FAR PASCAL PlaySoundFileHook (HWND hdlg, UINT msg, UINT wParam, LONG lParam)
        !           435: {
        !           436:     HWND hwndTest;
        !           437:     HWND hwndCancel;
        !           438:     char szTmp[256];
        !           439:     UINT cy, i;
        !           440:     RECT rect;
        !           441:     HANDLE hInst;
        !           442:     WORD wId;
        !           443: 
        !           444:     hInst = GetModuleHandle (NULL);
        !           445: 
        !           446:     switch (msg) {
        !           447:         case WM_INITDIALOG:
        !           448: 
        !           449:             /* Determine proper placement of the 'TEST' button */
        !           450:             hwndCancel = GetDlgItem (hdlg, ID_CANCEL);
        !           451:             if (hwndCancel!=0) {
        !           452:                 GetWindowRect (hwndCancel, &rect);
        !           453:                 cy = rect.bottom - rect.top;
        !           454:                 rect.top = rect.bottom + cy;
        !           455:                 rect.bottom = rect.top +cy;
        !           456:                 ScreenToClient (hdlg, (LPPOINT)&rect.left);
        !           457:                 ScreenToClient (hdlg, (LPPOINT)&rect.right);
        !           458: 
        !           459:                 hwndTest = CreateWindow ("BUTTON", "&Test",
        !           460:                     BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP,
        !           461:                     rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
        !           462:                     hdlg, (HMENU)ID_TEST, hInst, 0L);
        !           463:                 if (hwndTest==0) {
        !           464:                     MessageBox (GetFocus(), "No Test Button", "Open", MB_OK);
        !           465:                 } else {
        !           466:                     ShowWindow (hwndTest, SW_SHOW);
        !           467:                 }
        !           468: 
        !           469:             } else {
        !           470:                 MessageBox (GetFocus(), "Unable to find cancel button", "OpenFile", MB_OK);
        !           471:             }
        !           472: 
        !           473:             break;
        !           474: 
        !           475:         case WM_COMMAND:
        !           476:             wId = LOWORD(wParam);
        !           477:             switch (wId) {
        !           478:                 case ID_TEST:
        !           479:                     /* The 'Viewer >>' button was pressed. */
        !           480:                     GetWindowText (GetDlgItem(hdlg, ID_FN), szTmp, sizeof(szTmp));
        !           481:                     for (i=0; i<(UINT)strlen(szTmp); i++) {
        !           482:                         if (szTmp[i] == '\\')
        !           483:                             szTmp[i] = '/';
        !           484:                     }
        !           485: 
        !           486:                     PlaySound(szTmp, NULL, SND_ASYNC | SND_FILENAME );
        !           487: 
        !           488:             }
        !           489:         break;
        !           490:     }
        !           491:     return (FALSE);
        !           492: 
        !           493:     lParam; // Just to reference it
        !           494: }
        !           495: 
        !           496: 
        !           497: 
        !           498: BOOL APIENTRY GetFileName(LPSTR lpstr)
        !           499: {
        !           500:     OPENFILENAME ofn;
        !           501:     char szFilterSpec [128] =               /* file type filters */
        !           502:          "Sound Files(*.WAV)\0*.WAV\0";
        !           503: 
        !           504: #define MAXFILENAME 256
        !           505:     char szFileName[MAXFILENAME];
        !           506:     char szFileTitle[MAXFILENAME];
        !           507: 
        !           508:     lstrcpy(szFileName, "");   /* these need be NULL*/
        !           509:     lstrcpy(szFileTitle, "");
        !           510: 
        !           511:     /* fill in non-variant fields of OPENFILENAME struct. */
        !           512:     ofn.lStructSize     = sizeof(OPENFILENAME);
        !           513:     ofn.hwndOwner       = GetFocus();
        !           514:     ofn.lpstrFilter     = szFilterSpec;
        !           515:     ofn.lpstrCustomFilter   = NULL;
        !           516:     ofn.nMaxCustFilter  = 0;
        !           517:     ofn.nFilterIndex    = 0;
        !           518:     ofn.lpstrFile       = szFileName;
        !           519:     ofn.nMaxFile        = MAXFILENAME;
        !           520:     ofn.lpstrInitialDir = "..\\WAV";
        !           521:     ofn.lpstrFileTitle  = szFileTitle;
        !           522:     ofn.nMaxFileTitle   = MAXFILENAME;
        !           523:     ofn.lpstrTitle      = "Open Sound File";
        !           524:     ofn.lpstrDefExt     = "WAV";
        !           525:     ofn.Flags           = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY
        !           526:                           | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK;
        !           527:     ofn.lpfnHook        = (LPOFNHOOKPROC) PlaySoundFileHook;
        !           528: 
        !           529:     /* Use standard open dialog */
        !           530:     if (!GetOpenFileName ((LPOPENFILENAME)&ofn)){
        !           531:         *lpstr = NULL;
        !           532:         return FALSE;
        !           533:     }
        !           534: 
        !           535:     lstrcpy(lpstr, ofn.lpstrFile);
        !           536:     return TRUE;
        !           537: 
        !           538: }
        !           539: 
        !           540: 
        !           541: #define BUFSIZE 1024
        !           542: 
        !           543: BOOL FillResMenu (HMENU hMenu)
        !           544: {
        !           545:     HANDLE hBuf;
        !           546:     LPSTR lpBuf, lpString;
        !           547:     UINT cnt, idMenu;
        !           548:         CHAR   tempstring[30];
        !           549: 
        !           550:     hBuf = GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT, BUFSIZE);
        !           551:         if(!hBuf){
        !           552:                 return(FALSE);
        !           553:         }
        !           554:     lpBuf = GlobalLock (hBuf);
        !           555: 
        !           556:     cnt = GetProfileString ("sounds", NULL, "", lpBuf, BUFSIZE);
        !           557:     idMenu = IDM_RESOURCE;
        !           558:     if (cnt>0) {
        !           559:         lpString = lpBuf;
        !           560:         while (*lpString) {
        !           561:                                strcpy(tempstring, lpString);   /* this code is a hack for a user bug*/
        !           562:                                strcat(tempstring, " ");
        !           563:             AppendMenu (hMenu, MF_STRING, idMenu++, tempstring);
        !           564:             lpString += lstrlen(lpString) +1;
        !           565:         }
        !           566:     }
        !           567:     idMaxResource = idMenu-1;
        !           568: 
        !           569:     GlobalUnlock (hBuf);
        !           570:     GlobalFree (hBuf);
        !           571: 
        !           572:     return (idMaxResource > IDM_RESOURCE);
        !           573: }
        !           574: 
        !           575: 
        !           576: long FAR PASCAL ChildWndProc (hwnd, iMessage, wParam, lParam)
        !           577:      HWND   hwnd;
        !           578:      UINT   iMessage;
        !           579:      UINT   wParam;
        !           580:      LONG   lParam;
        !           581: {
        !           582: 
        !           583: 
        !           584: 
        !           585:         WORD wmId;
        !           586:         WORD wmEvent;
        !           587:         HDC    hDc;
        !           588:         HICON hIcon;
        !           589:         PAINTSTRUCT ps;
        !           590:         static BOOL bWindowDone;
        !           591:         static BOOL bHideWindow;
        !           592:         
        !           593:     switch (iMessage) {
        !           594: 
        !           595:                  case WM_PAINT:
        !           596:                          hDc = BeginPaint(hwnd, &ps);
        !           597:                          if((hIcon = (HICON) GetWindowLong(hwnd, 0))){
        !           598:                                        DrawIcon(ps.hdc, 80, 20, hIcon);
        !           599:                          }
        !           600:                          EndPaint(hwnd, &ps);
        !           601:                          bWindowDone = TRUE;
        !           602:                          break;
        !           603: 
        !           604: 
        !           605:                  case WM_TIMER:
        !           606:                          /* timer set, because USER coalesces the UNHIDEHIDE, such that
        !           607:                             window never showed.  This way, I never issue SW_HIDE, until, the window
        !           608:                                  has been shown*/
        !           609:                                  
        !           610:                          if(bHideWindow == TRUE && bWindowDone == TRUE){
        !           611:                                  bWindowDone = FALSE;
        !           612:                                  bHideWindow = FALSE;
        !           613:                                  SetWindowLong(hwnd, 0, 0);
        !           614:                                  ShowWindow(hwnd, SW_HIDE); 
        !           615:                          }
        !           616:                          break;
        !           617:                          
        !           618:         case WM_COMMAND:
        !           619: #if defined (NT)
        !           620:             wmId = LOWORD(wParam);
        !           621:             wmEvent = HIWORD(wParam);
        !           622: #elif defined (WIN16)
        !           623:             wmId = wParam;
        !           624:             wmEvent = HIWORD(lParam);
        !           625: #endif
        !           626: 
        !           627:             switch (wmId) {
        !           628:                                        case IDM_ICONHAND:
        !           629:                                                SetWindowText(hwnd, (LPSTR) lParam);
        !           630:                                                hIcon = LoadIcon(NULL, IDI_HAND);
        !           631:                                                SetWindowLong(hwnd, 0, (LONG) hIcon);
        !           632:                                                break;
        !           633:                                                
        !           634:                                        case IDM_ICONQUESTION:
        !           635:                                                SetWindowText(hwnd, (LPSTR) lParam);
        !           636:                                                hIcon = LoadIcon(NULL, IDI_QUESTION);
        !           637:                                                SetWindowLong(hwnd, 0, (LONG) hIcon);
        !           638:                                                break;
        !           639:                                                
        !           640:                                        case IDM_ICONEXCLAMATION:
        !           641:                                                SetWindowText(hwnd, (LPSTR) lParam);
        !           642:                                                hIcon = LoadIcon(NULL, IDI_EXCLAMATION);
        !           643:                                                SetWindowLong(hwnd, 0, (LONG) hIcon);
        !           644:                                                break;
        !           645:                                                
        !           646:                                        case IDM_ICONASTERISK:   
        !           647:                                                SetWindowText(hwnd, (LPSTR) lParam);
        !           648:                                                hIcon = LoadIcon(NULL, IDI_ASTERISK);
        !           649:                                                SetWindowLong(hwnd, 0, (LONG) hIcon);
        !           650:                                                break;
        !           651: 
        !           652:                                        case IDM_SYSTEMDEFAULT:         /* for System Default*/
        !           653:                                                SetWindowText(hwnd, (LPSTR) lParam);
        !           654:                                                SetWindowLong(hwnd, 0, 0);
        !           655:                                                break;    /* NO ICON*/
        !           656:                                                
        !           657:                                        case IDM_HIDE:
        !           658:                                                bHideWindow = TRUE;
        !           659:                                                break;
        !           660: 
        !           661:                                        case IDM_UNHIDE:
        !           662:                                                ShowWindow(hwnd, SW_SHOW);
        !           663:                                                break;
        !           664:                                                
        !           665:             }
        !           666:                                break;
        !           667: 
        !           668:         default:
        !           669:             return DefWindowProc (hwnd, iMessage, wParam, lParam);
        !           670:     }
        !           671:     return 0L;
        !           672: 
        !           673: 
        !           674: }
        !           675: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.