home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 December (DVD) / VPR0112A.ISO / OLS / TCL230JA95 / tcl230ja95.lzh / source.lzh / exe / pagealarm.c < prev    next >
C/C++ Source or Header  |  2001-02-17  |  16KB  |  603 lines

  1. /*-------------------------------------------
  2.   pagealarm.c
  3.   「アラーム」プロパティページ
  4.   KAZUBON 1997-1998
  5. ---------------------------------------------*/
  6.  
  7. #include "tclock.h"
  8.  
  9. static void OnInit(HWND hDlg);
  10. static void OnApply(HWND hDlg);
  11. static void OnDestroy(HWND hDlg);
  12. static void ReadAlarmFromReg(PALARMSTRUCT pAS, int num);
  13. static void SaveAlarmToReg(PALARMSTRUCT pAS, int num);
  14. static void GetAlarmFromDlg(HWND hDlg, PALARMSTRUCT pAS);
  15. static void SetAlarmToDlg(HWND hDlg, PALARMSTRUCT pAS);
  16. static void OnChangeAlarm(HWND hDlg);
  17. static void OnDropDownAlarm(HWND hDlg);
  18. static void OnDay(HWND hDlg);
  19. static void OnAlermJihou(HWND hDlg, WORD id);
  20. static void OnSanshoAlarm(HWND hDlg, WORD id);
  21. static void On12Hour(HWND hDlg);
  22. static void OnDelAlarm(HWND hDlg);
  23. static void OnFileChange(HWND hDlg, WORD id);
  24. static void OnTest(HWND hDlg, WORD id);
  25.  
  26. static int curAlarm;
  27. static BOOL bPlaying = FALSE;
  28.  
  29. #define SendPSChanged(hDlg) SendMessage(GetParent(hDlg),PSM_CHANGED,(WPARAM)(hDlg),0)
  30.  
  31. /*------------------------------------------------
  32.  「アラーム」ページ用ダイアログプロシージャ
  33. --------------------------------------------------*/
  34. BOOL CALLBACK PageAlarmProc(HWND hDlg, UINT message,
  35.     WPARAM wParam, LPARAM lParam)
  36. {
  37.     switch(message)
  38.     {
  39.         case WM_INITDIALOG:
  40.             OnInit(hDlg);
  41.             return TRUE;
  42.         case WM_COMMAND:
  43.         {
  44.             WORD id, code;
  45.             id = LOWORD(wParam); code = HIWORD(wParam);
  46.             // a combo-box to select alarm name
  47.             if(id == IDC_COMBOALARM)
  48.             {
  49.                 if(code == CBN_SELCHANGE)
  50.                     OnChangeAlarm(hDlg);
  51.                 else if(code == CBN_DROPDOWN)
  52.                     OnDropDownAlarm(hDlg);
  53.             }
  54.             //「アラームを鳴らす」「時報を鳴らす」
  55.             else if(id == IDC_ALARM || id == IDC_JIHOU)
  56.                 OnAlermJihou(hDlg, id);
  57.             // 時、分テキストボックス
  58.             else if((id == IDC_HOURALARM || id == IDC_MINUTEALARM)
  59.                 && code == EN_CHANGE)
  60.                 SendPSChanged(hDlg);
  61.             else if(id == IDC_ALARMDAY) // Day...
  62.             {
  63.                 OnDay(hDlg);
  64.             }
  65.             // 「サウンド」テキストボックス
  66.             else if((id == IDC_FILEALARM || id == IDC_FILEJIHOU)
  67.                 && code == EN_CHANGE)
  68.             {
  69.                 OnFileChange(hDlg, id);
  70.                 SendPSChanged(hDlg);
  71.             }
  72.             // 「...」
  73.             else if(id == IDC_SANSHOALARM || id == IDC_SANSHOJIHOU)
  74.             {
  75.                 OnSanshoAlarm(hDlg, id);
  76.                 OnFileChange(hDlg, (WORD)(id - 1));
  77.                 SendPSChanged(hDlg);
  78.             }
  79.             // 「12時間制」
  80.             else if(id == IDC_12HOURALARM)
  81.                 On12Hour(hDlg);
  82.             // 「繰り返す」「点滅する」
  83.             else if(id == IDC_REPEATALARM || id == IDC_REPEATJIHOU ||
  84.                 id == IDC_BLINKALARM || id == IDC_BLINKJIHOU)
  85.                 SendPSChanged(hDlg);
  86.             // 「×」
  87.             else if(id == IDC_DELALARM)
  88.                 OnDelAlarm(hDlg);
  89.             // サウンドのテスト
  90.             else if(id == IDC_TESTALARM || id == IDC_TESTJIHOU)
  91.                 OnTest(hDlg, id);
  92.             return TRUE;
  93.         }
  94.         case WM_NOTIFY:
  95.             switch(((NMHDR *)lParam)->code)
  96.             {
  97.                 case PSN_APPLY: OnApply(hDlg); break;
  98.                 case PSN_HELP: MyHelp(GetParent(hDlg), 3); break;
  99.             }
  100.             return TRUE;
  101.         case WM_DESTROY:
  102.             OnDestroy(hDlg);
  103.             if(bPlaying) StopFile(); bPlaying = FALSE;
  104.             break;
  105.         case MM_MCINOTIFY:
  106.         case MM_WOM_DONE:
  107.             StopFile(); bPlaying = FALSE;
  108.             SendDlgItemMessage(hDlg, IDC_TESTALARM, BM_SETIMAGE, IMAGE_ICON,
  109.                 (LPARAM)g_hIconPlay);
  110.             SendDlgItemMessage(hDlg, IDC_TESTJIHOU, BM_SETIMAGE, IMAGE_ICON,
  111.                 (LPARAM)g_hIconPlay);
  112.             return TRUE;
  113.     }
  114.     return FALSE;
  115. }
  116.  
  117. /*------------------------------------------------
  118.   initialize
  119. --------------------------------------------------*/
  120. void OnInit(HWND hDlg)
  121. {
  122.     char s[1024];
  123.     int i, count, index;
  124.     HFONT hfont;
  125.     
  126.     hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  127.     if(hfont)
  128.     {
  129.         SendDlgItemMessage(hDlg, IDC_COMBOALARM,
  130.             WM_SETFONT, (WPARAM)hfont, 0);
  131.         SendDlgItemMessage(hDlg, IDC_FILEALARM,
  132.             WM_SETFONT, (WPARAM)hfont, 0);
  133.         SendDlgItemMessage(hDlg, IDC_FILEJIHOU,
  134.             WM_SETFONT, (WPARAM)hfont, 0);
  135.     }
  136.     
  137.     index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)MyString(IDS_ADDALARM));
  138.     CBSetItemData(hDlg, IDC_COMBOALARM, index, 0);
  139.     
  140.     count = GetMyRegLong("", "AlarmNum", 0);
  141.     if(count < 1) count = 0;
  142.     for(i = 0; i < count; i++)
  143.     {
  144.         PALARMSTRUCT pAS;
  145.         pAS = malloc(sizeof(ALARMSTRUCT));
  146.         ReadAlarmFromReg(pAS, i);
  147.         index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
  148.         CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
  149.         if(i == 0)  SetAlarmToDlg(hDlg, pAS);
  150.     }
  151.     if(count > 0)
  152.     {
  153.         CBSetCurSel(hDlg, IDC_COMBOALARM, 1);
  154.         curAlarm = 1;
  155.     }
  156.     else
  157.     {
  158.         ALARMSTRUCT as;
  159.         CBSetCurSel(hDlg, IDC_COMBOALARM, 0);
  160.         curAlarm = -1;
  161.         memset(&as, 0, sizeof(as));
  162.         as.hour = 12;
  163.         as.days = 0x7f;
  164.         SetAlarmToDlg(hDlg, &as);
  165.     }
  166.     
  167.     CheckDlgButton(hDlg, IDC_JIHOU,
  168.         GetMyRegLong("", "Jihou", FALSE));
  169.     
  170.     GetMyRegStr("", "JihouFile", s, 1024, "");
  171.     SetDlgItemText(hDlg, IDC_FILEJIHOU, s);
  172.     
  173.     CheckDlgButton(hDlg, IDC_REPEATJIHOU,
  174.         GetMyRegLong("", "JihouRepeat", FALSE));
  175.     
  176.     CheckDlgButton(hDlg, IDC_BLINKJIHOU,
  177.         GetMyRegLong("", "JihouBlink", FALSE));
  178.     
  179.     OnAlermJihou(hDlg, IDC_JIHOU);
  180.     
  181.     SendDlgItemMessage(hDlg, IDC_TESTALARM, BM_SETIMAGE, IMAGE_ICON,
  182.         (LPARAM)g_hIconPlay);
  183.     OnFileChange(hDlg, IDC_FILEALARM);
  184.     SendDlgItemMessage(hDlg, IDC_TESTJIHOU, BM_SETIMAGE, IMAGE_ICON,
  185.         (LPARAM)g_hIconPlay);
  186.     OnFileChange(hDlg, IDC_FILEJIHOU);
  187.     
  188.     SendDlgItemMessage(hDlg, IDC_DELALARM, BM_SETIMAGE, IMAGE_ICON,
  189.         (LPARAM)g_hIconDel);
  190.     
  191.     bPlaying = FALSE;
  192. }
  193.  
  194. /*------------------------------------------------
  195.    apply - save settings
  196. --------------------------------------------------*/
  197. void OnApply(HWND hDlg)
  198. {
  199.     char s[1024];
  200.     int i, count, n_alarm;
  201.     PALARMSTRUCT pAS;
  202.     
  203.     n_alarm = 0;
  204.     
  205.     if(curAlarm < 0)
  206.     {
  207.         char name[40];
  208.         GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
  209.         if(name[0] && IsDlgButtonChecked(hDlg, IDC_ALARM))
  210.         {
  211.             pAS = malloc(sizeof(ALARMSTRUCT));
  212.             if(pAS)
  213.             {
  214.                 int index;
  215.                 GetAlarmFromDlg(hDlg, pAS);
  216.                 index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
  217.                 CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
  218.                 curAlarm = index;
  219.                 CBSetCurSel(hDlg, IDC_COMBOALARM, index);
  220.                 EnableDlgItem(hDlg, IDC_DELALARM, TRUE);
  221.             }
  222.         }
  223.     }
  224.     else
  225.     {
  226.         pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
  227.         if(pAS)
  228.             GetAlarmFromDlg(hDlg, pAS);
  229.     }
  230.     
  231.     count = CBGetCount(hDlg, IDC_COMBOALARM);
  232.     for(i = 0; i < count; i++)
  233.     {
  234.         PALARMSTRUCT pAS;
  235.         pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, i);
  236.         if(pAS)
  237.         {
  238.             SaveAlarmToReg(pAS, n_alarm);
  239.             n_alarm++;
  240.         }
  241.     }
  242.     for(i = n_alarm; ; i++)
  243.     {
  244.         char subkey[20];
  245.         wsprintf(subkey, "Alarm%d", i + 1);
  246.         if(!DelMyRegKey(subkey)) break;
  247.     }
  248.     
  249.     SetMyRegLong("", "AlarmNum", n_alarm);
  250.     
  251.     SetMyRegLong("", "Jihou",
  252.         IsDlgButtonChecked(hDlg, IDC_JIHOU));
  253.     
  254.     GetDlgItemText(hDlg, IDC_FILEJIHOU, s, 1024);
  255.     SetMyRegStr("", "JihouFile", s);
  256.     
  257.     SetMyRegLong("", "JihouRepeat",
  258.         IsDlgButtonChecked(hDlg, IDC_REPEATJIHOU));
  259.     SetMyRegLong("", "JihouBlink",
  260.         IsDlgButtonChecked(hDlg, IDC_BLINKJIHOU));
  261.     
  262.     InitAlarm(); // alarm.c
  263. }
  264.  
  265. /*------------------------------------------------
  266.   free memories associated with combo box.
  267. --------------------------------------------------*/
  268. void OnDestroy(HWND hDlg)
  269. {
  270.     int i, count;
  271.     
  272.     count = CBGetCount(hDlg, IDC_COMBOALARM);
  273.     for(i = 0; i < count; i++)
  274.     {
  275.         PALARMSTRUCT pAS;
  276.         pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, i);
  277.         if(pAS) free(pAS);
  278.     }
  279. }
  280.  
  281. void ReadAlarmFromReg(PALARMSTRUCT pAS, int num)
  282. {
  283.     char subkey[20];
  284.     
  285.     wsprintf(subkey, "Alarm%d", num + 1);
  286.     
  287.     GetMyRegStr(subkey, "Name", pAS->name, 40, "");
  288.     pAS->bAlarm = GetMyRegLong(subkey, "Alarm", FALSE);
  289.     pAS->hour = GetMyRegLong(subkey, "Hour", 12);
  290.     pAS->minute = GetMyRegLong(subkey, "Minute", 0);
  291.     GetMyRegStr(subkey, "File", pAS->fname, 1024, "");
  292.     pAS->bHour12 = GetMyRegLong(subkey, "Hour12", TRUE);
  293.     pAS->bRepeat = GetMyRegLong(subkey, "Repeat", FALSE);
  294.     pAS->bBlink = GetMyRegLong(subkey, "Blink", FALSE);
  295.     pAS->days = GetMyRegLong(subkey, "Days", 0x7f);
  296.     
  297.     if(pAS->name[0] == 0)
  298.         wsprintf(pAS->name, "%02d:%02d", pAS->hour, pAS->minute);
  299. }
  300.  
  301. void SaveAlarmToReg(PALARMSTRUCT pAS, int num)
  302. {
  303.     char subkey[20];
  304.     
  305.     wsprintf(subkey, "Alarm%d", num + 1);
  306.     SetMyRegStr(subkey, "Name", pAS->name);
  307.     SetMyRegLong(subkey, "Alarm", pAS->bAlarm);
  308.     SetMyRegLong(subkey, "Hour", pAS->hour);
  309.     SetMyRegLong(subkey, "Minute", pAS->minute);
  310.     SetMyRegStr(subkey, "File", pAS->fname);
  311.     SetMyRegLong(subkey, "Hour12", pAS->bHour12);
  312.     SetMyRegLong(subkey, "Repeat", pAS->bRepeat);
  313.     SetMyRegLong(subkey, "Blink", pAS->bBlink);
  314.     SetMyRegLong(subkey, "Days", pAS->days);
  315. }
  316.  
  317. void GetAlarmFromDlg(HWND hDlg, PALARMSTRUCT pAS)
  318. {
  319.     GetDlgItemText(hDlg, IDC_COMBOALARM, pAS->name, 40);
  320.     pAS->bAlarm = IsDlgButtonChecked(hDlg, IDC_ALARM);
  321.     pAS->hour = 
  322.         SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_GETPOS, 0, 0);
  323.     pAS->minute =
  324.         SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_GETPOS, 0, 0);
  325.     GetDlgItemText(hDlg, IDC_FILEALARM, pAS->fname, MAX_PATH);
  326.     pAS->bHour12 = IsDlgButtonChecked(hDlg, IDC_12HOURALARM);
  327.     pAS->bRepeat = IsDlgButtonChecked(hDlg, IDC_REPEATALARM);
  328.     pAS->bBlink = IsDlgButtonChecked(hDlg, IDC_BLINKALARM);
  329.     pAS->days = GetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, NULL, FALSE);
  330. }
  331.  
  332. void SetAlarmToDlg(HWND hDlg, PALARMSTRUCT pAS)
  333. {
  334.     SetDlgItemText(hDlg, IDC_COMBOALARM, pAS->name);
  335.     CheckDlgButton(hDlg, IDC_ALARM, pAS->bAlarm);
  336.     SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETRANGE, 0,
  337.         MAKELONG(23, 0));
  338.     SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETPOS, 0,
  339.         pAS->hour);
  340.     SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_SETRANGE, 0,
  341.         MAKELONG(59, 0));
  342.     SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_SETPOS, 0,
  343.         pAS->minute);
  344.     SetDlgItemText(hDlg, IDC_FILEALARM, pAS->fname);
  345.     CheckDlgButton(hDlg, IDC_12HOURALARM, pAS->bHour12);
  346.     CheckDlgButton(hDlg, IDC_REPEATALARM, pAS->bRepeat);
  347.     CheckDlgButton(hDlg, IDC_BLINKALARM, pAS->bBlink);
  348.     SetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, pAS->days, FALSE);
  349.     
  350.     On12Hour(hDlg);
  351.     OnFileChange(hDlg, IDC_FILEALARM);
  352.     OnAlermJihou(hDlg, IDC_ALARM);
  353. }
  354.  
  355. /*------------------------------------------------
  356.    selected alarm by combobox
  357. --------------------------------------------------*/
  358. void OnChangeAlarm(HWND hDlg)
  359. {
  360.     PALARMSTRUCT pAS;
  361.     int index;
  362.     
  363.     index = CBGetCurSel(hDlg, IDC_COMBOALARM);
  364.     if(curAlarm >= 0 && index == curAlarm) return;
  365.     
  366.     if(curAlarm < 0)
  367.     {
  368.         char name[40];
  369.         GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
  370.         if(name[0] && IsDlgButtonChecked(hDlg, IDC_ALARM))
  371.         {
  372.             pAS = malloc(sizeof(ALARMSTRUCT));
  373.             if(pAS)
  374.             {
  375.                 int index;
  376.                 GetAlarmFromDlg(hDlg, pAS);
  377.                 index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
  378.                 CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
  379.                 curAlarm = index;
  380.             }
  381.         }
  382.     }
  383.     else
  384.     {
  385.         pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
  386.         if(pAS) GetAlarmFromDlg(hDlg, pAS);
  387.     }
  388.     
  389.     pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, index);
  390.     if(pAS)
  391.     {
  392.         SetAlarmToDlg(hDlg, pAS);
  393.         EnableDlgItem(hDlg, IDC_DELALARM, TRUE);
  394.         curAlarm = index;
  395.     }
  396.     else
  397.     {
  398.         ALARMSTRUCT as;
  399.         memset(&as, 0, sizeof(as));
  400.         as.hour = 12;
  401.         as.days = 0x7f;
  402.         SetAlarmToDlg(hDlg, &as);
  403.         EnableDlgItem(hDlg, IDC_DELALARM, FALSE);
  404.         curAlarm = -1;
  405.     }
  406. }
  407.  
  408. /*------------------------------------------------
  409.   combo box is about to be made visible
  410. --------------------------------------------------*/
  411. void OnDropDownAlarm(HWND hDlg)
  412. {
  413.     PALARMSTRUCT pAS;
  414.     char name[40];
  415.     int index;
  416.     
  417.     if(curAlarm < 0) return;
  418.     pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
  419.     if(pAS == 0) return;
  420.     GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
  421.     if(strcmp(name, pAS->name) != 0)
  422.     {
  423.         strcpy(pAS->name, name);
  424.         CBDeleteString(hDlg, IDC_COMBOALARM, curAlarm);
  425.         index = CBInsertString(hDlg, IDC_COMBOALARM, curAlarm, name);
  426.         CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
  427.         CBSetCurSel(hDlg, IDC_COMBOALARM, index);
  428.         curAlarm = index;
  429.     }
  430. }
  431.  
  432. /*------------------------------------------------
  433.   "Day..."
  434. --------------------------------------------------*/
  435. void OnDay(HWND hDlg)
  436. {
  437.     int nOld, nNew;
  438.     
  439.     nOld = GetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, NULL, FALSE);
  440.     nNew = SetAlarmDay(hDlg, nOld);
  441.     if(nNew != nOld)
  442.     {
  443.         SetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, nNew, FALSE);
  444.         SendPSChanged(hDlg);
  445.     }
  446. }
  447.  
  448. /*------------------------------------------------
  449.  「アラームを鳴らす」「時報を鳴らす」
  450. --------------------------------------------------*/
  451. void OnAlermJihou(HWND hDlg, WORD id)
  452. {
  453.     int s, e, i;
  454.     BOOL b;
  455.     
  456.     if(id == IDC_ALARM)
  457.     {
  458.         s = IDC_LABTIMEALARM; e = IDC_BLINKALARM;
  459.     }
  460.     else
  461.     {
  462.         s = IDC_LABSOUNDJIHOU; e = IDC_BLINKJIHOU;
  463.     }
  464.     
  465.     b = IsDlgButtonChecked(hDlg, id);
  466.     for(i = s; i <= e; i++)    EnableDlgItem(hDlg, i, b);
  467.     
  468.     if(id == IDC_ALARM)
  469.         OnFileChange(hDlg, IDC_FILEALARM);
  470.     else
  471.         OnFileChange(hDlg, IDC_FILEJIHOU);
  472.     
  473.     if(b && id == IDC_ALARM)
  474.     {
  475.         char name[40];
  476.         GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
  477.         if(strcmp(name, MyString(IDS_ADDALARM)) == 0)
  478.             SetDlgItemText(hDlg, IDC_COMBOALARM, "");
  479.     }
  480.     
  481.     SendPSChanged(hDlg);
  482. }
  483.  
  484. /*------------------------------------------------
  485.   browse sound file
  486. --------------------------------------------------*/
  487. void OnSanshoAlarm(HWND hDlg, WORD id)
  488. {
  489.     char deffile[MAX_PATH], fname[MAX_PATH];
  490.     
  491.     GetDlgItemText(hDlg, id - 1, deffile, MAX_PATH);
  492.     
  493.     if(!BrowseSoundFile(hDlg, deffile, fname)) // soundselect.c
  494.         return;
  495.     
  496.     SetDlgItemText(hDlg, id - 1, fname);
  497.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  498. }
  499.  
  500. /*------------------------------------------------
  501.  「12時間制」
  502. --------------------------------------------------*/
  503. void On12Hour(HWND hDlg)
  504. {
  505.     WORD h, u, l;
  506.     
  507.     h = (WORD)SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_GETPOS, 0, 0);
  508.     if(h > 23) h = 23;
  509.     if(h <  0) h = 0;
  510.     
  511.     //スピンボタンコントロールの最大値と最小値の設定
  512.     u = 23; l = 0;
  513.     if(IsDlgButtonChecked(hDlg, IDC_12HOURALARM))
  514.     {
  515.         if(h > 12) h -= 12;
  516.         if(h == 0) h = 12;
  517.         u = 12; l = 1;
  518.     }
  519.     SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETPOS, 0, h);
  520.     SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETRANGE, 0,
  521.         MAKELONG(u, l));
  522.     SendPSChanged(hDlg);
  523. }
  524.  
  525. /*------------------------------------------------
  526.  アラーム削除
  527. --------------------------------------------------*/
  528. void OnDelAlarm(HWND hDlg)
  529. {
  530.     PALARMSTRUCT pAS;
  531.     
  532.     if(curAlarm < 0) return;
  533.     
  534.     pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
  535.     if(pAS)
  536.     {
  537.         PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  538.         CBDeleteString(hDlg, IDC_COMBOALARM, curAlarm);
  539.         free(pAS);
  540.         if(curAlarm > 0) curAlarm--;
  541.         CBSetCurSel(hDlg, IDC_COMBOALARM, curAlarm);
  542.         pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
  543.         if(pAS) SetAlarmToDlg(hDlg, pAS);
  544.         else
  545.         {
  546.             ALARMSTRUCT as;
  547.             memset(&as, 0, sizeof(as));
  548.             as.hour = 14;
  549.             as.days = 0x7f;
  550.             SetAlarmToDlg(hDlg, &as);
  551.             EnableDlgItem(hDlg, IDC_DELALARM, FALSE);
  552.             curAlarm = -1;
  553.         }
  554.     }
  555. }
  556.  
  557. /*------------------------------------------------
  558.  PLAY/STOPボタンの有効/無効化
  559. --------------------------------------------------*/
  560. void OnFileChange(HWND hDlg, WORD id)
  561. {
  562.     char fname[MAX_PATH];
  563.     BOOL b = FALSE;
  564.     
  565.     GetDlgItemText(hDlg, id, fname, MAX_PATH);
  566.     if(IsWindowEnabled(GetDlgItem(hDlg, id)))
  567.         b = TRUE;
  568.     EnableDlgItem(hDlg, id + 3, b);
  569.     
  570.     EnableDlgItem(hDlg,
  571.         (id==IDC_FILEALARM)?IDC_REPEATALARM:IDC_REPEATJIHOU,
  572.         b?IsMMFile(fname):FALSE);
  573. }
  574.  
  575. /*------------------------------------------------
  576.  サウンドのPLAY/STOP
  577. --------------------------------------------------*/
  578. void OnTest(HWND hDlg, WORD id)
  579. {
  580.     char fname[MAX_PATH];
  581.     
  582.     GetDlgItemText(hDlg, id - 3, fname, MAX_PATH);
  583.     if(fname[0] == 0) return;
  584.  
  585.     if((HICON)SendDlgItemMessage(hDlg, id, BM_GETIMAGE, IMAGE_ICON, 0)
  586.         == g_hIconPlay)
  587.     {
  588.         if(PlayFile(hDlg, fname, 0))
  589.         {
  590.             SendDlgItemMessage(hDlg, id, BM_SETIMAGE, IMAGE_ICON,
  591.                 (LPARAM)g_hIconStop);
  592.             InvalidateRect(GetDlgItem(hDlg, id), NULL, FALSE);
  593.             bPlaying = TRUE;
  594.         }
  595.     }
  596.     else
  597.     {
  598.         StopFile();
  599.         bPlaying = FALSE;
  600.     }
  601. }
  602.  
  603.