home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk12 / clock / dialogs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-20  |  6.5 KB  |  257 lines

  1. /*
  2.     dialogs.c        Dialog procedures for PM Clock Application
  3.  
  4.     Created by Microsoft Corporation, 1989
  5. */
  6. #define INCL_WINDIALOGS
  7. #define INCL_WINBUTTONS
  8. #define INCL_WINSYS
  9. #include <os2def.h>
  10. #include <pmwin.h>
  11. #include "dialogs.h"
  12.  
  13. /* defined in paint.c */
  14. extern USHORT usMajorTickPref ;
  15. extern USHORT usMinorTickPref ;
  16. extern LONG clrBackground ;
  17. extern LONG clrFace ;
  18. extern LONG clrHourHand ;
  19. extern LONG clrMinuteHand ;
  20.  
  21. /* defined in clock.c */
  22. extern HWND hwndFrame ;
  23.  
  24. /*
  25.     ClkAboutDlgProc()         "About..." dialog
  26.  
  27.     Returns:    MRESULT, 0 or return value from WinDefDlgProc
  28. */
  29. MRESULT EXPENTRY ClkAboutDlgProc ( HWND hwnd , USHORT usMsg ,
  30.                    MPARAM mp1 , MPARAM mp2 )
  31. {
  32.     if ( usMsg == WM_COMMAND ) {
  33.     WinDismissDlg ( hwnd , TRUE ) ;
  34.     return 0L ;
  35.     }
  36.     else return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
  37. }
  38.  
  39.  
  40. /*
  41.     ClkTicksDlgProc()        "Ticks..." dialog
  42.  
  43.     Returns: MRESULT, 0 or return value from WinDefDlgProc
  44. */
  45. MRESULT EXPENTRY ClkTicksDlgProc ( HWND hwnd , USHORT usMsg ,
  46.                    MPARAM mp1 , MPARAM mp2 )
  47. {
  48.     static USHORT usMajorTickSel ;
  49.     static USHORT usMinorTickSel ;
  50.     USHORT usButtonID ;
  51.  
  52.     switch ( usMsg ) {
  53.  
  54.     case WM_INITDLG :
  55.  
  56.         /* show the current major tick preference */
  57.         WinSendMsg ( WinWindowFromID ( hwnd ,
  58.                        CLKTM_MAJOR | usMajorTickPref ) ,
  59.              BM_SETCHECK , MPFROM2SHORT ( TRUE , NULL ) , NULL ) ;
  60.  
  61.         /* show the current minor tick preference */
  62.         WinSendMsg ( WinWindowFromID ( hwnd ,
  63.                        CLKTM_MINOR | usMinorTickPref ) ,
  64.              BM_SETCHECK , MPFROM2SHORT ( TRUE , NULL ) , NULL ) ;
  65.  
  66.         /* load the selection values from the preferences */
  67.         usMajorTickSel = usMajorTickPref ;
  68.         usMinorTickSel = usMinorTickPref ;
  69.  
  70.         /* let the default dialog procedure handle anything else */
  71.         break ;
  72.  
  73.     case WM_COMMAND :
  74.  
  75.         switch ( LOUSHORT ( mp1 ) ) {
  76.  
  77.         case DID_OK :
  78.  
  79.             /* store away selections as preferences */
  80.             usMajorTickPref = usMajorTickSel ;
  81.             usMinorTickPref = usMinorTickSel ;
  82.  
  83.             /* repaint with the new preferences */
  84.             WinInvalidateRect ( hwndFrame , NULL, TRUE ) ;
  85.  
  86.         case DID_CANCEL :
  87.             WinDismissDlg ( hwnd , TRUE ) ;
  88.         }
  89.  
  90.         return NULL ;
  91.  
  92.     case WM_CONTROL :
  93.  
  94.         if ( SHORT2FROMMP ( mp1 ) == BN_CLICKED ) {
  95.  
  96.         usButtonID = SHORT1FROMMP ( mp1 ) ;
  97.  
  98.         switch ( usButtonID & 0xff00 ) {
  99.  
  100.             case CLKTM_MAJOR :
  101.             usMajorTickSel = LOBYTE ( usButtonID ) ;
  102.             break ;
  103.  
  104.             case CLKTM_MINOR :
  105.             usMinorTickSel = LOBYTE ( usButtonID ) ;
  106.             break ;
  107.         }
  108.         }
  109.  
  110.         /* fall through to the default control processing */
  111.     }
  112.  
  113.     return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
  114. }
  115.  
  116.  
  117. /*
  118.     ClkColorsDlgProc()        "Clock Color Preferences" Dialog
  119.  
  120.     Returns: MRESULT, 0 or return value from WinDefDlgProc
  121. */
  122. MRESULT EXPENTRY ClkColorsDlgProc ( HWND hwnd , USHORT usMsg ,
  123.                    MPARAM mp1 , MPARAM mp2 )
  124. {
  125.     USHORT usButtonID ;
  126.     static USHORT usCheckedButtonID ;
  127.     HWND hwndButton ;
  128.     RECTL rclButton , rclButtonInterior ;
  129.     static LONG clrBackgroundNew ;
  130.     static LONG clrFaceNew ;
  131.     static LONG clrHourHandNew ;
  132.     static LONG clrMinuteHandNew ;
  133.     static LONG * pclrNew ;
  134.  
  135.     switch ( usMsg ) {
  136.  
  137.     case WM_INITDLG :
  138.  
  139.         /* load the new values from the current ones */
  140.         clrBackgroundNew = clrBackground ;
  141.         clrFaceNew = clrFace ;
  142.         clrHourHandNew = clrHourHand ;
  143.         clrMinuteHandNew = clrMinuteHand ;
  144.  
  145.         /* click the "Background" radio button */
  146.         WinSendMsg ( WinWindowFromID ( hwnd , CLKCLR_BACKGROUND ) ,
  147.              BM_CLICK , MPFROMSHORT ( TRUE ) , NULL ) ;
  148.  
  149.         /* let the default dialog procedure handle anything else */
  150.         break ;
  151.  
  152.     case WM_COMMAND :
  153.  
  154.         switch ( LOUSHORT ( mp1 ) ) {
  155.         case DID_OK :
  156.  
  157.             /* store the new values */
  158.             clrBackground = clrBackgroundNew ;
  159.             clrFace = clrFaceNew ;
  160.             clrHourHand = clrHourHandNew ;
  161.             clrMinuteHand = clrMinuteHandNew ;
  162.  
  163.             /* repaint with the new colors */
  164.             WinInvalidateRect ( hwndFrame , NULL, TRUE ) ;
  165.  
  166.         case DID_CANCEL :
  167.  
  168.             WinDismissDlg ( hwnd , TRUE ) ;
  169.         }
  170.         return NULL ;
  171.  
  172.     case WM_CONTROL :
  173.  
  174.         usButtonID = SHORT1FROMMP ( mp1 ) ;
  175.  
  176.         /* selecting a new object */
  177.         if ( usButtonID & CLKCLR_OBJECTS ) {
  178.  
  179.         switch ( usButtonID ) {
  180.             case CLKCLR_BACKGROUND :
  181.             pclrNew = & clrBackgroundNew ;
  182.             break ;
  183.             case CLKCLR_FACE :
  184.             pclrNew = & clrFaceNew ;
  185.             break ;
  186.             case CLKCLR_HOURHAND :
  187.             pclrNew = & clrHourHandNew ;
  188.             break ;
  189.             case CLKCLR_MINUTEHAND :
  190.             pclrNew = & clrMinuteHandNew ;
  191.         }
  192.  
  193.         /* click the button for the new object's current color */
  194.         WinSendMsg (
  195.             WinWindowFromID ( hwnd ,
  196.             CLKCLR_BUTTONSHIFT + ( USHORT ) * pclrNew ) ,
  197.             BM_CLICK , MPFROMSHORT ( TRUE ) , NULL ) ;
  198.  
  199.         break ;
  200.         }
  201.  
  202.         switch ( SHORT2FROMMP ( mp1 ) ) {
  203.  
  204.         case BN_CLICKED :
  205.  
  206.             * pclrNew = ( LONG ) usButtonID - CLKCLR_BUTTONSHIFT ;
  207.  
  208.             /* turn off the check state of the previously checked
  209.              * button and turn on the check state of the button
  210.              * just clicked */
  211.  
  212.             WinSendMsg ( WinWindowFromID ( hwnd , usCheckedButtonID ) ,
  213.                  BM_SETCHECK , MPFROM2SHORT ( FALSE , NULL ) ,
  214.                  NULL ) ;
  215.             WinSendMsg ( WinWindowFromID ( hwnd , usButtonID ) ,
  216.                  BM_SETCHECK , MPFROM2SHORT ( TRUE , NULL ) ,
  217.                  NULL ) ;
  218.  
  219.             usCheckedButtonID = usButtonID ;
  220.  
  221.             break ;
  222.  
  223.         case BN_PAINT :
  224.  
  225.             /* fill only the interior of the button, so we don't
  226.              * conflict with the focus indicator */
  227.  
  228.             hwndButton = ( ( PUSERBUTTON ) mp2 ) -> hwnd ;
  229.             WinQueryWindowRect ( hwndButton , & rclButton ) ;
  230.             rclButton . xLeft ++ ;
  231.             rclButton . yBottom ++ ;
  232.             rclButton . xRight -- ;
  233.             rclButton . yTop -- ;
  234.             WinFillRect ( ( ( PUSERBUTTON ) mp2 ) -> hps ,
  235.                   & rclButton ,
  236.                   ( LONG ) usButtonID - CLKCLR_BUTTONSHIFT ) ;
  237.  
  238.             /* hollow out those buttons which aren't checked */
  239.             if ( ! WinSendMsg ( WinWindowFromID ( hwnd , usButtonID ) ,
  240.                       BM_QUERYCHECK , NULL , NULL ) ) {
  241.             rclButtonInterior . xLeft = rclButton . xLeft + 4 ;
  242.             rclButtonInterior . yBottom = rclButton . yBottom + 4 ;
  243.             rclButtonInterior . xRight = rclButton . xRight - 4 ;
  244.             rclButtonInterior . yTop = rclButton . yTop - 4 ;
  245.             WinFillRect ( ( ( PUSERBUTTON ) mp2 ) -> hps ,
  246.                       & rclButtonInterior , SYSCLR_WINDOW ) ;
  247.             }
  248.  
  249.             break ;
  250.         }
  251.  
  252.         /* fall through to the default control processing */
  253.     }
  254.  
  255.     return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
  256. }
  257.