home *** CD-ROM | disk | FTP | other *** search
/ Desktop Works 1995 - 1996 / desktopworks1995-1996.iso / animator / settings.c < prev    next >
C/C++ Source or Header  |  1996-01-01  |  6KB  |  203 lines

  1. #include "animator.h"
  2.  
  3. //////////////////////////////////////////////////////////////////////////
  4. // SettingsDlg - Dialog box window proc for getting the timer interval
  5. // between icon changes from the user.
  6. //////////////////////////////////////////////////////////////////////////
  7.  
  8. static HWND hwndEdit;
  9. static HWND hwndLink;
  10. static HWND hwndAuto;
  11. static HWND hwndOK;
  12. static HWND hwndMDI;
  13. static short sChild;
  14. static BOOL bAutoAnimate;
  15.  
  16. BOOL NEAR PASCAL Settings_OnInitDialog (HWND, HWND, LPARAM);
  17. BOOL NEAR PASCAL Settings_OnCommand (HWND, UINT, HWND, UINT);
  18.  
  19.  
  20. BOOL _export CALLBACK SettingsDlg(DLGPROC_PARAMS)
  21. {
  22.     switch (uMsg) 
  23.     {
  24.         case WM_INITDIALOG:
  25.             return (BOOL)HANDLE_WM_INITDIALOG (hDlg, wParam, lParam,
  26.                 Settings_OnInitDialog);
  27.         case WM_COMMAND:
  28.             return (BOOL)HANDLE_WM_COMMAND (hDlg, wParam, lParam, 
  29.                 Settings_OnCommand);
  30.     }
  31.     return FALSE;
  32. }
  33.  
  34.  
  35. BOOL NEAR PASCAL Settings_OnInitDialog (HWND hwndDlg, HWND hwndFocus, 
  36.     LPARAM lParam)
  37. {
  38.     hwndMDI  = MDI_GetActive (_hwndClient);
  39.  
  40.     if (IsWindow(hwndMDI)) 
  41.     {
  42.         sChild = WINDOWNUM(hwndMDI);
  43.     }
  44.  
  45.     hwndEdit = GetDlgItem (hwndDlg, IDD_EDIT);
  46.     hwndLink = GetDlgItem (hwndDlg, IDD_LINKFILENAME);
  47.     hwndAuto = GetDlgItem (hwndDlg, IDD_AUTOANIMATE);
  48.     hwndOK   = GetDlgItem (hwndDlg, IDOK);
  49.     
  50.     if(TIMEINT(sChild))
  51.     {
  52.         SetDlgItemInt (hwndDlg, IDD_EDIT, TIMEINT(sChild), FALSE);
  53.     }
  54.  
  55.     if (SZEXELINK(sChild)[0] != '\0')
  56.     {
  57.         SetDlgItemText (hwndDlg, IDD_LINKFILENAME, (LPSTR)SZEXELINK(sChild));
  58.     }
  59.  
  60.     // gray OK if bogus time interval
  61.     EnableWindow (hwndOK, TIMEINT(sChild));       
  62.  
  63.     // gray OK if no file linked
  64.     EnableWindow (hwndOK, (BOOL)(SZEXELINK(sChild)[0]!='\0'));
  65.  
  66.     CheckDlgButton (hwndDlg, IDD_AUTOANIMATE, 
  67.                             bAutoAnimate = (BOOL)AUTOANIMATE(sChild));
  68.     return (TRUE);
  69. }
  70.  
  71.  
  72.  
  73. BOOL NEAR PASCAL Settings_OnCommand (HWND hwndDlg, UINT uMsg, HWND hwndCtl,
  74.     UINT uNotify)
  75. {
  76.     switch (uMsg)
  77.     {
  78.         case IDD_EDIT:
  79.         {
  80.             if (uNotify == EN_CHANGE)
  81.             {
  82.                 EnableWindow (hwndOK, Edit_GetTextLength(hwndCtl));
  83.                 EnableWindow (hwndOK, (BOOL)(SZEXELINK(sChild)[0]!='\0'));
  84.             }
  85.             return TRUE;
  86.         }
  87.         case IDOK:
  88.         {
  89.             BOOL fSuccess;
  90.             short sNumber = GetDlgItemInt (hwndDlg, IDD_EDIT,
  91.                         (BOOL FAR *)&fSuccess, FALSE);
  92.  
  93.             if (fSuccess && sNumber >= MINTIME && sNumber < MAXTIME)
  94.             {
  95.                 HWND hwndTarget = (HWND) GetWindowLong(hwndDlg, DWL_USER);
  96.                 
  97.                 sNumber -= (sNumber % MINTIME);
  98.                 SET_TIMEINT (sChild, sNumber);
  99.                 
  100.                 GetDlgItemText (hwndDlg, IDD_LINKFILENAME,
  101.                     (LPSTR)SZEXELINK(sChild), MAX_FILE_SIZE);
  102.                 SET_HWNDTARGET (sChild, hwndTarget);
  103.                 SET_EXELOADED (sChild, (BOOL)(hwndTarget!=NULL));
  104.                 SET_HPREVICON (sChild, GetClassWord (hwndTarget, GCW_HICON));
  105.                 SET_AUTOANIMATE (sChild, bAutoAnimate);
  106.  
  107.                 EndDialog (hwndDlg, TRUE);
  108.             }
  109.             else
  110.             {
  111.                 MESSAGE (IDS_TimeDlgRange);
  112.             }
  113.             break ;
  114.         }
  115.         case IDCANCEL:
  116.         {
  117.             EndDialog (hwndDlg, FALSE) ;
  118.             break ;
  119.         }
  120.         case IDD_RUNNING:
  121.         {
  122.             FARPROC lpfnShowTask = 
  123.                         MakeProcInstance ((FARPROC)ShowTaskDlg, _hInst);
  124.             HWND hwndTarget = DialogBox (_hInst, SHOWTASKS, hwndDlg, 
  125.                         lpfnShowTask);
  126.  
  127.             if (hwndTarget != NULL)
  128.             {
  129.                 char szModuleFile[MAX_FILE_SIZE];
  130.  
  131.                 SetWindowLong (hwndDlg, DWL_USER, (DWORD)hwndTarget);
  132.  
  133.                 GetModuleFileName (GetWindowInstance(hwndTarget),
  134.                     (LPSTR)szModuleFile, MAX_FILE_SIZE);
  135.  
  136.                 SetDlgItemText (hwndDlg, IDD_LINKFILENAME, (LPSTR)szModuleFile);
  137.             }
  138.  
  139.             FreeProcInstance (lpfnShowTask);
  140.             
  141.             // gray OK if no file linked
  142.             EnableWindow (hwndOK, (BOOL)(SZEXELINK(sChild)[0]!='\0'));
  143.  
  144.             break;
  145.         }
  146.         case IDD_NOTRUNNING:
  147.         {
  148.             HWND hwndTarget = NULL;
  149.             char szExe[MAX_FILE_SIZE];
  150.  
  151.             lstrcpy ((LPSTR)szExe, (LPSTR)SZEXELINK(sChild));
  152.  
  153.             if (LinkToExecutable((LPSTR)szExe))
  154.             {
  155.                 hwndTarget = GetAppTaskWindow (szExe);
  156.  
  157.                 SetWindowLong (hwndDlg, DWL_USER, (DWORD)hwndTarget);
  158.  
  159.                 SetDlgItemText (hwndDlg, IDD_LINKFILENAME, (LPSTR)szExe);
  160.             }
  161.  
  162.             // gray OK if no file linked
  163.             EnableWindow (hwndOK, (BOOL)szExe[0]);
  164.             
  165.             break;
  166.         }
  167.         case IDD_AUTOANIMATE:
  168.         {
  169.             bAutoAnimate = !bAutoAnimate;
  170.             break;
  171.         }
  172.         default:
  173.             return FALSE ;
  174.     }
  175.  
  176.     return TRUE;
  177. }
  178.  
  179.  
  180.  
  181. HWND WINAPI GetAppTaskWindow (char * szFileName)
  182. {
  183.     HWND hwndNext;
  184.     char szModFileName[MAX_FILE_SIZE];
  185.  
  186.     for (hwndNext = GetWindow (_hwndFrame,GW_HWNDFIRST) ;
  187.          hwndNext ; 
  188.          hwndNext = GetWindow (hwndNext,GW_HWNDNEXT))
  189.     {
  190.         GetModuleFileName (GetWindowInstance(hwndNext), 
  191.             (LPSTR)szModFileName,sizeof (szModFileName));
  192.  
  193.         if (lstrcmp((LPSTR)szFileName,(LPSTR)szModFileName) == 0)
  194.         {
  195.             return hwndNext;
  196.         }
  197.     }
  198.  
  199.     return NULL;
  200. }
  201.  
  202.  
  203.