home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2002 December (Special) / DOSV2002_12.iso / utility / tcl230ja95.lzh / source.lzh / exe / pageabout.c < prev    next >
C/C++ Source or Header  |  2001-02-17  |  6KB  |  219 lines

  1. /*-------------------------------------------
  2.   pageabout.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 OnBrowseFile(HWND hDlg, WORD id);
  12. static void OnLinkClicked(HWND hDlg, UINT id);
  13.  
  14. static HFONT hfontLink;  //リンクラベルフォント
  15. // リンクラベル用サブクラスプロシージャ
  16. static WNDPROC oldLabProc = NULL;
  17. LRESULT CALLBACK LabLinkProc(HWND, UINT, WPARAM, LPARAM);
  18. static HCURSOR hCurHand = NULL;
  19.  
  20. #define SendPSChanged(hDlg) SendMessage(GetParent(hDlg),PSM_CHANGED,(WPARAM)(hDlg),0)
  21.  
  22. /*------------------------------------------------
  23.  「バージョン情報」ページ用ダイアログプロシージャ
  24. --------------------------------------------------*/
  25.  
  26. BOOL CALLBACK PageAboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  27. {
  28.     switch(message)
  29.     {
  30.         case WM_INITDIALOG:
  31.             OnInit(hDlg);
  32.             return TRUE;
  33.         case WM_CTLCOLORSTATIC:
  34.         {
  35.             int id; HDC hdc;
  36.             hdc = (HDC)wParam;
  37.             id = GetDlgCtrlID((HWND)lParam);
  38.             if(id == IDC_MAILTO || id == IDC_HOMEPAGE)
  39.             {
  40.                 SetTextColor(hdc, RGB(0,0,255));
  41.                 SetBkMode(hdc, TRANSPARENT);
  42.                 return (int)GetSysColorBrush(COLOR_3DFACE);
  43.             }
  44.             break;
  45.         }
  46.         case WM_COMMAND:
  47.         {
  48.             WORD id, code;
  49.             id = LOWORD(wParam); code = HIWORD(wParam);
  50.             if((id == IDC_MAILTO || id == IDC_HOMEPAGE) 
  51.                 && code == STN_CLICKED)
  52.             {
  53.                 OnLinkClicked(hDlg, id);
  54.             }
  55.             else if((id == IDC_HELPURL || id == IDC_LANGDLL)
  56.                 && code == EN_CHANGE)
  57.                 SendPSChanged(hDlg);
  58.             else if(id == IDC_BROWSEHELP || id == IDC_BROWSELANGDLL)
  59.                 OnBrowseFile(hDlg, id);
  60.             return TRUE;
  61.         }
  62.         case WM_NOTIFY:
  63.             switch(((NMHDR *)lParam)->code)
  64.             {
  65.                 case PSN_APPLY: OnApply(hDlg); break;
  66.                 case PSN_HELP: MyHelp(GetParent(hDlg), 7); break;
  67.             }
  68.             return TRUE;
  69.         case WM_DESTROY:
  70.             DeleteObject(hfontLink);
  71.             break;
  72.     }
  73.     return FALSE;
  74. }
  75.  
  76. /*------------------------------------------------
  77.   initialize
  78. --------------------------------------------------*/
  79. static void OnInit(HWND hDlg)
  80. {
  81.     LOGFONT logfont;
  82.     char s[MAX_PATH];
  83.     HFONT hfont;
  84.     
  85.     hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  86.     if(hfont)
  87.     {
  88.         SendDlgItemMessage(hDlg, IDC_HELPURL,
  89.             WM_SETFONT, (WPARAM)hfont, 0);
  90.         SendDlgItemMessage(hDlg, IDC_LANGDLL,
  91.             WM_SETFONT, (WPARAM)hfont, 0);
  92.     }
  93.     
  94.     SendDlgItemMessage(hDlg, IDC_ABOUTICON, STM_SETIMAGE,
  95.         IMAGE_ICON, (LPARAM)g_hIconTClock);
  96.     
  97.     hfontLink = (HFONT)SendMessage(hDlg, WM_GETFONT, 0, 0);
  98.     GetObject(hfontLink, sizeof(LOGFONT), &logfont);
  99.     logfont.lfUnderline = 1;
  100.     hfontLink = CreateFontIndirect(&logfont);
  101.     SendDlgItemMessage(hDlg, IDC_MAILTO, WM_SETFONT, (WPARAM)hfontLink, 0);
  102.     SendDlgItemMessage(hDlg, IDC_HOMEPAGE, WM_SETFONT, (WPARAM)hfontLink, 0);
  103.     if(hCurHand == NULL)
  104.         hCurHand = LoadCursor(g_hInst, MAKEINTRESOURCE(IDC_HAND));
  105.     oldLabProc = (WNDPROC)GetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  106.         GWL_WNDPROC);
  107.     SetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  108.         GWL_WNDPROC, (LONG)LabLinkProc);
  109.     SetWindowLong(GetDlgItem(hDlg, IDC_HOMEPAGE),
  110.         GWL_WNDPROC, (LONG)LabLinkProc);
  111.     
  112.     //hbrback = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
  113.     
  114.     GetMyRegStr("", "HelpURL", s, MAX_PATH, "");
  115.     SetDlgItemText(hDlg, IDC_HELPURL, s);
  116.     
  117.     GetMyRegStr("", "LangDLL", s, MAX_PATH, "");
  118.     SetDlgItemText(hDlg, IDC_LANGDLL, s);
  119. }
  120.  
  121. /*------------------------------------------------
  122.   "Apply" button
  123. --------------------------------------------------*/
  124. void OnApply(HWND hDlg)
  125. {
  126.     char s[MAX_PATH], s2[MAX_PATH];
  127.     
  128.     GetDlgItemText(hDlg, IDC_HELPURL, s, MAX_PATH);
  129.     SetMyRegStr("", "HelpURL", s);
  130.     
  131.     GetMyRegStr("", "LangDLL", s2, MAX_PATH, "");
  132.     GetDlgItemText(hDlg, IDC_LANGDLL, s, MAX_PATH);
  133.     if(strcmp(s, s2) != 0)
  134.         g_bApplyLangDLL = TRUE; // reload language dll
  135.     SetMyRegStr("", "LangDLL", s);
  136. }
  137.  
  138. /*------------------------------------------------
  139.   clicked "..." button
  140. --------------------------------------------------*/
  141. void OnBrowseFile(HWND hDlg, WORD id)
  142. {
  143.     char filter[80], deffile[MAX_PATH], fname[MAX_PATH];
  144.     
  145.     filter[0] = filter[1] = 0;
  146.     
  147.     if(id == IDC_BROWSEHELP)
  148.     {
  149.         str0cat(filter, "HTML");
  150.         str0cat(filter, "*.html;*.html");
  151.     }
  152.     else if(id == IDC_BROWSELANGDLL)
  153.     {
  154.         str0cat(filter, MyString(IDS_LANGDLLFILE));
  155.         str0cat(filter, "lang*.tclock");
  156.     }
  157.     
  158.     GetDlgItemText(hDlg, id - 1, deffile, MAX_PATH);
  159.     
  160.     if(!SelectMyFile(hDlg, filter, 0, deffile, fname)) // propsheet.c
  161.         return;
  162.     
  163.     SetDlgItemText(hDlg, id - 1, fname);
  164.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  165.     SendPSChanged(hDlg);
  166. }
  167.  
  168. /*------------------------------------------------
  169.  リンク用ラベルがクリックされた
  170. --------------------------------------------------*/
  171. void OnLinkClicked(HWND hDlg, UINT id)
  172. {
  173.     char str[1024], *p;
  174.     BOOL bOutlook = FALSE;
  175.     
  176.     if(id == IDC_MAILTO)
  177.     {
  178.         GetRegStr(HKEY_CLASSES_ROOT, "mailto\\shell\\open\\command", "",
  179.             str, 1024, "");
  180.         p = str;
  181.         while(*p)
  182.         {
  183.             if(_strnicmp(p, "MSIMN.EXE", 9) == 0)
  184.             {
  185.                 bOutlook = TRUE; break;
  186.             }
  187.             p++;
  188.         }
  189.         
  190.         strcpy(str, "mailto:");
  191.         if(bOutlook)
  192.         {
  193.             strcat(str, "Kazubon <");
  194.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  195.             strcat(str, ">?subject=About%20TClock");
  196.         }
  197.         else
  198.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  199.     }
  200.     else GetDlgItemText(hDlg, id, str, 80);
  201.     
  202.     ShellExecute(hDlg, NULL, str, NULL, "", SW_SHOW);
  203. }
  204.  
  205. /*------------------------------------------------
  206.  リンク用ラベルのサブクラスプロシージャ
  207. --------------------------------------------------*/
  208. LRESULT CALLBACK LabLinkProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  209. {
  210.     switch(message)
  211.     {
  212.         case WM_SETCURSOR:
  213.             SetCursor(hCurHand);
  214.             return 1;
  215.     }
  216.     return CallWindowProc(oldLabProc, hwnd, message, wParam, lParam);
  217. }
  218.  
  219.