home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / msysjour / vol04 / 01b / macsl / mpmfig5.txt < prev    next >
Text File  |  1988-10-27  |  4KB  |  150 lines

  1. MRESULT EXPENTRY MpmFnwpScrollBar( hwnd, msg, mp1, mp2 )
  2.     HWND        hwnd;
  3.     USHORT      msg;
  4.     MPARAM      mp1;
  5.     MPARAM      mp2;
  6. {
  7.     USHORT      id;
  8.     ControlHandle hctl, hctl1;
  9.     Rect        rect;
  10.     Rect*       prect;
  11.     SHORT       sPart;
  12.     POINTL      ptl;
  13.     SHORT       cmd;
  14.     Handle      hcdef;
  15.     LONG        lPoint;
  16.     Point       point;
  17.     static BOOL fTrackThumb = FALSE;
  18.     static SHORT sInitValue;
  19.  
  20.     if( ! MpmValidateWindow(hwnd) )
  21.       return FALSE;
  22.  
  23.     id   = MYWNDOF(hwnd).id;
  24.     hctl = MYWNDOF(hwnd).hctl;
  25.  
  26.     switch( msg )
  27.     {
  28.       /* Return the current position */
  29.  
  30.       case SBM_QUERYPOS:
  31.         return MRFROMSHORT( fTrackThumb ? sInitValue
  32.                                         : (**hctl).contrlValue );
  33.  
  34.       /* Return the scroll bar range */
  35.  
  36.       case SBM_QUERYRANGE:
  37.         return MRFROM2SHORT( (**hctl).contrlMin, (**hctl).contrlMax );
  38.  
  39.       /* Set the scroll bar position and range */
  40.  
  41.       case SBM_SETSCROLLBAR:
  42.         (**hctl).contrlMin = SHORT1FROMMP(mp2);
  43.         (**hctl).contrlMax = SHORT2FROMMP(mp2);
  44.         /* fall through */
  45.  
  46.       /* Set the scroll bar position only */
  47.  
  48.       case SBM_SETPOS:
  49.         if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
  50.           SetCtlValue( hctl, SHORT1FROMMP(mp1) );
  51.         else
  52.           (**hctl).contrlValue = SHORT1FROMMP(mp1);
  53.         fTrackThumb = FALSE;
  54.         return MRFROMSHORT(1);
  55.  
  56.       /* Handle mouse button down: call TrackControl to track it */
  57.  
  58.       case WM_BUTTON1DOWN:
  59.         ptl.x = SHORT1FROMMP(mp1);
  60.         ptl.y = SHORT2FROMMP(mp1);
  61.         MpmMapMacOfPtl( hwnd, &point, &ptl );
  62.         sPart = FindControl( point, PWINOFHWND(hwnd), &hctl1 );
  63.         ASSERT( sPart  &&  hctl1 == hctl,
  64.                 "MpmFnwpScrollBar: FindControl failed" );
  65.         _hwndTrack = hwnd;
  66.         if( sPart == inThumb )
  67.         {
  68.           fTrackThumb = TRUE;
  69.           sInitValue = (**hctl).contrlValue;
  70.           if( TrackControl( hctl, point, NULL ) )
  71.             MpmTrackScrollBarNotify( SB_SLIDERPOSITION );
  72.           fTrackThumb = FALSE;
  73.         }
  74.         else
  75.         {
  76.           TrackControl( hctl, point, (ProcPtr)MpmTrackScrollBar );
  77.           MpmTrackScrollBarNotify( SB_ENDSCROLL );
  78.         }
  79.         return 0L;
  80.  
  81.       /* Handle scroll bar creation: call NewControl to create it */
  82.  
  83.       case WM_CREATE:
  84.         rect.left = rect.top = 0;
  85.         if( MYWNDOF(hwnd).flStyle & SBS_VERT )
  86.           rect.right = _alSysVal[SV_CXVSCROLL], rect.bottom = 100;
  87.         else
  88.           rect.bottom = _alSysVal[SV_CYHSCROLL], rect.right = 100;
  89.         hctl = NewControl( PWINOFHWND(hwnd), &rect, _szNull,
  90.                            MYWNDOF(hwnd).flStyle & WS_VISIBLE,
  91.                            0, 0, 1, scrollBarProc, (long)hwnd );
  92.         if( ! hctl )
  93.           return MRFROMSHORT(1);
  94.         MYWNDOF(hwnd).hctl = hctl;
  95.         return 0L;
  96.  
  97.       /* Destroy scroll bar */
  98.  
  99.       case WM_DESTROY:
  100.         MYWNDOF(hwnd).hctl = NULL;
  101.         DisposeControl( hctl );
  102.         return 0L;
  103.  
  104.       /* Handle window movement: use MoveControl to move the bar */
  105.  
  106.       case WM_MOVE:
  107.         MpmQueryMacRect( hwnd, &rect );
  108.         if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
  109.           MoveControl( hctl, rect.left, rect.top );
  110.         else
  111.         {
  112.           prect = &(**hctl).contrlRect;
  113.           prect->right  += rect.left - prect->left;
  114.           prect->left    = rect.left;
  115.           prect->bottom += rect.top  - prect->top;
  116.           prect->top     = rect.top;
  117.         }
  118.         return 0L;
  119.  
  120.       /* Show or hide the scroll bar */
  121.  
  122.       case WM_SHOW:
  123.         if( mp1 )
  124.           ShowControl( hctl );
  125.         else
  126.           HideControl( hctl );
  127.         return 0L;
  128.  
  129.       /* Handle window resizing: use SizeControl to resize it */
  130.  
  131.       case WM_SIZE:
  132.         if( SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2) )
  133.         {
  134.           if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
  135.             SizeControl( hctl,
  136.                          SHORT1FROMMP(mp2),
  137.                          SHORT2FROMMP(mp2) );
  138.           else
  139.           {
  140.             prect = &(**hctl).contrlRect;
  141.             prect->right  = prect->left + SHORT1FROMMP(mp2);
  142.             prect->bottom = prect->top  + SHORT2FROMMP(mp2);
  143.           }
  144.         }
  145.         return 0L;
  146.     }
  147.     
  148.     return WinDefWindowProc( hwnd, msg, mp1, mp2 );
  149. }
  150.