home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / TCL228 / TCL228.lzh / EXESRC.lzh / pageabout.c < prev    next >
C/C++ Source or Header  |  1999-09-18  |  4KB  |  144 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 OnLinkClicked(HWND hDlg, UINT id);
  11.  
  12. static HFONT hfontLink;  //リンクラベルフォント
  13. // リンクラベル用サブクラスプロシージャ
  14. static WNDPROC oldLabProc = NULL;
  15. LRESULT CALLBACK LabLinkProc(HWND, UINT, WPARAM, LPARAM);
  16. static HCURSOR hCurHand = NULL;
  17.  
  18. /*------------------------------------------------
  19.  「バージョン情報」ページ用ダイアログプロシージャ
  20. --------------------------------------------------*/
  21.  
  22. BOOL CALLBACK PageAboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  23. {
  24.     switch(message)
  25.     {
  26.         case WM_INITDIALOG:
  27.             OnInit(hDlg);
  28.             return TRUE;
  29.         case WM_CTLCOLORSTATIC:
  30.         {
  31.             int id; HDC hdc;
  32.             hdc = (HDC)wParam;
  33.             id = GetDlgCtrlID((HWND)lParam);
  34.             if(id == IDC_MAILTO || id == IDC_HOMEPAGE)
  35.             {
  36.                 SetTextColor(hdc, RGB(0,0,255));
  37.                 SetBkMode(hdc, TRANSPARENT);
  38.                 return (int)GetSysColorBrush(COLOR_3DFACE);
  39.             }
  40.             break;
  41.         }
  42.         case WM_COMMAND:
  43.         {
  44.             WORD id, code;
  45.             id = LOWORD(wParam); code = HIWORD(wParam);
  46.             // 書式テキストボックス
  47.             if((id == IDC_MAILTO || id == IDC_HOMEPAGE) 
  48.                 && code == STN_CLICKED)
  49.             {
  50.                 OnLinkClicked(hDlg, id);
  51.             }
  52.             return TRUE;
  53.         }
  54.         case WM_NOTIFY:
  55.             switch(((NMHDR *)lParam)->code)
  56.             {
  57.                 case PSN_APPLY: break;
  58.                 case PSN_HELP: MyHelp(GetParent(hDlg), 7); break;
  59.             }
  60.             return TRUE;
  61.         case WM_DESTROY:
  62.             DeleteObject(hfontLink);
  63.             break;
  64.     }
  65.     return FALSE;
  66. }
  67.  
  68. /*------------------------------------------------
  69.  初期化 - リンク用ラベルをサブクラス化
  70. --------------------------------------------------*/
  71. static void OnInit(HWND hDlg)
  72. {
  73.     LOGFONT logfont;
  74.     
  75.     hfontLink = (HFONT)SendMessage(hDlg, WM_GETFONT, 0, 0);
  76.     GetObject(hfontLink, sizeof(LOGFONT), &logfont);
  77.     logfont.lfUnderline = 1;
  78.     hfontLink = CreateFontIndirect(&logfont);
  79.     SendDlgItemMessage(hDlg, IDC_MAILTO, WM_SETFONT, (WPARAM)hfontLink, 0);
  80.     SendDlgItemMessage(hDlg, IDC_HOMEPAGE, WM_SETFONT, (WPARAM)hfontLink, 0);
  81.     if(hCurHand == NULL)
  82.         hCurHand = LoadCursor(hInst, MAKEINTRESOURCE(IDC_HAND));
  83.     oldLabProc = (WNDPROC)GetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  84.         GWL_WNDPROC);
  85.     SetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  86.         GWL_WNDPROC, (LONG)LabLinkProc);
  87.     SetWindowLong(GetDlgItem(hDlg, IDC_HOMEPAGE),
  88.         GWL_WNDPROC, (LONG)LabLinkProc);
  89.     
  90.     //hbrback = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
  91. }
  92.  
  93. /*------------------------------------------------
  94.  リンク用ラベルがクリックされた
  95. --------------------------------------------------*/
  96. void OnLinkClicked(HWND hDlg, UINT id)
  97. {
  98.     char str[1024], *p;
  99.     BOOL bOutlook = FALSE;
  100.     
  101.     if(id == IDC_MAILTO)
  102.     {
  103.         GetRegStr(HKEY_CLASSES_ROOT, "mailto\\shell\\open\\command", "",
  104.             str, 1024, "");
  105.         p = str;
  106.         while(*p)
  107.         {
  108.             if(_strnicmp(p, "MSIMN.EXE", 9) == 0)
  109.             {
  110.                 bOutlook = TRUE; break;
  111.             }
  112.             p++;
  113.         }
  114.         
  115.         strcpy(str, "mailto:");
  116.         if(bOutlook)
  117.         {
  118.             strcat(str, "Kazubon <");
  119.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  120.             strcat(str, ">?subject=About%20TClock");
  121.         }
  122.         else
  123.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  124.     }
  125.     else GetDlgItemText(hDlg, id, str, 80);
  126.     
  127.     ShellExecute(hDlg, NULL, str, NULL, "", SW_SHOW);
  128. }
  129.  
  130. /*------------------------------------------------
  131.  リンク用ラベルのサブクラスプロシージャ
  132. --------------------------------------------------*/
  133. LRESULT CALLBACK LabLinkProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  134. {
  135.     switch(message)
  136.     {
  137.         case WM_SETCURSOR:
  138.             SetCursor(hCurHand);
  139.             return 1;
  140.     }
  141.     return CallWindowProc(oldLabProc, hwnd, message, wParam, lParam);
  142. }
  143.  
  144.