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

  1. /*-------------------------------------------
  2.   pagemouse.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 OnDropFilesChange(HWND hDlg);
  13. static void OnMouseButton(HWND hDlg);
  14. static void OnMouseClickTime(HWND hDlg, int id);
  15. static void OnMouseFunc(HWND hDlg);
  16. static void OnMouseFileChange(HWND hDlg);
  17. static void OnSansho(HWND hDlg, WORD id);
  18. static void InitMouseFuncList(HWND hDlg);
  19.  
  20. static char reg_section[] = "Mouse";
  21.  
  22. typedef struct {
  23.     BOOL disable;
  24.     int func[4];
  25.     char format[4][256];
  26.     char fname[4][256];
  27. } CLICKDATA;
  28. static CLICKDATA *pData = NULL;
  29.  
  30. #define SendPSChanged(hDlg) SendMessage(GetParent(hDlg),PSM_CHANGED,(WPARAM)(hDlg),0)
  31.  
  32. /*------------------------------------------------
  33.  「マウス操作」ページ用ダイアログプロシージャ
  34. --------------------------------------------------*/
  35. BOOL CALLBACK PageMouseProc(HWND hDlg, UINT message, 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.             // "Drop files"
  47.             if(id == IDC_DROPFILES && code == CBN_SELCHANGE)
  48.             {
  49.                 OnDropFilesChange(hDlg);
  50.                 g_bApplyClock = TRUE;
  51.             }
  52.             else if(id == IDC_DROPFILESAPP && code == EN_CHANGE)
  53.                 SendPSChanged(hDlg);
  54.             // "..."
  55.             else if(id == IDC_DROPFILESAPPSANSHO ||
  56.                 id == IDC_MOUSEFILESANSHO)
  57.                 OnSansho(hDlg, id);
  58.             //  "Button"
  59.             else if(id == IDC_MOUSEBUTTON && code == CBN_SELCHANGE)
  60.                 OnMouseButton(hDlg);
  61.             // single .... quadruple
  62.             else if(IDC_RADSINGLE <= id && id <= IDC_RADQUADRUPLE)
  63.                 OnMouseClickTime(hDlg, id);
  64.             //  Mouse Function
  65.             else if(id == IDC_MOUSEFUNC && code == CBN_SELCHANGE)
  66.             {
  67.                 OnMouseFunc(hDlg);
  68.                 SendPSChanged(hDlg);
  69.             }
  70.             // Mouse Function - File
  71.             else if(id == IDC_MOUSEFILE && code == EN_CHANGE)
  72.             {
  73.                 OnMouseFileChange(hDlg);
  74.                 SendPSChanged(hDlg);
  75.             }
  76.             else if(id == IDC_TOOLTIP && code == EN_CHANGE)
  77.             {
  78.                 g_bApplyClock = TRUE; SendPSChanged(hDlg);
  79.             }
  80.             return TRUE;
  81.         }
  82.         case WM_NOTIFY:
  83.             switch(((NMHDR *)lParam)->code)
  84.             {
  85.                 case PSN_APPLY: OnApply(hDlg); break;
  86.                 case PSN_HELP: MyHelp(GetParent(hDlg), 4); break;
  87.             }
  88.             return TRUE;
  89.         case WM_DESTROY:
  90.             OnDestroy(hDlg);
  91.             return TRUE;
  92.     }
  93.     return FALSE;
  94. }
  95.  
  96. /*------------------------------------------------
  97.  ページの初期化
  98. --------------------------------------------------*/
  99. void OnInit(HWND hDlg)
  100. {
  101.     char s[256];
  102.     char entry[20];
  103.     BOOL b;
  104.     int i, j;
  105.     HWND hDlgPage;
  106.     HFONT hfont;
  107.     
  108.     hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  109.     if(hfont)
  110.     {
  111.         SendDlgItemMessage(hDlg, IDC_DROPFILESAPP,
  112.             WM_SETFONT, (WPARAM)hfont, 0);
  113.         SendDlgItemMessage(hDlg, IDC_MOUSEFILE,
  114.             WM_SETFONT, (WPARAM)hfont, 0);
  115.         SendDlgItemMessage(hDlg, IDC_TOOLTIP,
  116.             WM_SETFONT, (WPARAM)hfont, 0);
  117.     }
  118.     
  119.     for(i = IDS_NONE; i <= IDS_MOVETO; i++)
  120.         CBAddString(hDlg, IDC_DROPFILES, (LPARAM)MyString(i));
  121.     CBSetCurSel(hDlg, IDC_DROPFILES, 
  122.         GetMyRegLong(reg_section, "DropFiles", 0));
  123.     GetMyRegStr(reg_section, "DropFilesApp", s, 256, "");
  124.     SetDlgItemText(hDlg, IDC_DROPFILESAPP, s);
  125.     
  126.     pData = malloc(sizeof(CLICKDATA) * 5);
  127.     
  128.     for(i = 0; i < 5; i++)
  129.     {
  130.         if(i == 1) continue;
  131.         for(j = 0; j < 4; j++)
  132.         {
  133.             wsprintf(entry, "%d%d", i, j+1);
  134.             pData[i].disable = FALSE;
  135.             pData[i].func[j] = 
  136.                 GetMyRegLong(reg_section, entry, MOUSEFUNC_NONE);
  137.             pData[i].format[j][0] = 0;
  138.             pData[i].fname[j][0] = 0;
  139.             if(pData[i].func[j] == MOUSEFUNC_CLIPBOARD)
  140.             {
  141.                 wsprintf(entry, "%d%dClip", i, j+1);
  142.                 GetMyRegStr(reg_section, entry, pData[i].format[j], 256, "");
  143.             }
  144.             else if(pData[i].func[j] == MOUSEFUNC_OPENFILE)
  145.             {
  146.                 wsprintf(entry, "%d%dFile", i, j+1);
  147.                 GetMyRegStr(reg_section, entry, pData[i].fname[j], 256, "");
  148.             }
  149.         }
  150.     }
  151.     
  152.     b = GetMyRegLong("", "StartButtonHide", FALSE);
  153.     if(b) b = GetMyRegLong("", "StartMenuClock", FALSE);
  154.     // 「タスクバー」ページの「時計にスタートメニュー」が
  155.     // チェックされているかどうか
  156.     hDlgPage = GetTopWindow(GetParent(hDlg));
  157.     while(hDlgPage)
  158.     {
  159.         if(GetDlgItem(hDlgPage, IDC_STARTBTNHIDE))
  160.         {
  161.             b = IsDlgButtonChecked(hDlgPage, IDC_STARTBTNHIDE);
  162.             if(b) b = IsDlgButtonChecked(hDlgPage, IDC_STARTMENUCLOCK);
  163.             break;
  164.         }
  165.         hDlgPage = GetNextWindow(hDlgPage, GW_HWNDNEXT);
  166.     }
  167.     pData[0].disable = b;
  168.     
  169.     for(i = IDS_LEFTBUTTON; i <= IDS_XBUTTON2; i++)
  170.         CBAddString(hDlg, IDC_MOUSEBUTTON, (LPARAM)MyString(i));
  171.     
  172.     // set mouse functions to combo box
  173.     InitMouseFuncList(hDlg);
  174.     
  175.     OnDropFilesChange(hDlg);
  176.     CBSetCurSel(hDlg, IDC_MOUSEBUTTON, 0);
  177.     OnMouseButton(hDlg);
  178.     
  179.     GetMyRegStr("Tooltip", "Tooltip", s, 256, "");
  180.     if(s[0] == 0) strcpy(s, "\"TClock\" LDATE");
  181.     SetDlgItemText(hDlg, IDC_TOOLTIP, s);
  182. }
  183.  
  184. /*------------------------------------------------
  185.  更新
  186. --------------------------------------------------*/
  187. void OnApply(HWND hDlg)
  188. {
  189.     char s[256], entry[20];
  190.     int n;
  191.     int i, j;
  192.     
  193.     n = CBGetCurSel(hDlg, IDC_DROPFILES);
  194.     SetMyRegLong("", "DropFiles", n > 0);
  195.     SetMyRegLong(reg_section, "DropFiles", n);
  196.     GetDlgItemText(hDlg, IDC_DROPFILESAPP, s, 256);
  197.     SetMyRegStr(reg_section, "DropFilesApp", s);
  198.     
  199.     for(i = 0; i < 5; i++)
  200.     {
  201.         if(i == 1) continue;
  202.         for(j = 0; j < 4; j++)
  203.         {
  204.             wsprintf(entry, "%d%d", i, j+1);
  205.             if(pData[i].func[j] >= 0)
  206.                 SetMyRegLong(reg_section, entry, pData[i].func[j]);
  207.             else DelMyReg(reg_section, entry);
  208.             if(pData[i].func[j] == MOUSEFUNC_CLIPBOARD)
  209.             {
  210.                 wsprintf(entry, "%d%dClip", i, j+1);
  211.                 SetMyRegStr(reg_section, entry, pData[i].format[j]);
  212.             }
  213.             else if(pData[i].func[j] == MOUSEFUNC_OPENFILE)
  214.             {
  215.                 wsprintf(entry, "%d%dFile", i, j+1);
  216.                 SetMyRegStr(reg_section, entry, pData[i].fname[j]);
  217.             }
  218.         }
  219.     }
  220.     
  221.     GetDlgItemText(hDlg, IDC_TOOLTIP, s, 256);
  222.     SetMyRegStr("Tooltip", "Tooltip", s);
  223. }
  224.  
  225. /*------------------------------------------------
  226.     
  227. --------------------------------------------------*/
  228. void OnDestroy(HWND hDlg)
  229. {
  230.     if(pData) free(pData);
  231. }
  232.  
  233. /*------------------------------------------------
  234.  「ファイルのドロップ」
  235. --------------------------------------------------*/
  236. void OnDropFilesChange(HWND hDlg)
  237. {
  238.     int i, n;
  239.     n = CBGetCurSel(hDlg, IDC_DROPFILES);
  240.     SetDlgItemText(hDlg, IDC_LABDROPFILESAPP,
  241.         MyString(n >= 3?IDS_LABFOLDER:IDS_LABPROGRAM));
  242.     for(i = IDC_LABDROPFILESAPP; i <= IDC_DROPFILESAPPSANSHO; i++)
  243.         ShowDlgItem(hDlg, i, (2 <= n && n <= 4));
  244.     
  245.     SendPSChanged(hDlg);
  246. }
  247.  
  248. /*------------------------------------------------
  249.   "Button"
  250. --------------------------------------------------*/
  251. void OnMouseButton(HWND hDlg)
  252. {
  253.     int n, button, j;
  254.     
  255.     n = CBGetCurSel(hDlg, IDC_MOUSEBUTTON);
  256.     button = n;
  257.     if(n > 0) button = n + 1;
  258.     
  259.     for(j = 0; j < 4; j++)
  260.     {
  261.         if(pData[button].func[j] >= 0) break;
  262.     }
  263.     if(j == 4) j = 0;
  264.     CheckRadioButton(hDlg, IDC_RADSINGLE, IDC_RADQUADRUPLE,
  265.         IDC_RADSINGLE + j);
  266.     OnMouseClickTime(hDlg, IDC_RADSINGLE + j);
  267. }
  268.  
  269. /*------------------------------------------------
  270.   "Single" ... "Quadruple"
  271. --------------------------------------------------*/
  272. void OnMouseClickTime(HWND hDlg, int id)
  273. {
  274.     int n, button;
  275.     int click, i, count, func;
  276.     
  277.     n = CBGetCurSel(hDlg, IDC_MOUSEBUTTON);
  278.     button = n;
  279.     if(n > 0) button = n + 1;
  280.     
  281.     click = id - IDC_RADSINGLE;
  282.     func = pData[button].func[click];
  283.     
  284.     count = CBGetCount(hDlg, IDC_MOUSEFUNC);
  285.     for(i = 0; i < count; i++)
  286.     {
  287.         if(func == CBGetItemData(hDlg, IDC_MOUSEFUNC, i))
  288.         {
  289.             CBSetCurSel(hDlg, IDC_MOUSEFUNC, i);
  290.             break;
  291.         }
  292.     }
  293.     
  294.     OnMouseFunc(hDlg);
  295. }
  296.  
  297. /*------------------------------------------------
  298.   Mouse Functions combo box
  299. --------------------------------------------------*/
  300. void OnMouseFunc(HWND hDlg)
  301. {
  302.     int n, button, j;
  303.     int click, index, func;
  304.     
  305.     n = CBGetCurSel(hDlg, IDC_MOUSEBUTTON);
  306.     button = n;
  307.     if(n > 0) button = n + 1;
  308.     
  309.     for(j = 0; j < 4; j++)
  310.     {
  311.         if(IsDlgButtonChecked(hDlg, IDC_RADSINGLE + j))
  312.             break;
  313.     }
  314.     if(j == 4) return;
  315.     click = j;
  316.     
  317.     index = CBGetCurSel(hDlg, IDC_MOUSEFUNC);
  318.     func = CBGetItemData(hDlg, IDC_MOUSEFUNC, index);
  319.     pData[button].func[click] = func;
  320.     
  321.     ShowDlgItem(hDlg, IDC_LABMOUSEFILE,
  322.         (func == MOUSEFUNC_CLIPBOARD||func == MOUSEFUNC_OPENFILE));
  323.     ShowDlgItem(hDlg, IDC_MOUSEFILE,
  324.         (func == MOUSEFUNC_CLIPBOARD||func == MOUSEFUNC_OPENFILE));
  325.     ShowDlgItem(hDlg, IDC_MOUSEFILESANSHO, func == MOUSEFUNC_OPENFILE);
  326.     
  327.     if(func == MOUSEFUNC_CLIPBOARD)
  328.     {
  329.         SetDlgItemText(hDlg, IDC_LABMOUSEFILE, MyString(IDS_FORMAT));
  330.         if(pData[button].format[click][0] == 0)
  331.             GetMyRegStr("", "Format", pData[button].format[click], 256, "");
  332.         SetDlgItemText(hDlg, IDC_MOUSEFILE, pData[button].format[click]);
  333.     }
  334.     else if(func == MOUSEFUNC_OPENFILE)
  335.     {
  336.         SetDlgItemText(hDlg, IDC_LABMOUSEFILE, MyString(IDS_FILE));
  337.         SetDlgItemText(hDlg, IDC_MOUSEFILE, pData[button].fname[click]);
  338.     }
  339. }
  340.  
  341. /*------------------------------------------------
  342.   Format/File - Mouse Function
  343. --------------------------------------------------*/
  344. void OnMouseFileChange(HWND hDlg)
  345. {
  346.     int n, button, j;
  347.     int click, index, func;
  348.     
  349.     n = CBGetCurSel(hDlg, IDC_MOUSEBUTTON);
  350.     button = n;
  351.     if(n > 0) button = n + 1;
  352.     
  353.     for(j = 0; j < 4; j++)
  354.     {
  355.         if(IsDlgButtonChecked(hDlg, IDC_RADSINGLE + j))
  356.             break;
  357.     }
  358.     if(j == 4) return;
  359.     click = j;
  360.     
  361.     index = CBGetCurSel(hDlg, IDC_MOUSEFUNC);
  362.     func = CBGetItemData(hDlg, IDC_MOUSEFUNC, index);
  363.     
  364.     if(func == MOUSEFUNC_CLIPBOARD)
  365.         GetDlgItemText(hDlg, IDC_MOUSEFILE, pData[button].format[click], 1024);
  366.     else if(func == MOUSEFUNC_OPENFILE)
  367.         GetDlgItemText(hDlg, IDC_MOUSEFILE, pData[button].fname[click], 1024);
  368. }
  369.  
  370. /*------------------------------------------------
  371.  「...」 ファイルの参照
  372. --------------------------------------------------*/
  373. void OnSansho(HWND hDlg, WORD id)
  374. {
  375.     int n;
  376.     char filter[80], deffile[MAX_PATH], fname[MAX_PATH];
  377.     
  378.     if(id == IDC_DROPFILESAPPSANSHO)
  379.     {
  380.         n = CBGetCurSel(hDlg, IDC_DROPFILES);
  381.         if(n >= 3)
  382.         {
  383.             BROWSEINFO bi;
  384.             LPITEMIDLIST pidl;
  385.             memset(&bi, 0, sizeof(BROWSEINFO));
  386.             bi.hwndOwner = hDlg;
  387.             bi.ulFlags = BIF_RETURNONLYFSDIRS;
  388.             pidl = SHBrowseForFolder(&bi);
  389.             if(pidl)
  390.             {
  391.                 SHGetPathFromIDList(pidl, fname);
  392.                 SetDlgItemText(hDlg, id - 1, fname);
  393.                 PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  394.                 SendPSChanged(hDlg);
  395.             }
  396.             return;
  397.         }
  398.     }
  399.     
  400.     filter[0] = 0;
  401.     if(id == IDC_DROPFILESAPPSANSHO)
  402.     {
  403.         str0cat(filter, MyString(IDS_PROGRAMFILE));
  404.         str0cat(filter, "*.exe");
  405.     }
  406.     str0cat(filter, MyString(IDS_ALLFILE));
  407.     str0cat(filter, "*.*");
  408.     
  409.     GetDlgItemText(hDlg, id - 1, deffile, MAX_PATH);
  410.     
  411.     if(!SelectMyFile(hDlg, filter, 0, deffile, fname)) // propsheet.c
  412.         return;
  413.     
  414.     SetDlgItemText(hDlg, id - 1, fname);
  415.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  416.     SendPSChanged(hDlg);
  417. }
  418.  
  419. /*------------------------------------------------
  420.   set mouse functions to combo box
  421. --------------------------------------------------*/
  422. void InitMouseFuncList(HWND hDlg)
  423. {
  424.     int index;
  425.     
  426.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_NONE));
  427.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_NONE);
  428.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_PROPDATE));
  429.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_DATETIME);
  430.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_EXITWIN));
  431.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_EXITWIN);
  432.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_RUN));
  433.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_RUNAPP);
  434.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_ALLMIN));
  435.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_MINALL);
  436.     index = CBAddString(hDlg, IDC_MOUSEFUNC,(LPARAM)MyString(IDS_SCREENSAVER));
  437.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_SCREENSAVER);
  438.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_SYNCTIME));
  439.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_SYNCTIME);
  440.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_TIMER));
  441.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_TIMER);
  442.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_MOUSECOPY));
  443.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_CLIPBOARD);
  444.     index = CBAddString(hDlg, IDC_MOUSEFUNC, (LPARAM)MyString(IDS_OPENFILE));
  445.     CBSetItemData(hDlg, IDC_MOUSEFUNC, index, MOUSEFUNC_OPENFILE);
  446. }
  447.