home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 March / VPR9803B.ISO / APUPDATE / VC / Tx300b / TX300B.LZH / WZICON.C < prev   
Text File  |  1997-06-15  |  19KB  |  666 lines

  1. // WZ Icon
  2. // Thanks dieさん
  3.  
  4. // 95/04/18   alpha version
  5. //   /04/21   自分自身で閉じたときに対応
  6. //   /04/23   位置保存機能追加
  7. //   /05/01   ファイルヒストリなど追加
  8. //   /05/07   ファイルオープン時のデフォルトフィルタ対応
  9. //2.94 970122 高速オープン対応
  10. //2.98 970307 設定ダイアログ追加
  11.  
  12. #pragma TXE
  13.  
  14. #include <windows.h>
  15. #include <windowsx.h>
  16. #include "prof.h"
  17. #import "shellapi"    // #include "shellapi.h"だとTCWのヘッダファイルを見に行ってしまう
  18. #include "dialog.h"
  19.  
  20. #define WZSC_NEWFILE        1001
  21. #define WZSC_OPENFILE        1002
  22. #define WZSC_GREP            1003
  23. #define WZSC_SETUP            1004
  24. #define WZSC_RESTOREPOS        1005
  25. #define WZSC_PRJOPEN        1006
  26. #define WZSC_TOPMOST        1007    // 950516 TY
  27. #define WZSC_OPENFILEBODY    1008    //1.00C TY
  28. #define WZSC_CONFIG            1009    //2.98 970307 
  29. #define WZSC_ABOUT            1010    //3.00B1 970612 
  30.  
  31. #define WZSC_DIRECTORYFIRST    1500    // 950513 TY
  32. #define WZSC_HISTORYFIRST    2000
  33.  
  34. #define WM_WZICON_OPENMENU        (WM_TXUSER + 0)
  35. #define WM_TRAY_CALLBACK        (WM_TXUSER + 1)
  36. #define WM_WZICON_OPENMENUPRIM    (WM_TXUSER + 2)    //3.00B1 970612 
  37.  
  38. static const mchar szApp[] = "WZ Icon";
  39. static const mchar szKeySavePos[] = "savepos";
  40. static const mchar szKeyLeft[] = "left";
  41. static const mchar szKeyTop[] = "top";
  42. static const mchar szForceMax[] = "forcemax";
  43. // 950516 TY
  44. static const mchar szKeyTopMost[] = "topmost";
  45. static TX* _textWzicon;                //2.94 970121 WZ Icon text
  46. static HMENU _hmenuFiler;            //2.94 970122 "ファイラー"サブメニューハンドル(参照専用)
  47.  
  48. // 設定内容変数
  49. BOOL g_fCanClose = FALSE;
  50. BOOL g_fSavePos;
  51. int g_nSaveLeft;
  52. int g_nSaveTop;
  53. int g_nHistMax;
  54. // 950513 TY
  55. int g_nDirMax = 10;
  56. BOOL g_fTopMost;    // 常に手前に表示
  57.  
  58. #ifdef __FLAT__
  59. //1.00H4 タスクバーのアイコンになるようにした
  60. void TrayMessage( HWND hWnd, UINT message)
  61. {
  62.     if (!_fwin40) return;
  63.     
  64.     NOTIFYICONDATA tnd;
  65.     strcpy(tnd.szTip,"WZ Editor");
  66.     
  67.     switch(message) {
  68.         case NIM_ADD: {
  69.             tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
  70.             break;
  71.         }
  72.         case NIM_MODIFY: {
  73.             tnd.uFlags = NIF_TIP;
  74.             break;
  75.         }
  76.         case NIM_DELETE: {
  77.             tnd.uFlags = 0;
  78.             break;
  79.         }
  80.     }
  81.     
  82.     tnd.uID = (UINT)IDI_WINLOGO;
  83.     tnd.cbSize = sizeof(NOTIFYICONDATA);
  84.     tnd.hWnd = hWnd;
  85.     tnd.uCallbackMessage = WM_TRAY_CALLBACK;
  86.     //
  87.     mchar szmodulename[CCHPATHNAME];
  88.     GetModuleFileName(_textWzicon->hInstance,szmodulename,CCHPATHNAME);
  89.     HICON hiconBig;
  90.     HICON hicon;
  91.     ExtractIconEx(szmodulename,0,&hiconBig,&hicon,1);
  92.     tnd.hIcon = hicon;
  93.     //
  94.     Shell_NotifyIcon(message, &tnd);
  95. }
  96. #endif
  97.  
  98. // 設定
  99. void ReadProfile(void)
  100. {
  101.     TxProfile prof;
  102.     profWzIniNew(&prof, szApp);
  103.     
  104.     g_fSavePos = (BOOL)profReadInt(&prof, szKeySavePos, FALSE);
  105.     g_fTopMost = (BOOL)profReadInt(&prof, szKeyTopMost, FALSE);
  106.     g_nSaveLeft = profReadInt(&prof, szKeyLeft, 0);
  107.     g_nSaveTop = profReadInt(&prof, szKeyTop, 0);
  108.     g_nHistMax = profReadInt(&prof, szForceMax, _textWzicon->nDispFileHist);
  109.     
  110.     profDelete(&prof);
  111. }
  112.  
  113. void WriteProfile(void)
  114. {
  115.     TxProfile prof;
  116.     profWzIniNew(&prof, szApp);
  117.     
  118.     RECT rc;
  119.     GetWindowRect(_textWzicon->hwndbase, &rc);
  120.     g_nSaveLeft = rc.left;
  121.     g_nSaveTop = rc.top;
  122.     
  123.     profWriteInt(&prof, szKeySavePos, (int)g_fSavePos);
  124.     profWriteInt(&prof, szKeyTopMost, (int)g_fTopMost);
  125.     profWriteInt(&prof, szKeyLeft, g_nSaveLeft);
  126.     profWriteInt(&prof, szKeyTop, g_nSaveTop);
  127.     
  128.     profDelete(&prof);
  129. }
  130.  
  131. static void FlushTopmost(void)
  132. {
  133.     SetWindowPos(_textWzicon->hwndbase,
  134.         g_fTopMost? HWND_TOPMOST : HWND_NOTOPMOST,
  135.         0,0,0,0,SWP_NOMOVE|SWP_NOSIZE
  136.     );
  137. }
  138.  
  139. //2.98 970311 
  140. static void ehFlush(void)
  141. {
  142. #ifdef __FLAT__
  143.     #if 1//3.00B1 970610 NT3.51でテキストキャプチャー、メールフックできなかった
  144.     TXCONFIGSHARE* shcfg = &text->share->config;
  145.     // 既にTXOP_EHSTARTしている場合は、設定をフラッシュさせる
  146.     txOp(text,TXOP_EHEND,0,0);
  147.     //
  148.     if (shcfg->fEnableEh || shcfg->fEnableEhMail) {
  149.         // START
  150.         txOp(text,TXOP_EHSTART,0,0);
  151.     }
  152.     #else
  153.     if (_fwin40) {//2.99D 970401 95/NT4.0のみにした
  154.         TXCONFIGSHARE* shcfg = &text->share->config;
  155.         // 既にTXOP_EHSTARTしている場合は、設定をフラッシュさせる
  156.         txOp(text,TXOP_EHEND,0,0);
  157.         //
  158.         if (shcfg->fEnableEh || shcfg->fEnableEhMail) {
  159.             // START
  160.             txOp(text,TXOP_EHSTART,0,0);
  161.         }
  162.     }
  163.     #endif
  164. #endif
  165. }
  166.  
  167. //2.98 970311 設定ダイアログ
  168. //3.00A2 970507 NT3.51でもWZ Iconの設定ダイアログが使える様にして、メーラのフックなどの設定ができるようにした
  169. uiConfig
  170. {
  171.     HDIALOG hd = dialog("WZ Iconの設定");
  172.     dialogSetContexthelp(hd,TRUE);
  173.     TXCONFIGSHARE* shcfg = &text->share->config;
  174.     mchar szVkEhStart[2] = {shcfg->vkEhStart,0};
  175.     BOOL fEnableEh = shcfg->fEnableEh;//2.99B 970323 
  176.     BOOL fEnableEhMail = shcfg->fEnableEhMail;//2.99B 970323 
  177.     BOOL fHookReadonly = shcfg->fHookReadonly;//3.00A2 970503 
  178. #ifdef __FLAT__
  179.         dialogHeadline(hd,"メーラのフック",40);
  180.         dialogControlHelp(hd,422);
  181.         dialogCheckB(hd,"メーラのフックを行う(&M)",&shcfg->fEnableEhMail);
  182.         //2.99B 970322 
  183.         dialogControlHelp(hd,423);
  184.         dialogControlGuide(hd,"ミリ秒",6);
  185.         dialogIntW(hd,"フック開始時のウェイト数(&W)",&shcfg->wtmEhmailStartWait,20,6);//2.99F 970404 5->6
  186.         dialogControlHelp(hd,424);
  187.         dialogControlGuide(hd,"ミリ秒",6);
  188.         dialogIntW(hd,"メール送信時のウェイト数(&S)",&shcfg->wtmEhmailSendWait,20,6);//2.99F 970404 5->6
  189.         //
  190.         dialogHeadline(hd,"テキストキャプチャー",40);
  191.         dialogControlHelp(hd,425);
  192.         dialogCheckB(hd,"テキストキャプチャーを行う(&T)",&shcfg->fEnableEh);
  193.         dialogControlHelp(hd,426);
  194.         dialogStrC(hd,"テキストキャプチャーキー(&K):  Alt+Ctrl+",szVkEhStart,26,2,4);
  195.         //3.00A2 970503 設定により、メールのビューアーもフック、キャプチャーできるようにした
  196.         dialogHeadline(hd,"詳細",40);
  197.         dialogControlHelp(hd,499);
  198.         dialogCheckB(hd,"ビューアーもフック、キャプチャーする(&V)",&shcfg->fHookReadonly);
  199.         if (_fwinnt351) {//3.00B2 970615 
  200.             dialogHeadline(hd,"表示",40);
  201.             dialogCheck(hd,"終了時位置保存(&P)",&g_fSavePos);
  202. //            dialogCheck(hd,"常に前面に表示(&O)",&g_fTopMost);// iminai
  203.         }
  204. #else
  205.         dialogCheck(hd,"終了時位置保存(&S)",&g_fSavePos);
  206.         dialogCheck(hd,"常に前面に表示(&T)",&g_fTopMost);
  207. #endif
  208.     if (dialogOpen(hd)) {
  209.         #ifdef __FLAT__
  210.             shcfg->vkEhStart = szVkEhStart[0];
  211.             txConfigOp(text,TXCONFIGOP_SHARESAVE,0);
  212. #if 1//2.99B 970323 動的設定変更は不可能。フック先でエラーが起こったりする
  213.             if (
  214.                 fEnableEh != shcfg->fEnableEh ||
  215.                 fEnableEhMail != shcfg->fEnableEhMail ||
  216.                 fHookReadonly != shcfg->fHookReadonly    //3.00A2 970503 
  217.             ) {
  218.     #if 1//3.00A2 970507 NT3.51だと、ファイルオープンダイアログも一緒に出ちゃった
  219.                 MessageBox(_textWzicon->hwndbase,"新しい設定を有効にするには、Windowsを再起動してください","WZ Icon",MB_OK);
  220.     #else
  221.                 information("新しい設定を有効にするには、Windowsを再起動してください");
  222.     #endif
  223.             }
  224. #else
  225.             ehFlush();
  226. #endif
  227.         #endif
  228.     }
  229. }
  230.  
  231. static BOOL _fModal;//2.99B 970322 WZ Iconでファイルオープンダイアログを複数開けてしまった
  232.  
  233. static BOOL CheckModal(void)
  234. {
  235. //2.99B 970322 new
  236.     if (_fModal) return TRUE;//2.99B 970322 
  237.     if (_textWzicon->fDisenableForModal) {//2.99B 970322 
  238.         beep();// err音
  239.         return TRUE;
  240.     }
  241.     return FALSE;
  242. }
  243.  
  244. //3.00B1 970612 new
  245. uiAbout
  246. {
  247.     ABOUTINFO info;
  248.     memset(&info,0,sizeof(info));
  249.     info.szicon = "iconWzIcon";
  250.     info.szappname = "WZ Icon";
  251.     info.szversion = "version " + VER_WZEDITOR;
  252.     about(&info);
  253. }
  254.  
  255. // フックプロシージャ
  256. HOOKRESULT
  257. __wndprocbase(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  258. {
  259.     //2.94 970122 
  260.     if (textTarget != _textWzicon) return HOOK_CONTINUE;
  261.     TX* text = _textWzicon;
  262.     //
  263.     mchar szPath[CCHPATHNAME + 10];
  264.     switch (uMsg) {
  265.         #ifdef __FLAT__
  266.         case WM_TRAY_CALLBACK: {
  267.             WPARAM uID  = wParam;
  268.             LPARAM uMouseMsg = lParam;
  269.             switch(uMouseMsg) {
  270.                 case WM_LBUTTONDOWN: {
  271.                     if (CheckModal()) break;//2.99B 970322 
  272.                     wndtxSetActive(text->hwndbase);
  273.                     #if 0//2.90 
  274.                     PostMessage(hwnd,WM_WZICON_OPENMENU,0,0);
  275.                     #else
  276.                     PostMessage(hwnd, WM_SYSCOMMAND, WZSC_OPENFILEBODY, 0);
  277.                     #endif
  278.                     break;
  279.                 }
  280.                 #if 1//2.90 
  281.                 case WM_RBUTTONDOWN: {
  282.                     if (CheckModal()) break;//2.99B 970322 
  283.                     wndtxSetActive(text->hwndbase);
  284.                     PostMessage(hwnd,WM_WZICON_OPENMENU,0,0);
  285.                     break;
  286.                 }
  287.                 #endif
  288.             }
  289.             return TRUE;
  290.         }
  291.         #endif
  292.         case WM_WZICON_OPENMENU: {
  293.             if (_fwin40 && GetActiveWindow() != text->hwndbase) {
  294.                 //1.01A WZ32でWindows95のとき、ダイアログ表示中にメニューが開いてしまった
  295.             } else {
  296.                 menuOpenMouse(GetSystemMenu(text->hwndbase,FALSE));
  297.             }
  298.             break;
  299.         }
  300.         case WM_WZICON_OPENMENUPRIM: {//3.00B1 970612 
  301.             menuOpenMouse(GetSystemMenu(text->hwndbase,FALSE));
  302.             break;
  303.         }
  304.         case WM_COMMAND: {
  305. //            if ((HWND)WM_COMMAND_GetHwndCtrl(wParam,lParam) != GetSystemMenu(text->hwndbase,FALSE)) break;
  306.         }
  307.         case WM_SYSCOMMAND: {
  308.             // メニュー
  309.             UINT uID = (UINT)wParam;
  310.             if ((uID >= WZSC_HISTORYFIRST) &&
  311.                 (uID < WZSC_HISTORYFIRST + g_nHistMax)) {
  312.                 uID -= WZSC_HISTORYFIRST;
  313.                 txOpenForkFast(
  314.                     text,
  315.                     histRead(HIST_FILE, histGetCount(HIST_FILE) - uID - 1)
  316.                 );
  317.             } else if (WZSC_DIRECTORYFIRST <= uID && uID < WZSC_DIRECTORYFIRST + g_nDirMax) {
  318.                 // 950513 TY
  319.                 uID -= WZSC_DIRECTORYFIRST;
  320.                 txOpenForkFast(
  321.                     text,
  322.                     "filer.txe -f\"" + histRead(HIST_PATH, histGetCount(HIST_PATH) - uID - 1) + "\""
  323.                 );
  324.                 //2.00E "-p"->"-f"
  325.                 //2.00E5 -f[] -> -f""
  326.             } else {
  327.                 switch (uID) {
  328.                     case WZSC_NEWFILE: {
  329.                         txuiOpenNew(text);//2.00B WZ Iconの新規作成の仕様を、WZ Editorと同じにした
  330.                         break;
  331.                     }
  332.                     case WZSC_OPENFILE: {
  333.                         #if 1//1.00C
  334.                         PostMessage(hwnd, WM_SYSCOMMAND, WZSC_OPENFILEBODY, 0);
  335.                         #else
  336.                         PostMessage(hwnd, WM_QUERYOPEN, 0, 0);
  337.                         #endif
  338.                         break;
  339.                     }
  340.                     case WZSC_OPENFILEBODY: {
  341.                         szPath[0] = '\0';
  342.                         _fModal = TRUE;//2.99B 970322 
  343.                         DWORD ret = txofnGetOpenFileName(text, szPath, "ファイルを開く");
  344.                         _fModal = FALSE;
  345.                         if (ret) {
  346.                             //1.00C WzIconのファイルでビューモードでファイルが開けなかった
  347.                             mchar *szsw = "";
  348.                             if (ret & TXOFN_READONLY) szsw = " --R";
  349.                             if (ret & TXOFN_VIEWMODE) szsw = " -v";
  350.                             txOpenForkFast(text, szPath + szsw);
  351.                         }
  352.                         break;
  353.                     }
  354.                     case WZSC_GREP: {
  355.                         //1.99B IDM__GREP etc 廃止
  356.                         callPost("search.grep");
  357.                         break;
  358.                     }
  359.                     case WZSC_PRJOPEN: {
  360.                         callPost("file.uiPrjOpen");//wz.mnu
  361.                         break;
  362.                     }
  363.                     case WZSC_SETUP: {
  364.                         g_fSavePos = ! g_fSavePos;
  365.                         break;
  366.                     }
  367.                     case WZSC_TOPMOST: {
  368.                         g_fTopMost = ! g_fTopMost;
  369.                         FlushTopmost();
  370.                         break;
  371.                     }
  372.                     case WZSC_CONFIG: {
  373.                         uiConfig();
  374.                         break;
  375.                     }
  376.                     case WZSC_ABOUT: {//3.00B1 970612 
  377.                         uiAbout();
  378.                         break;
  379.                     }
  380.                     case WZSC_RESTOREPOS: {
  381.                         SetWindowPos(
  382.                             hwnd,NULL,
  383.                             g_nSaveLeft,g_nSaveTop,0,0,
  384.                             SWP_NOSIZE|SWP_NOZORDER
  385.                         );
  386.                         break;
  387.                     }
  388.                     default: {
  389.                         if ((uID & 0xFFF0) == SC_CLOSE) {
  390.                             g_fCanClose = TRUE;
  391.                             if (uMsg == WM_COMMAND) {
  392.                                 PostMessage(hwnd,WM_CLOSE,0,0);
  393.                             }
  394.                         }
  395.                         return HOOK_CONTINUE;
  396.                     }
  397.                 }
  398.             }
  399.             macroHookWndBaseReturn(0);
  400.             break;
  401.         }
  402.         case WM_INITMENUPOPUP: {
  403.             // メニュー更新
  404.             HMENU hMenu = (HMENU)wParam;
  405.             if (hMenu == GetSystemMenu(text->hwndbase,FALSE)) {// これやんないと、サブメニューにまでヒストリーが登場してしまふ
  406. #if 0//2.98 970307 
  407.                 CheckMenuItem(hMenu,WZSC_SETUP,g_fSavePos ? MF_CHECKED : MF_UNCHECKED);
  408.                 CheckMenuItem(hMenu,WZSC_TOPMOST,g_fTopMost ? MF_CHECKED : MF_UNCHECKED);
  409. #endif
  410.                 int nMax = histGetCount(HIST_FILE);
  411.                 int idx;
  412.                 for (idx = 0;idx < g_nHistMax;idx++) {
  413.                     RemoveMenu(hMenu, WZSC_HISTORYFIRST + idx, MF_BYCOMMAND);
  414.                     if (idx < nMax) {
  415.                         mchar chIdx = ((idx + 1) <= 9) ? (idx + 1 + '0') : ' ';
  416.                         sprintf(szPath,"&%c %s",chIdx,histRead(HIST_FILE,nMax-idx-1));
  417.                         AppendMenu(hMenu,MF_STRING,WZSC_HISTORYFIRST + idx,szPath);
  418.                     }
  419.                 }
  420.                 macroHookWndBaseReturn(0);
  421.             } else if (hMenu == _hmenuFiler) {
  422.                 // これやんないと、WZ EDITORディレクトリヒストリーが登場してしまふ
  423.                 menuDelAll(hMenu);
  424.                 int id = WZSC_DIRECTORYFIRST;
  425.                 int n = histGetCount(HIST_PATH);
  426.                 int i;
  427.                 for (i = 0;i < 10;i++) {
  428.                     if (n == 0) break;
  429.                     menuStr(hMenu,"&"+chartostr('0'+i)+"\t"+histRead(HIST_PATH,--n),id++);
  430.                 }
  431.                 macroHookWndBaseReturn(0);
  432.                 break;
  433.             }
  434.             break;
  435.         }
  436.         case WM_DROPFILES: {
  437.             #if 1
  438.             //1.01A ファイルドロップ(複数対応)
  439.             mchar szfilename[CCHPATHNAME];
  440.             int n = DragQueryFile((HDROP)wParam,-1,szfilename,cchof(szfilename));
  441.             int i;
  442.             
  443.             for (i = 0;i < n;i++) {
  444.                 DragQueryFile((HDROP)wParam,i,szfilename,cchof(szfilename));
  445.                 txOpenForkFast(text,szfilename);
  446.             }
  447.             DragFinish((HDROP)wParam);
  448.             #else
  449.             // ファイルドロップ(一個だけ)
  450.             shellDragQueryFileOnce(
  451.                 (HDROP)wParam, szPath, CCHPATHNAME);
  452.             txOpenForkFast(text, szPath);
  453.             #endif
  454.             macroHookWndBaseReturn(0);
  455.             break;
  456.         }
  457.         case WM_QUERYOPEN: {
  458.             // アイコンダブルクリック
  459.             //1.00C WzIconを「アプリケーションの切り替え」でアクティブにしたときマウスが効かなかった
  460.             //WM_QUERYOPENではダイアログを開いてはいけなかった
  461.             #ifdef __FLAT__
  462.             if (_fwin40) break;
  463.             #endif
  464.             #if 0//1.01A WZ16で、ダブルクリックで[新規作成]にするには、これを1にしてください
  465.             PostMessage(hwnd, WM_SYSCOMMAND, WZSC_NEWFILE, 0);
  466.             #else
  467.             PostMessage(hwnd, WM_SYSCOMMAND, WZSC_OPENFILEBODY, 0);
  468.             #endif
  469.             macroHookWndBaseReturn(FALSE);
  470.             break;
  471.         }
  472.         case WM_QUERYENDSESSION: {
  473.             g_fCanClose = TRUE;
  474.             return HOOK_CONTINUE;
  475.         }
  476.         case WM_TXQUERYCLOSE: {
  477.             #if 1//2.90 WM_TXQUERYCLOSEのオリジナルルーチンを通す
  478.             {
  479.                 static BOOL f;
  480.                 if (f) {
  481.                     return HOOK_CONTINUE;
  482.                 } else {
  483.                     f = TRUE;
  484.                     BOOL ret = SendMessage(hwnd,uMsg,wParam,lParam);
  485.                     f = FALSE;
  486.                     if (!ret) {
  487.                         macroHookWndBaseReturn(FALSE);
  488.                         return HOOK_CAPTURE;
  489.                     }
  490.                 }
  491.             }
  492.             #endif
  493.             WriteProfile();
  494.             #ifdef __FLAT__
  495.             TrayMessage(text->hwndbase,NIM_DELETE);
  496.             #endif
  497.             #if 1//1.00F Windows標準のタスクマネージャでWZIconを終了できなかった
  498.             macroHookWndBaseReturn(TRUE);
  499.             #else
  500.             macroHookWndBaseReturn(g_fCanClose);
  501.             #endif
  502.             break;
  503.         }
  504. #ifdef __FLAT__    //3.00B1 970612 WZ Iconのショートカットにショートカットキーを割り当てると、そのショートカットキーを押すとWZ Iconの右クリックメニューを表示するようにした。これで出ない時(WZ Iconがアクティブウィンドウの場合)はAlt+Spaceで出る。
  505.         case WM_ACTIVATE: {
  506.             if (_fwin40) {
  507.                 BOOL fActive = LOWORD(wParam);
  508.                 if (fActive == WA_ACTIVE) {
  509.                     if (GetParent(lParam) == hwnd) {
  510.                         // WZ Iconが開いたダイアログが閉じられた場合はなにもしない
  511.                     } else {
  512.                         PostMessage(hwnd,WM_WZICON_OPENMENUPRIM,0,0);
  513.                     }
  514.                 }
  515.             }
  516.             return HOOK_CONTINUE;
  517.         }
  518. #endif
  519.         case WM_TXCLOSE: {//3.00B2 970615 
  520.             _textWzicon = NULL;
  521.             return HOOK_CONTINUE;
  522.         }
  523.         default: {
  524.             // フックしない
  525.             return HOOK_CONTINUE;
  526.         }
  527.     }
  528.     // フック済み
  529.     return HOOK_CAPTURE;
  530. }
  531.  
  532. // メニュー設定
  533. void CreateWZIconMenu(TX* text)
  534. {
  535.     HMENU hMenu = GetSystemMenu(text->hwndbase,FALSE);
  536.     
  537.     // SC_RESTORE は消しちゃ駄目かな?
  538.     RemoveMenu(hMenu,SC_ICON,MF_BYCOMMAND);
  539.     RemoveMenu(hMenu,SC_ZOOM,MF_BYCOMMAND);
  540.     RemoveMenu(hMenu,SC_SIZE,MF_BYCOMMAND);
  541.     if (_fwin40) {
  542.         RemoveMenu(hMenu,SC_RESTORE,MF_BYCOMMAND);
  543.         RemoveMenu(hMenu,SC_MOVE,MF_BYCOMMAND);
  544.         RemoveMenu(hMenu,0,MF_BYPOSITION);
  545.     }
  546.     // 最後のコマンドの境界
  547.     InsertMenu(hMenu,0,MF_BYPOSITION|MF_SEPARATOR,0,NULL);
  548.     // コマンド
  549.     InsertMenu(hMenu,0,MF_BYPOSITION,WZSC_NEWFILE,"新規作成(&N)");
  550.     InsertMenu(hMenu,1,MF_BYPOSITION,WZSC_OPENFILE,"ファイルを開く(&O)...");//1.00D Internal
  551.     InsertMenu(hMenu,2,MF_BYPOSITION,WZSC_PRJOPEN,"プロジェクトを開く(&P)...");//1.00D Internal
  552.     // ファイラーサブメニュー
  553.     _hmenuFiler = CreateMenu();
  554.     InsertMenu(_hmenuFiler,0,MF_BYPOSITION,0,"0");
  555.     InsertMenu(hMenu,3,MF_BYPOSITION|MF_POPUP,(UINT)_hmenuFiler,"ファイラー(&F)");// 950513 TY
  556.     //
  557.     InsertMenu(hMenu,4,MF_BYPOSITION,WZSC_GREP,"Grep検索(&G)");//1.00D Internal
  558. #if 1//3.00A2 970507 NT3.51でも設定ダイアログ使える様にした
  559.     //3.00B2 970615 Win3.1のWZ Iconの設定復活。終了時位置保存が指定できるようにした
  560.     InsertMenu(hMenu,5,MF_BYPOSITION,WZSC_CONFIG,"設定(&S)...");
  561. #else
  562.     #if 1//2.99G 970404 WZ16,WinNT3.51のWZ Iconの設定ダイアログで設定を変更しても利かなかったので、設定を削除
  563.     if (_fwin40) {
  564.         InsertMenu(hMenu,5,MF_BYPOSITION,WZSC_CONFIG,"設定(&S)...");
  565.     }
  566.     #else
  567.     InsertMenu(hMenu,5,MF_BYPOSITION,WZSC_CONFIG,"設定(&S)...");
  568.     #endif
  569. #endif
  570. #if 0//2.98 970307 
  571.     if (!_fwin40) {
  572.         InsertMenu(hMenu,5,MF_BYPOSITION,WZSC_SETUP,"終了時位置保存(&S)");
  573.         InsertMenu(hMenu,6,MF_BYPOSITION,WZSC_TOPMOST,"常に前面に表示(&T)");
  574.     }
  575. #endif
  576.     InsertMenu(hMenu,6,MF_BYPOSITION,WZSC_ABOUT,"バージョン情報(&A)...");//3.00B1 970612 WZ Iconにバージョン情報を追加
  577.     // ファイルヒストリリストリの境界
  578.     AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
  579. }
  580.  
  581. #if 0//3.00B1 970612 
  582. BOOL __txeclosemulti(HWND hwndprev)
  583. {
  584. //3.00B1 970612 
  585.     wndtxSetActive(hwndprev);
  586.     PostMessage(hwndprev,WM_WZICON_OPENMENUPRIM,0,0);
  587.     return TRUE;
  588. }
  589. #endif
  590.  
  591. // エントリ
  592. void __txenew(void)
  593. {
  594.     //2.94 970122 
  595.     _textWzicon = text;
  596.     text->fTxeOpenHigh = TRUE;
  597.     txSetFileName(text,NULL);//2.99G 970405 WZ Iconで設定ダイアログのコンテキストヘルプのフォントが変だった
  598.     // ウィンドウ設定
  599.     HWND hwnd = text->hwndbase;
  600.     text->fNoWndText = TRUE;
  601.     text->fNoOpenText = TRUE;
  602.     text->fNoProfile = TRUE;
  603. #if 0//2.99D 970401 NT3.51
  604.     if (!_fwin40) {
  605.         // ShowWindow() ではなぜかだめ・・
  606.         PostMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0L);
  607.     }
  608. #endif
  609.     SetWindowText(hwnd, szApp);
  610.     shellDragAcceptFiles(TRUE);
  611.     CreateWZIconMenu(text);
  612.     ReadProfile();
  613. #if 0//3.00B2 970615 
  614.     if (g_fSavePos) {
  615.         PostMessage(hwnd, WM_SYSCOMMAND, WZSC_RESTOREPOS, 0L);
  616.     }
  617. #endif
  618.     // 950516 TY
  619.     FlushTopmost();
  620.     // フックする
  621.     macroHookWndBase();
  622.     textSetProcessMode(hwnd,WZPROCESS_STAYALWAYS);
  623.     //2.99D 970401 NT3.51
  624.     text->nCmdShow = SW_MINIMIZE;
  625.     //
  626.     #ifdef __FLAT__//1.00H4
  627.     if (_fwin40) {
  628.         text->nCmdShow = SW_HIDE;
  629.     }
  630.     #endif
  631.     if (g_fSavePos) {//3.00B2 970615 
  632.         text->nCmdShow = SW_HIDE;
  633.     }
  634. }
  635.  
  636. // apidbに登録されないように
  637. void main(void)
  638. {
  639.     //1.00H5 __txenewから移動。__txenewでやるとタスクバーにアイコンが複数出てしまう
  640.     #ifdef __FLAT__//1.00H4 
  641.     if (_fwin40) {
  642.         TX* text = _textWzicon;
  643.         TrayMessage(text->hwndbase,NIM_ADD);
  644.         // 最後に開かれた自分以外のWZ窓をアクティブにする
  645.         wzlock(LOCK_WZPROCESS);
  646.         {
  647.             HWND hwndActive = NULL;
  648.             int i;
  649.             for (i = 0;i < text->share->nOpen;i++) {
  650.                 HWND hwnd = textRead(i);
  651.                 if (hwnd && hwnd != _textWzicon->hwndbase) hwndActive = hwnd;
  652.             }
  653.             PostMessage(hwndActive,WM_TXACTIVE,0,0);
  654.         }
  655.         wzunlock(LOCK_WZPROCESS);
  656.     }
  657.     #endif
  658.     ehFlush();//2.98 970311 
  659.     if (g_fSavePos) {//3.00B2 970615 
  660.         PostMessage(text->hwndbase, WM_SYSCOMMAND, WZSC_RESTOREPOS, 0L);
  661.         text->nCmdShow = SW_MINIMIZE;
  662.         ShowWindow(text->hwndbase,text->nCmdShow);
  663.     }
  664. }
  665.  
  666.