home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / TCL228 / TCL228.lzh / EXESRC.lzh / pagemisc.c < prev    next >
C/C++ Source or Header  |  1999-09-18  |  7KB  |  262 lines

  1. /*-------------------------------------------
  2.   pagemisc.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 OnDeskcal(HWND hDlg);
  12. static void OnSanshoDeskcal(HWND hDlg, WORD id);
  13.  
  14. static void OnStartup(HWND hDlg);
  15. BOOL CreateLink(LPCSTR fname, LPCSTR dstpath, LPCSTR name);
  16.  
  17. /*------------------------------------------------
  18.  「その他」ページ用ダイアログプロシージャ
  19. --------------------------------------------------*/
  20. BOOL CALLBACK PageMiscProc(HWND hDlg, UINT message,
  21.     WPARAM wParam, LPARAM lParam)
  22. {
  23.     switch(message)
  24.     {
  25.         case WM_INITDIALOG:
  26.             OnInit(hDlg);
  27.             return TRUE;
  28.         case WM_COMMAND:
  29.         {
  30.             WORD id, code;
  31.             id = LOWORD(wParam); code = HIWORD(wParam);
  32.             // 「時計を改造しない」
  33.             if(id == IDC_NOCLOCK)
  34.                 SendPSChanged(hDlg);
  35.             // 「デスクトップカレンダーの自動更新」
  36.             else if(id == IDC_DESKCAL)
  37.                 OnDeskcal(hDlg);
  38.             // チェックボックス
  39.             else if(id == IDC_MCIWAVE || id == IDC_ONLYDATECHANGED ||
  40.                     id == IDC_RESUMESUSPEND || id == IDC_TONIKAKU || 
  41.                     id == IDC_WATCHWALL)
  42.                 SendPSChanged(hDlg);
  43.             // 何秒後に開始
  44.             else if(id == IDC_DELAYSTART && code == EN_CHANGE)
  45.                 SendPSChanged(hDlg);
  46.             // 「...」 デスクトップカレンダーの参照
  47.             else if(id == IDC_SANSHODESKCAL)
  48.                 OnSanshoDeskcal(hDlg, id);
  49.             // 「スタートアップ」にショートカットをつくる
  50.             else if(id == IDC_STARTUP)
  51.                 OnStartup(hDlg);
  52.             return TRUE;
  53.         }
  54.         case WM_NOTIFY:
  55.             switch(((NMHDR *)lParam)->code)
  56.             {
  57.                 case PSN_APPLY: OnApply(hDlg); break;
  58.                 case PSN_HELP: MyHelp(GetParent(hDlg), 6); break;
  59.             }
  60.             return TRUE;
  61.     }
  62.     return FALSE;
  63. }
  64.  
  65. /*------------------------------------------------
  66.  ページの初期化
  67. --------------------------------------------------*/
  68. void OnInit(HWND hDlg)
  69. {
  70.     char s[1024];
  71.     
  72.     CheckDlgButton(hDlg, IDC_NOCLOCK,
  73.         GetMyRegLong("", "NoClock", FALSE));
  74.     
  75.     CheckDlgButton(hDlg, IDC_MCIWAVE,
  76.         GetMyRegLong("", "MCIWave", FALSE));
  77.  
  78.     SendDlgItemMessage(hDlg, IDC_SPINDELAYSTART, UDM_SETRANGE, 0,
  79.         MAKELONG(600, 0));
  80.     SendDlgItemMessage(hDlg, IDC_SPINDELAYSTART, UDM_SETPOS, 0,
  81.         (int)(short)GetMyRegLong("", "DelayStart", 0));
  82.     
  83.     CheckDlgButton(hDlg, IDC_DESKCAL,
  84.         GetMyRegLong("", "Deskcal", FALSE));
  85.     
  86.     if(GetRegStr(HKEY_CURRENT_USER, "Software\\Shinonon\\Deskcal",
  87.         "ExeFileName", s, 1024, "") == 0)
  88.     {
  89.         GetMyRegStr("", "DeskcalCommand", s, 1024, "");
  90.     }
  91.     SetDlgItemText(hDlg, IDC_COMDESKCAL, s);
  92.     
  93.     CheckDlgButton(hDlg, IDC_ONLYDATECHANGED,
  94.         GetMyRegLong("", "DeskcalOnlyDate", FALSE));
  95.     CheckDlgButton(hDlg, IDC_RESUMESUSPEND,
  96.         GetMyRegLong("", "DeskcalResumeSuspend", FALSE));
  97.     CheckDlgButton(hDlg, IDC_TONIKAKU,
  98.         GetMyRegLong("", "DeskcalTonikaku", FALSE));
  99.     CheckDlgButton(hDlg, IDC_WATCHWALL,
  100.         GetMyRegLong("", "WatchWallpaper", FALSE));
  101.     
  102.     OnDeskcal(hDlg);
  103. }
  104.  
  105. /*------------------------------------------------
  106.  更新
  107. --------------------------------------------------*/
  108. void OnApply(HWND hDlg)
  109. {
  110.     char s[1024];
  111.  
  112.     SetMyRegLong("", "NoClock", IsDlgButtonChecked(hDlg, IDC_NOCLOCK));
  113.     
  114.     SetMyRegLong("", "MCIWave", IsDlgButtonChecked(hDlg, IDC_MCIWAVE));
  115.     
  116.     SetMyRegLong("", "DelayStart",
  117.         SendDlgItemMessage(hDlg, IDC_SPINDELAYSTART, UDM_GETPOS, 0, 0));
  118.     
  119.     SetMyRegLong("", "Deskcal", IsDlgButtonChecked(hDlg, IDC_DESKCAL));
  120.     
  121.     GetDlgItemText(hDlg, IDC_COMDESKCAL, s, 1024);
  122.     SetMyRegStr("", "DeskcalCommand", s);
  123.  
  124.     SetMyRegLong("", "DeskcalOnlyDate",
  125.         IsDlgButtonChecked(hDlg, IDC_ONLYDATECHANGED));
  126.  
  127.     SetMyRegLong("", "DeskcalResumeSuspend",
  128.         IsDlgButtonChecked(hDlg, IDC_RESUMESUSPEND));
  129.  
  130.     SetMyRegLong("", "DeskcalTonikaku",
  131.         IsDlgButtonChecked(hDlg, IDC_TONIKAKU));
  132.     SetMyRegLong("", "WatchWallpaper",
  133.         IsDlgButtonChecked(hDlg, IDC_WATCHWALL));
  134. }
  135.  
  136. /*------------------------------------------------
  137.  「デスクトップカレンダー」の自動更新
  138. --------------------------------------------------*/
  139. void OnDeskcal(HWND hDlg)
  140. {
  141.     BOOL b;
  142.     int i;
  143.     
  144.     b = IsDlgButtonChecked(hDlg, IDC_DESKCAL);
  145.     for(i = IDC_LABDESKCAL; i <= IDC_WATCHWALL; i++)
  146.         EnableDlgItem(hDlg, i, b);
  147.     SendPSChanged(hDlg);
  148. }
  149.  
  150. /*------------------------------------------------
  151.  「...」 デスクトップカレンダーの参照
  152. --------------------------------------------------*/
  153. void OnSanshoDeskcal(HWND hDlg, WORD id)
  154. {
  155.     OPENFILENAME ofn;
  156.     char filter[] = "Deskcal.exe\0Deskcal.exe\0";
  157.     char fname[MAX_PATH], ftitle[MAX_PATH], initdir[MAX_PATH];
  158.     char s[MAX_PATH];
  159.     HFILE hf = HFILE_ERROR;
  160.     
  161.     initdir[0] = 0;
  162.     GetDlgItemText(hDlg, id - 1, initdir, MAX_PATH);
  163.     if(initdir[0]) del_title(initdir);
  164.     else
  165.     {
  166.         strcpy(initdir, mydir); del_title(initdir);
  167.     }
  168.     
  169.     fname[0] = 0;
  170.     memset(&ofn, '\0', sizeof(OPENFILENAME));
  171.     ofn.lStructSize = sizeof(OPENFILENAME);
  172.     ofn.hwndOwner = hDlg;
  173.     ofn.hInstance = hInst;
  174.     ofn.lpstrFilter = filter;
  175.     ofn.lpstrFile= fname;
  176.     ofn.nMaxFile = MAX_PATH;
  177.     ofn.lpstrFileTitle = ftitle;
  178.     ofn.nMaxFileTitle = MAX_PATH;
  179.     ofn.lpstrInitialDir = initdir;
  180.     ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|
  181.         OFN_FILEMUSTEXIST;
  182.     
  183.     if(!GetOpenFileName(&ofn)) return;
  184.     
  185.     strcpy(s, fname);
  186.     strcat(s, " -OnlyDraw");
  187.     SetDlgItemText(hDlg, id - 1, s);
  188.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  189.     SendPSChanged(hDlg);
  190. }
  191.  
  192. /*------------------------------------------------
  193.  「スタートアップ」にショートカットをつくる
  194. --------------------------------------------------*/
  195. void OnStartup(HWND hDlg)
  196. {
  197.     LPITEMIDLIST pidl;
  198.     char dstpath[MAX_PATH], myexe[MAX_PATH];
  199.  
  200.     if(SHGetSpecialFolderLocation(hDlg, CSIDL_STARTUP, &pidl) == NOERROR &&
  201.         SHGetPathFromIDList(pidl, dstpath) == TRUE)
  202.         ;
  203.     else return;
  204.     
  205.     if(MyMessageBox(hDlg, MyString(IDS_STARTUPLINK1),
  206.         "TClock", MB_YESNO, MB_ICONQUESTION) != IDYES) return;
  207.  
  208.     GetModuleFileName(hInst, myexe, MAX_PATH);
  209.     CreateLink(myexe, dstpath, "TClock");
  210. }
  211.  
  212. /*------------------------------------------------
  213.  ショートカットの作成
  214. --------------------------------------------------*/
  215. BOOL CreateLink(LPCSTR fname, LPCSTR dstpath, LPCSTR name) 
  216. {
  217.     HRESULT hres;
  218.     IShellLink* psl;
  219.     
  220.     CoInitialize(NULL);
  221.     
  222.     hres = CoCreateInstance(&CLSID_ShellLink, NULL, 
  223.         CLSCTX_INPROC_SERVER, &IID_IShellLink, &psl); 
  224.     if(SUCCEEDED(hres))
  225.     {
  226.         IPersistFile* ppf;
  227.         char path[MAX_PATH];
  228.         
  229. /*        path[0] = '\"';
  230.         strcpy(path+1, fname);
  231.         strcat(path, "\"");*/
  232.         psl->lpVtbl->SetPath(psl, fname);
  233.         psl->lpVtbl->SetDescription(psl, name);
  234.         strcpy(path, fname);
  235.         del_title(path);
  236.         psl->lpVtbl->SetWorkingDirectory(psl, path);
  237.         
  238.         hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile,
  239.             &ppf);
  240.         
  241.         if(SUCCEEDED(hres))
  242.         {
  243.             WORD wsz[MAX_PATH]; 
  244.             char lnkfile[MAX_PATH];
  245.             strcpy(lnkfile, dstpath);
  246.             add_title(lnkfile, (char*)name);
  247.             strcat(lnkfile, ".lnk");
  248.             
  249.             MultiByteToWideChar(CP_ACP, 0, lnkfile, -1,
  250.                 wsz, MAX_PATH);
  251.             
  252.             hres = ppf->lpVtbl->Save(ppf, wsz, TRUE);
  253.             ppf->lpVtbl->Release(ppf);
  254.         }
  255.         psl->lpVtbl->Release(psl);
  256.     }
  257.     CoUninitialize();
  258.     
  259.     if(SUCCEEDED(hres)) return TRUE;
  260.     else return FALSE;
  261. }
  262.