Annotation of pmsdk/samples/template/tempnres.c, revision 1.1

1.1     ! root        1: /****************************** Module Header ******************************\
        !             2: * Module Name: tempnres.c
        !             3: *
        !             4: *   Non-resident portion of Presentation Manager Template Application
        !             5: *
        !             6: *   It illustrates the building of a class record, the registering of
        !             7: *   that class record with Presentattion Manager and the creation of a window
        !             8: *   of that class.  See TEMPLATE.DEF for the associated module definition
        !             9: *   file
        !            10: *
        !            11: *   This is a MIDDLE model application, it has three code segments _RES, _INIT
        !            12: *   and _NRES and one data segment _DATA.
        !            13: *
        !            14: *    For MIDDLE model, procedures that are accessed from another segment
        !            15: *    must be declared FAR (see template.h).
        !            16: *
        !            17: *    Code that is NOT part of the template but is merely for demo purposes is
        !            18: *    marked as being for demo purposes and should be replaced/removed when this
        !            19: *    template is converted to a real application.
        !            20: *
        !            21: * Created by Microsoft Corp., 1988
        !            22: *
        !            23: \***************************************************************************/
        !            24: 
        !            25: #define INCL_GPI
        !            26: #define INCL_WIN
        !            27: 
        !            28: #include <os2.h>
        !            29: #include "template.h"
        !            30: 
        !            31: /* min and max macros */
        !            32: #define max(a,b)    (((a) > (b)) ? (a) : (b))
        !            33: #define min(a,b)    (((a) < (b)) ? (a) : (b))
        !            34: 
        !            35: HAB     hAB;
        !            36: HMQ     hMsgQ;
        !            37: HWND    hwndTemplate;
        !            38: HWND    hwndTemplateFrame;
        !            39: 
        !            40: /************************************************************************\
        !            41: *  The following following are variables and definitions that are part of
        !            42: *  the template only for demo purposes and will be replaced when the
        !            43: *  template is converted to an application
        !            44: \************************************************************************/
        !            45: 
        !            46: #define RGBBLACK 0L
        !            47: #define CCHSTR 15
        !            48: #define CSTR    7
        !            49: #define POSMIN  0
        !            50: #define POSMAX  100
        !            51: #define LINEINC 5
        !            52: #define PAGEINC 25
        !            53: 
        !            54: CHAR    szContent[31];
        !            55: CHAR    szStr[CCHSTR+1];
        !            56: CHAR    szDefault[CCHSTR+1];
        !            57: CHAR    szAppName[10];
        !            58: BOOL    bCheckBox = TRUE;
        !            59: BOOL    fDoAsync = FALSE;
        !            60: BOOL    fDoFlash = FALSE;
        !            61: SHORT   fDisplay = IDMCOLOR;
        !            62: SHORT   cchContent;
        !            63: SHORT   idRadioButton = IDDRBRIGHT;
        !            64: SHORT   iSel = 2;
        !            65: SHORT   posV = 50;
        !            66: SHORT   posH = 50;
        !            67: 
        !            68: /*********** End of demo purpose variables and definitions ************/
        !            69: 
        !            70: /***********************************************************************\
        !            71: *
        !            72: *   Procedures in alphabetical order
        !            73: *
        !            74: \***********************************************************************/
        !            75: 
        !            76: 
        !            77: /******* The code below is for demo purposes only *******/
        !            78: VOID ShowAsyncMessage(hWnd)
        !            79: HWND hWnd;
        !            80: {
        !            81:     CHAR    szOkAsync[CCHMAXSTRING];
        !            82:     CHAR    szAsync[CCHMAXSTRING];
        !            83: 
        !            84:     /* we have an outstanding message for user */
        !            85: 
        !            86:     WinStopTimer( hAB, hWnd, IDTASYNC );
        !            87:     WinFlashWindow( hWnd, FALSE );
        !            88:     WinLoadString(hAB, NULL, IDSOKASYNC, CCHMAXSTRING, (PCH)szOkAsync);
        !            89:     WinLoadString(hAB, NULL, IDSASYNC, CCHMAXSTRING, (PCH)szAsync);
        !            90:     WinMessageBox(HWND_DESKTOP, hWnd, (PCH)szOkAsync, (PCH)szAsync, NULL, 
        !            91:                    MB_OK|MB_ICONEXCLAMATION );
        !            92: 
        !            93:     if ( fDoAsync )                 /* restart timer to get another message */
        !            94:         WinStartTimer( hAB, hWnd, IDTASYNC, CMSECASYNC );
        !            95: 
        !            96: }
        !            97: /******* The code above is for demo purposes only *******/
        !            98: 
        !            99: 
        !           100: MRESULT EXPENTRY TemplateAboutDlg( hWndDlg, message, mp1, mp2 )
        !           101: HWND   hWndDlg;
        !           102: USHORT message;
        !           103: MPARAM mp1;
        !           104: MPARAM mp2;
        !           105: {
        !           106:     switch( message )
        !           107:     {
        !           108:       case WM_COMMAND:                  /* the user has pressed a button */
        !           109:         switch( SHORT1FROMMP( mp1 ) )   /* which button? */
        !           110:         {
        !           111:           case DID_OK:
        !           112:           case DID_CANCEL:
        !           113:             WinDismissDlg( hWndDlg, TRUE );
        !           114:             break;
        !           115: 
        !           116:           default:
        !           117:             return( FALSE );
        !           118:         }
        !           119:         break;
        !           120: 
        !           121:       default:
        !           122:         return( WinDefDlgProc( hWndDlg, message, mp1, mp2 ) );
        !           123:     }
        !           124:     return( FALSE );
        !           125: }
        !           126: 
        !           127: 
        !           128: 
        !           129: VOID TemplateCharInput( hWnd, ch, flags, cRepeat )
        !           130: HWND  hWnd;
        !           131: SHORT ch;
        !           132: SHORT flags;
        !           133: SHORT cRepeat;
        !           134: {
        !           135:     /* ignore cRepeat if you want to ignore auto-repeated keys */
        !           136:     while (cRepeat-- != 0)
        !           137:     {
        !           138:     }
        !           139: }
        !           140: 
        !           141: 
        !           142: VOID TemplateCommand(hWnd, id, source, mouse)
        !           143: HWND  hWnd;
        !           144: SHORT id;
        !           145: SHORT source;
        !           146: BOOL  mouse;
        !           147: {
        !           148:     /******* The code below is for demo purposes only *******/
        !           149: 
        !           150:     RECTL   rect;
        !           151:     HPS     hPS;
        !           152: 
        !           153:     switch( id )
        !           154:     {
        !           155:         case IDMFLASH:
        !           156:             WinQueryWindowRect( hWnd, (PRECTL)&rect );
        !           157:             hPS = WinGetPS(hWnd );
        !           158:             WinInvertRect( hPS, (PRECTL)&rect );
        !           159:             WinInvertRect( hPS, (PRECTL)&rect );
        !           160:             WinReleasePS( hPS );
        !           161:             break;
        !           162: 
        !           163:         case IDMABOUT:
        !           164:             WinDlgBox( HWND_DESKTOP, hWnd, (PFNWP)TemplateAboutDlg, NULL,
        !           165:                            IDD_ABOUT, NULL );
        !           166:             break;
        !           167: 
        !           168:         case IDMCOLOR:
        !           169:         case IDMBLACK:
        !           170:             if ( fDisplay != id )
        !           171:             {
        !           172:                 fDisplay = id;
        !           173:                 WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU, MM_SETITEMATTR,
        !           174:                     MPFROM2SHORT(IDMCOLOR, TRUE),
        !           175:                     MPFROM2SHORT(MIA_CHECKED, (id == IDMCOLOR ? MIA_CHECKED : NULL)) );
        !           176:                 WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU, MM_SETITEMATTR,
        !           177:                     MPFROM2SHORT(IDMBLACK, TRUE),
        !           178:                     MPFROM2SHORT(MIA_CHECKED, (id != IDMCOLOR ? MIA_CHECKED : NULL)) );
        !           179:                 /* this will cause repaint of entire window */
        !           180:                 WinInvalidateRect(hWnd, (PRECTL)NULL, TRUE );
        !           181:             }
        !           182:             break;
        !           183: 
        !           184:         case IDMSTART:
        !           185:           /************************************************************\
        !           186:           *  start a timer, when it goes off:
        !           187:           *  if window has focus then post message box
        !           188:           *  else start flashing window/icon and wait until the
        !           189:           *  window DOES have the focus before posting the message box,
        !           190:           *  i.e, a template for an async message box
        !           191:           \************************************************************/
        !           192:             WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU,
        !           193:                     MM_SETITEMATTR, MPFROM2SHORT(IDMSTART, TRUE),
        !           194:                     MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED) );
        !           195:             WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU,
        !           196:                     MM_SETITEMATTR, MPFROM2SHORT(IDMEND, TRUE),
        !           197:                     MPFROM2SHORT(MIA_DISABLED, NULL) );
        !           198:             fDoAsync = TRUE;
        !           199:             WinStartTimer( hAB, hWnd, IDTASYNC, CMSECASYNC );
        !           200:             break;
        !           201: 
        !           202:         case IDMEND:
        !           203:             WinStopTimer( hAB, hWnd, IDTASYNC );
        !           204:             fDoAsync = FALSE;
        !           205:             WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU,
        !           206:                     MM_SETITEMATTR, MPFROM2SHORT(IDMSTART, TRUE),
        !           207:                     MPFROM2SHORT(MIA_DISABLED, NULL) );
        !           208:             WinSendDlgItemMsg( hwndTemplateFrame, FID_MENU,
        !           209:                     MM_SETITEMATTR, MPFROM2SHORT(IDMEND, TRUE),
        !           210:                     MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED) );
        !           211:             break;
        !           212: 
        !           213:         case IDMDIALOG:
        !           214:             WinDlgBox( HWND_DESKTOP, hWnd, (PFNWP)TemplateDlg, NULL,
        !           215:                           IDD_TEMPLATE, NULL );
        !           216:     }
        !           217:     /******* The code above is for demo purposes only *******/
        !           218: }
        !           219: 
        !           220: 
        !           221: VOID TemplateCreate(hWnd, lParam)
        !           222: HWND hWnd;
        !           223: LONG lParam;
        !           224: {
        !           225:     char *pch1;
        !           226:     char *pch2;
        !           227: 
        !           228:     /******* The code below is for demo purposes only *******/
        !           229: 
        !           230:     cchContent = WinLoadString(hAB, NULL, IDSCONTENT, sizeof(szContent),
        !           231:                                  (PCH)szContent);
        !           232: 
        !           233:     WinLoadString(hAB, NULL, IDSDEFAULT, sizeof(szDefault), (PCH)szDefault);
        !           234: 
        !           235:     /* copy default string into szStr */
        !           236:     for (pch1 = szStr, pch2 = szDefault; *pch1++ = *pch2++; )
        !           237:         ;
        !           238:     /******* The code above is for demo purposes only *******/
        !           239: }
        !           240: 
        !           241: 
        !           242: /******* The code below is for demo purposes only *******/
        !           243: 
        !           244: MRESULT EXPENTRY TemplateDlg( hWndDlg, message, mp1, mp2     )
        !           245: HWND   hWndDlg;
        !           246: USHORT message;
        !           247: MPARAM mp1;
        !           248: MPARAM mp2;
        !           249: {
        !           250:     CHAR    szWaters[12];
        !           251:     SHORT   i;
        !           252:     SHORT   pos;
        !           253: 
        !           254:     switch( message )
        !           255:     {
        !           256:       case WM_INITDLG:
        !           257:         WinSetWindowText( WinWindowFromID( hWndDlg, IDDTEXT ), (PCH)szStr );
        !           258:         WinSendDlgItemMsg( hWndDlg, IDDCHECKBOX, BM_SETCHECK,
        !           259:                 MPFROM2SHORT(bCheckBox, 0), 0L );
        !           260:         WinSendDlgItemMsg( hWndDlg, idRadioButton,
        !           261:                 BM_SETCHECK, MPFROM2SHORT(TRUE, 0), 0L );
        !           262: 
        !           263:         for (i = 0; i < CSTR; i++) {
        !           264:             WinLoadString(hAB, NULL, IDSSTR1+i, 12 , (PCH)szWaters);
        !           265:             WinSendDlgItemMsg( hWndDlg, IDDLISTBOX, LM_INSERTITEM,
        !           266:                     (MPARAM)-1L, (MPARAM)(PCH)szWaters );
        !           267:             }
        !           268:         WinSendDlgItemMsg( hWndDlg, IDDLISTBOX, LM_SELECTITEM, (MPARAM)iSel,
        !           269:                     (MPARAM)TRUE );
        !           270: 
        !           271:         WinSendDlgItemMsg( hWndDlg, IDDSBH, SBM_SETSCROLLBAR,
        !           272:                     MPFROM2SHORT(posH, 0), MPFROM2SHORT(POSMIN, POSMAX) );
        !           273:         WinSendDlgItemMsg( hWndDlg, IDDSBV, SBM_SETSCROLLBAR,
        !           274:                     MPFROM2SHORT(posV, 0), MPFROM2SHORT(POSMIN, POSMAX) );
        !           275: 
        !           276:         return( FALSE );
        !           277: 
        !           278:     case WM_COMMAND:
        !           279:         switch( SHORT1FROMMP(mp1) )
        !           280:         {
        !           281:           case IDDDEFAULTS:
        !           282:             WinSetWindowText( WinWindowFromID( hWndDlg, IDDTEXT ),
        !           283:                     (PCH)szDefault );
        !           284:             WinSendDlgItemMsg( hWndDlg, IDDCHECKBOX, BM_SETCHECK,
        !           285:                     MPFROM2SHORT(TRUE, 0), 0L );
        !           286: 
        !           287:             i = IDDRBLEFT + (SHORT)WinSendDlgItemMsg(hWndDlg,
        !           288:                                                   IDDRBLEFT,
        !           289:                                                   BM_QUERYCHECKINDEX,
        !           290:                                                   0L, 0L );
        !           291:             WinSendDlgItemMsg( hWndDlg, i, BM_SETCHECK, MPFROMSHORT(FALSE), 0L);
        !           292:             WinSendDlgItemMsg( hWndDlg, (idRadioButton=IDDRBRIGHT),
        !           293:                                BM_SETCHECK, MPFROMSHORT(TRUE), 0L );
        !           294: 
        !           295:             WinSendDlgItemMsg( hWndDlg, IDDLISTBOX, LM_SELECTITEM, (MPARAM)2L,
        !           296:                     (MPARAM)TRUE);
        !           297:             WinSendDlgItemMsg( hWndDlg, IDDSBH, SBM_SETSCROLLBAR,
        !           298:                         MPFROM2SHORT(50, 0), MPFROM2SHORT(POSMIN, POSMAX) );
        !           299:             WinSendDlgItemMsg( hWndDlg, IDDSBV, SBM_SETSCROLLBAR,
        !           300:                         MPFROM2SHORT(50, 0), MPFROM2SHORT(POSMIN, POSMAX) );
        !           301:             break;
        !           302: 
        !           303:           case DID_OK:
        !           304:             bCheckBox = (SHORT)WinSendDlgItemMsg( hWndDlg, IDDCHECKBOX, BM_QUERYCHECK,
        !           305:                                 0L, 0L );
        !           306:             idRadioButton = IDDRBLEFT + (SHORT)WinSendDlgItemMsg(hWndDlg,
        !           307:                                                   IDDRBLEFT,
        !           308:                                                   BM_QUERYCHECKINDEX,
        !           309:                                                   0L, 0L );
        !           310:             i = WinQueryWindowText(WinWindowFromID( hWndDlg, IDDTEXT ), CCHSTR, 
        !           311:                     (PCH)szStr);
        !           312:             iSel =  (SHORT)WinSendDlgItemMsg( hWndDlg, IDDLISTBOX, LM_QUERYSELECTION,
        !           313:                             0L, 0L);
        !           314:             iSel = max(0, min(CSTR-1, iSel));
        !           315:             posH =  (USHORT)WinSendDlgItemMsg( hWndDlg, IDDSBH, SBM_QUERYPOS, 0L, 0L );
        !           316:             posV =  (USHORT)WinSendDlgItemMsg( hWndDlg, IDDSBV, SBM_QUERYPOS, 0L, 0L );
        !           317:             WinDismissDlg( hWndDlg, TRUE );
        !           318:             break;
        !           319: 
        !           320:         case DID_CANCEL:
        !           321:             WinDismissDlg( hWndDlg, TRUE );
        !           322:             break;
        !           323: 
        !           324:         default:
        !           325:             return( FALSE );
        !           326:         }
        !           327:         break;
        !           328: 
        !           329: 
        !           330: /* scroll bar controls send messages here as WM_HSCROLL instead of WM_COMMAND */
        !           331: 
        !           332:     case WM_HSCROLL:
        !           333:     case WM_VSCROLL:
        !           334:         switch ( SHORT1FROMMP(mp1) )
        !           335:         {
        !           336:         case IDDSBH:
        !           337:         case IDDSBV:
        !           338:             pos = (USHORT)WinSendDlgItemMsg(hWndDlg, SHORT1FROMMP(mp1),
        !           339:                           SBM_QUERYPOS, 0L, 0L );
        !           340:             switch ( SHORT2FROMMP(mp2) )
        !           341:             {
        !           342:             case SB_LINEUP:         /* and SB_LINELEFT */
        !           343:                 pos -=  LINEINC;
        !           344:                 break;
        !           345:             case SB_LINEDOWN:       /* and SB_LINERIGHT */
        !           346:                 pos +=  LINEINC;
        !           347:                 break;
        !           348:             case SB_PAGEUP:         /* and SB_PAGELEFT */
        !           349:                 pos -= PAGEINC;
        !           350:                 break;
        !           351:             case SB_PAGEDOWN:       /* and SB_PAGERIGHT */
        !           352:                 pos += PAGEINC;
        !           353:                 break;
        !           354:             case SB_SLIDERPOSITION:
        !           355:                 pos = SHORT1FROMMP(mp2);
        !           356:                 break;
        !           357:             }
        !           358:             pos = max(POSMIN, min(POSMAX, pos));
        !           359:             WinSendDlgItemMsg(hWndDlg, SHORT1FROMMP(mp1),
        !           360:                     SBM_SETPOS, MPFROM2SHORT(pos, 0), 0L );
        !           361:             break;
        !           362: 
        !           363:         default:
        !           364:             return( FALSE );
        !           365:         }
        !           366: 
        !           367:     default:
        !           368:         return( WinDefDlgProc( hWndDlg, message, mp1, mp2     ) );
        !           369: 
        !           370:     }
        !           371: 
        !           372:     return( FALSE );
        !           373: }
        !           374: 
        !           375: /******* The code above is for demo purposes only *******/
        !           376: 
        !           377: 
        !           378: 
        !           379: VOID TemplateSetFocus( hWnd )
        !           380: HWND hWnd;
        !           381: {
        !           382: 
        !           383:     if ( fDoFlash )
        !           384:     {
        !           385:         fDoFlash = FALSE;
        !           386:         ShowAsyncMessage(hWnd);
        !           387:     }
        !           388: 
        !           389: }
        !           390: 
        !           391: 
        !           392: 
        !           393: VOID TemplateHorzScroll( hWnd, code, posNew )
        !           394: HWND  hWnd;
        !           395: SHORT code;
        !           396: SHORT posNew;
        !           397: {
        !           398:     switch( code )
        !           399:     {
        !           400:         case SB_LINEUP:             /* line left */
        !           401:             break;
        !           402:         case SB_LINEDOWN:           /* line right */
        !           403:             break;
        !           404:         case SB_PAGEUP:             /* page left */
        !           405:             break;
        !           406:         case SB_PAGEDOWN:           /* page right */
        !           407:             break;
        !           408:         case SB_SLIDERPOSITION:     /* position to posNew */
        !           409:             break;
        !           410:         case SB_SLIDERTRACK:
        !           411:             break;
        !           412:     }
        !           413: }
        !           414: 
        !           415: VOID TemplatePaint( hWnd, hPS )
        !           416: HWND hWnd;
        !           417: HPS  hPS;
        !           418: {
        !           419:     /* Here the application paints its window. */
        !           420: 
        !           421:     /******* The code below is for demo purposes only *******/
        !           422: 
        !           423:     long    cx;
        !           424:     long    cy;
        !           425:     RECTL   rect;
        !           426:     POINTL  pt;
        !           427:     CHARBUNDLE cb;
        !           428: 
        !           429:     WinQueryWindowRect( hWnd, (PRECTL)&rect );
        !           430:     cx  = (SHORT)(rect.xRight - rect.xLeft) >> 2;
        !           431:     cy  = (SHORT)(rect.yTop - rect.yBottom) >> 2;
        !           432:     pt.x = 0L;
        !           433:     pt.y = rect.yTop - 12L;
        !           434: 
        !           435:     cb.lColor = CLR_BLACK;
        !           436:     GpiSetAttrs(hPS, PRIM_CHAR, CBB_COLOR, 0L, (PBUNDLE)&cb);
        !           437: 
        !           438:     GpiCharStringAt( hPS, (PPOINTL)&pt, (long)cchContent, (PCH)szContent );
        !           439: 
        !           440:     /***********************************************************\
        !           441:     *   The vertical and horizontal lines on this rectangle are
        !           442:     *   "one" pixel wide and on displays that do NOT have a 1:1
        !           443:     *   aspect ratio, the lines will NOT be the same thickness
        !           444:     \***********************************************************/
        !           445: 
        !           446:     pt.x = rect.xLeft + cx;
        !           447:     pt.y = rect.yTop  - cy;
        !           448:     GpiSetCurrentPosition( hPS, (PPOINTL)&pt );
        !           449:     pt.x = rect.xRight  - cx;
        !           450:     pt.y = rect.yBottom + cy;
        !           451:     GpiBox( hPS, 2L, (PPOINTL)&pt, 0L, 0L);
        !           452: 
        !           453:     /***********************************************************\
        !           454:     *   Now we drawn a "rectangle" with uniformly thick lines
        !           455:     \***********************************************************/
        !           456:     cx = cx >> 1;
        !           457:     cy = cy >> 1;
        !           458: 
        !           459:     GpiSetLineWidthGeom( hPS, 2L );
        !           460:     pt.x = rect.xLeft + cx;
        !           461:     pt.y = rect.yTop  - cy;
        !           462:     GpiSetCurrentPosition( hPS, (PPOINTL)&pt );
        !           463:     pt.x = rect.xRight - cx;
        !           464:     GpiLine( hPS, (PPOINTL)&pt );
        !           465:     pt.y = rect.yBottom + cy;
        !           466:     GpiLine( hPS, (PPOINTL)&pt );
        !           467:     pt.x = rect.xLeft + cx;
        !           468:     GpiLine( hPS, (PPOINTL)&pt );
        !           469:     pt.y = rect.yTop - cy;
        !           470:     GpiLine( hPS, (PPOINTL)&pt );
        !           471: 
        !           472:     /******* The code above is for demo purposes only *******/
        !           473: }
        !           474: 
        !           475: 
        !           476: 
        !           477: /******* The code below is for demo purposes only *******/
        !           478: 
        !           479: VOID TemplateQueryQuit( hWnd )
        !           480: HWND hWnd;
        !           481: {
        !           482:     CHAR    szOkClose[CCHMAXSTRING];
        !           483:     CHAR    szClose[CCHMAXSTRING];
        !           484: 
        !           485:     WinLoadString(hAB, NULL, IDSOKCLOSE, CCHMAXSTRING , (PCH)szOkClose);
        !           486:     WinLoadString(hAB, NULL, IDSCLOSE, CCHMAXSTRING , (PCH)szClose  );
        !           487:     WinAlarm( HWND_DESKTOP, WA_WARNING );
        !           488:     if ( WinMessageBox(HWND_DESKTOP, hWnd, (PCH)szOkClose, (PCH)szClose,
        !           489:                NULL, MB_OKCANCEL|MB_ICONQUESTION ) == DID_OK )
        !           490:         WinPostMsg( hWnd, WM_QUIT, 0L, 0L );
        !           491: }
        !           492: 
        !           493: /******* The code above is for demo purposes only *******/
        !           494: 
        !           495: 
        !           496: /******* The code below is for demo purposes only *******/
        !           497: 
        !           498: VOID TemplateTimer( hWnd, id )
        !           499: HWND   hWnd;
        !           500: USHORT id;
        !           501: {
        !           502:     WinStopTimer( hAB, hWnd, IDTASYNC );
        !           503:     if ( WinQueryFocus(HWND_DESKTOP, FALSE ) == hWnd )
        !           504:         ShowAsyncMessage( hWnd );
        !           505:     else
        !           506:     {
        !           507:         fDoFlash = TRUE;
        !           508:         WinFlashWindow( hWnd, TRUE );
        !           509:     }
        !           510: }
        !           511: 
        !           512: /******* The code above is for demo purposes only *******/
        !           513: 
        !           514: 
        !           515: 
        !           516: VOID TemplateVertScroll( hWnd, code, posNew )
        !           517: HWND   hWnd;
        !           518: SHORT  code;
        !           519: USHORT posNew;
        !           520: {
        !           521:     switch( code )
        !           522:     {
        !           523:         case SB_LINEUP:
        !           524:             break;
        !           525:         case SB_LINEDOWN:
        !           526:             break;
        !           527:         case SB_PAGEUP:
        !           528:             break;
        !           529:         case SB_PAGEDOWN:
        !           530:             break;
        !           531:         case SB_SLIDERPOSITION:
        !           532:             break;
        !           533:         case SB_SLIDERTRACK:
        !           534:             break;
        !           535:     }
        !           536: }

unix.superglobalmegacorp.com

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