OSDN Git Service

Fix bugs of drag-and-drop handling.
[ffftp/ffftp.git] / toolmenu.c
1 /*=============================================================================\r
2 *\r
3 *                                                               ツールバーとメニュー\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define  STRICT\r
31 // IPv6対応\r
32 #include <winsock2.h>\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <string.h>\r
37 #include <mbstring.h>\r
38 #include <malloc.h>\r
39 #include <windowsx.h>\r
40 #include <commctrl.h>\r
41 #include <stdarg.h>\r
42 // IPv6対応\r
43 //#include <winsock.h>\r
44 \r
45 #include "common.h"\r
46 #include "resource.h"\r
47 \r
48 \r
49 /*===== プロトタイプ =====*/\r
50 \r
51 static void AddOpenMenu(HMENU hMenu, UINT Flg);\r
52 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
53 \r
54 /* 2007/09/21 sunasunamix  ここから *********************/\r
55 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
56 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
57 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
58 /********************************************* ここまで */\r
59 \r
60 \r
61 /*===== 外部参照 =====*/\r
62 \r
63 extern int SepaWidth;\r
64 extern int RemoteWidth;\r
65 \r
66 extern int CancelFlg;\r
67 \r
68 /* 設定値 */\r
69 extern int DotFile;\r
70 extern char AsciiExt[ASCII_EXT_LEN+1];\r
71 extern int TransMode;\r
72 extern int ListType;\r
73 extern int LocalWidth;\r
74 extern char ViewerName[VIEWERS][FMAX_PATH+1];\r
75 extern int TransMode;\r
76 extern int SortSave;\r
77 // UTF-8対応\r
78 extern int LocalKanjiCode;\r
79 \r
80 /*===== ローカルなワーク =====*/\r
81 \r
82 static HWND hWndTbarMain = NULL;\r
83 static HWND hWndTbarLocal = NULL;\r
84 static HWND hWndTbarRemote = NULL;\r
85 static HWND hWndDirLocal = NULL;\r
86 static HWND hWndDirRemote = NULL;\r
87 static HWND hWndDirLocalEdit = NULL;\r
88 static HWND hWndDirRemoteEdit = NULL;\r
89 \r
90 static WNDPROC HistEditBoxProcPtr;\r
91 \r
92 static HFONT DlgFont = NULL;\r
93 \r
94 static int TmpTransMode;\r
95 static int TmpHostKanjiCode;\r
96 static int TmpHostKanaCnv;\r
97 \r
98 // TODO: ローカルの漢字コードをShift_JIS以外にも対応\r
99 static int TmpLocalKanjiCode;\r
100 \r
101 static int TmpLocalFileSort;\r
102 static int TmpLocalDirSort;\r
103 static int TmpRemoteFileSort;\r
104 static int TmpRemoteDirSort;\r
105 \r
106 static int SyncMove = NO;\r
107 \r
108 // デッドロック対策\r
109 //static int HideUI = NO;\r
110 static int HideUI = 0;\r
111 \r
112 \r
113 /* 2007/09/21 sunasunamix  ここから *********************/\r
114 static WNDPROC pOldTbarMainProc   = NULL;\r
115 static WNDPROC pOldTbarLocalProc  = NULL;\r
116 static WNDPROC pOldTbarRemoteProc = NULL;\r
117 /********************************************* ここまで */\r
118 \r
119 \r
120 /* 以前、コンボボックスにカレントフォルダを憶えさせていた流れで */\r
121 /* このファイルでカレントフォルダを憶えさせる */\r
122 static char LocalCurDir[FMAX_PATH+1];\r
123 static char RemoteCurDir[FMAX_PATH+1];\r
124 \r
125 \r
126 /* メインのツールバー */\r
127 static TBBUTTON TbarDataMain[] = {\r
128         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
129         { 0,  MENU_CONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
130         { 16, MENU_QUICK, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
131         { 1,  MENU_DISCONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
132         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
133         { 2,  MENU_DOWNLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
134         { 3,  MENU_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
135         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
136         { 24, MENU_MIRROR_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
137         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
138         { 4,  MENU_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
139         { 5,  MENU_RENAME, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
140         { 6,  MENU_MKDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
141         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
142         { 7,  MENU_TEXT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
143         { 8,  MENU_BINARY, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
144         { 17, MENU_AUTO, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
145         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
146         { 27, MENU_L_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
147         { 20, MENU_L_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
148         { 21, MENU_L_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
149         { 28, MENU_L_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
150         { 29, MENU_L_KNJ_UTF8BOM, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
151         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
152         { 27, MENU_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
153         { 20, MENU_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
154         { 21, MENU_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
155         { 28, MENU_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
156         { 29, MENU_KNJ_UTF8BOM, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
157         { 22, MENU_KNJ_NONE, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
158         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
159         { 23, MENU_KANACNV, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
160         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
161         { 15, MENU_REFRESH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
162         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
163         { 18, MENU_LIST, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
164         { 19, MENU_REPORT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
165         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
166         { 25, MENU_SYNC, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
167         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
168         { 26, MENU_ABORT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }\r
169 };\r
170 \r
171 /* ローカル側のツールバー */\r
172 static TBBUTTON TbarDataLocal[] = {\r
173         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
174         { 0, MENU_LOCAL_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
175         { 1, MENU_LOCAL_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
176         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
177 };\r
178 \r
179 /* ホスト側のツールバー */\r
180 static TBBUTTON TbarDataRemote[] = {\r
181         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
182         { 0, MENU_REMOTE_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
183         { 1, MENU_REMOTE_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
184         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
185 };\r
186 \r
187 /* 全ボタン/メニュー項目 */\r
188 static const int HideMenus[] = {\r
189         MENU_CONNECT,           MENU_QUICK,                     MENU_DISCONNECT,\r
190         MENU_SET_CONNECT,       MENU_IMPORT_WS,         MENU_EXIT,\r
191         MENU_DOWNLOAD,          MENU_UPLOAD,            MENU_DOWNLOAD_AS,       MENU_MIRROR_UPLOAD,\r
192         MENU_UPLOAD_AS,         MENU_DOWNLOAD_NAME,     MENU_MIRROR_UPLOAD,\r
193         MENU_FILESIZE,          MENU_DELETE,            MENU_RENAME,\r
194         MENU_CHMOD,                     MENU_MKDIR,                     MENU_SOMECMD,\r
195         MENU_SYNC,\r
196         MENU_BMARK_ADD,         MENU_BMARK_ADD_LOCAL, MENU_BMARK_ADD_BOTH,\r
197         MENU_BMARK_EDIT,\r
198         MENU_FILTER,            MENU_FIND,                      MENU_FINDNEXT,          MENU_SELECT,\r
199         MENU_SELECT_ALL,        MENU_LIST,                      MENU_REPORT,\r
200         MENU_SORT,                      MENU_DOTFILE,\r
201         MENU_DIRINFO,           MENU_TASKINFO,          MENU_REFRESH,\r
202         MENU_OPTION,\r
203         MENU_OTPCALC,\r
204         MENU_HELP,                      MENU_HELP_TROUBLE,      MENU_ABOUT,\r
205         MENU_REGINIT,\r
206         MENU_TEXT,                      MENU_BINARY,            MENU_AUTO,\r
207         MENU_KNJ_SJIS,          MENU_KNJ_EUC,           MENU_KNJ_JIS,           MENU_KNJ_UTF8N,         MENU_KNJ_UTF8BOM,       MENU_KNJ_NONE,\r
208         MENU_L_KNJ_SJIS,        MENU_L_KNJ_EUC,         MENU_L_KNJ_JIS,         MENU_L_KNJ_UTF8N,       MENU_L_KNJ_UTF8BOM,\r
209         MENU_KANACNV,\r
210         MENU_LOCAL_UPDIR,       MENU_LOCAL_CHDIR,\r
211         MENU_REMOTE_UPDIR,      MENU_REMOTE_CHDIR,\r
212         MENU_HIST_1,            MENU_HIST_2,            MENU_HIST_3,            MENU_HIST_4,\r
213         MENU_HIST_5,            MENU_HIST_6,            MENU_HIST_7,            MENU_HIST_8,\r
214         MENU_HIST_9,            MENU_HIST_10,           MENU_HIST_11,           MENU_HIST_12,\r
215         MENU_HIST_13,           MENU_HIST_14,           MENU_HIST_15,           MENU_HIST_16,\r
216         MENU_HIST_17,           MENU_HIST_18,           MENU_HIST_19,           MENU_HIST_20\r
217 };\r
218 \r
219 \r
220 \r
221 /*----- ツールバーを作成する --------------------------------------------------\r
222 *\r
223 *       Parameter\r
224 *               HWND hWnd : 親ウインドウのウインドウハンドル\r
225 *               HINSTANCE hInst : インスタンスハンドル\r
226 *\r
227 *       Return Value\r
228 *               int ステータス\r
229 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
230 *----------------------------------------------------------------------------*/\r
231 \r
232 int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)\r
233 {\r
234         int Sts;\r
235         RECT Rect1;\r
236         char Tmp[FMAX_PATH+1];\r
237         char *Pos;\r
238         int Tmp2;\r
239         DWORD NoDrives;\r
240         // 高DPI対応\r
241         HBITMAP hOriginal;\r
242         HBITMAP hResized;\r
243 \r
244         /*===== メインのツールバー =====*/\r
245 \r
246         // 高DPI対応\r
247 //      hWndTbarMain = CreateToolbarEx(\r
248 //                              hWnd,\r
249 //                              WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP | TBSTYLE_FLAT,\r
250 //                              1,\r
251 //                              27,\r
252 //                              hInst,\r
253 //                              main_toolbar_bmp,\r
254 //                              TbarDataMain,\r
255 //                              sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
256 //                              16,16,\r
257 //                              16,16,\r
258 //                              sizeof(TBBUTTON));\r
259         hOriginal = LoadImage(hInst, MAKEINTRESOURCE(main_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
260         if(hOriginal != NULL)\r
261         {\r
262                 hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
263                 DeleteObject(hOriginal);\r
264         }\r
265         hWndTbarMain = CreateToolbarEx(\r
266                                 hWnd,\r
267                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP | TBSTYLE_FLAT,\r
268                                 1,\r
269                                 30,\r
270                                 NULL,\r
271                                 (UINT_PTR)hResized,\r
272                                 TbarDataMain,\r
273                                 sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
274                                 CalcPixelX(16),CalcPixelY(16),\r
275                                 CalcPixelX(16),CalcPixelY(16),\r
276                                 sizeof(TBBUTTON));\r
277         if(hResized != NULL)\r
278                 DeleteObject(hOriginal);\r
279         hResized = NULL;\r
280 \r
281         if(hWndTbarMain != NULL)\r
282         {\r
283                 /* 2007/09/21 sunasunamix  ここから *********************/\r
284                 // 64ビット対応\r
285 //              pOldTbarMainProc = (WNDPROC)SetWindowLong(hWndTbarMain, GWL_WNDPROC, (DWORD)CountermeasureTbarMainProc);\r
286                 pOldTbarMainProc = (WNDPROC)SetWindowLongPtr(hWndTbarMain, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarMainProc);\r
287                 /********************************************* ここまで */\r
288 \r
289                 GetClientRect(hWnd, &Rect1);\r
290                 // 高DPI対応\r
291 //              MoveWindow(hWndTbarMain, 0, 0, Rect1.right, TOOLWIN_HEIGHT, FALSE);\r
292                 MoveWindow(hWndTbarMain, 0, 0, Rect1.right, AskToolWinHeight(), FALSE);\r
293         }\r
294 \r
295         /*===== ローカルのツールバー =====*/\r
296 \r
297         // 高DPI対応\r
298 //      hWndTbarLocal = CreateToolbarEx(\r
299 //                              hWnd,\r
300 //                              WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
301 //                              2,\r
302 //                              2,\r
303 //                              hInst,\r
304 //                              remote_toolbar_bmp,\r
305 //                              TbarDataLocal,\r
306 //                              sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
307 //                              16,16,\r
308 //                              16,16,\r
309 //                              sizeof(TBBUTTON));\r
310         hOriginal = LoadImage(hInst, MAKEINTRESOURCE(remote_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
311         if(hOriginal != NULL)\r
312         {\r
313                 hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
314                 DeleteObject(hOriginal);\r
315         }\r
316         hWndTbarLocal = CreateToolbarEx(\r
317                                 hWnd,\r
318                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
319                                 2,\r
320                                 2,\r
321                                 NULL,\r
322                                 (UINT_PTR)hResized,\r
323                                 TbarDataLocal,\r
324                                 sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
325                                 CalcPixelX(16),CalcPixelY(16),\r
326                                 CalcPixelX(16),CalcPixelY(16),\r
327                                 sizeof(TBBUTTON));\r
328         if(hResized != NULL)\r
329                 DeleteObject(hOriginal);\r
330         hResized = NULL;\r
331 \r
332         if(hWndTbarLocal != NULL)\r
333         {\r
334                 /* 2007/09/21 sunasunamix  ここから *********************/\r
335                 // 64ビット対応\r
336 //              pOldTbarLocalProc = (WNDPROC)SetWindowLong(hWndTbarLocal, GWL_WNDPROC, (DWORD)CountermeasureTbarLocalProc);\r
337                 pOldTbarLocalProc = (WNDPROC)SetWindowLongPtr(hWndTbarLocal, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarLocalProc);\r
338                 /********************************************* ここまで */\r
339 \r
340                 // 高DPI対応\r
341 //              MoveWindow(hWndTbarLocal, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, FALSE);\r
342                 MoveWindow(hWndTbarLocal, 0, AskToolWinHeight(), LocalWidth, AskToolWinHeight(), FALSE);\r
343 \r
344                 /*===== ローカルのディレクトリ名ウインドウ =====*/\r
345 \r
346                 SendMessage(hWndTbarLocal, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
347                 // UTF-8対応\r
348                 // 高DPI対応\r
349 //#ifndef FFFTP_ENGLISH\r
350 //              DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
351 //#else\r
352 //              DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
353 //#endif\r
354                 DlgFont = CreateFont(Rect1.bottom-Rect1.top-CalcPixelY(8), 0, 0, 0, 0, FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
355 \r
356                 // 高DPI対応\r
357 //              hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
358 //                                      "COMBOBOX", "",\r
359 //                                      WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
360 //                                      Rect1.right, Rect1.top, LocalWidth - Rect1.right, 200,\r
361 //                                      hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
362                 hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
363                                         "COMBOBOX", "",\r
364                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
365                                         Rect1.right, Rect1.top, LocalWidth - Rect1.right, CalcPixelY(200),\r
366                                         hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
367 \r
368                 if(hWndDirLocal != NULL)\r
369                 {\r
370                         /* エディットコントロールを探す */\r
371                         hWndDirLocalEdit = GetWindow(hWndDirLocal, GW_CHILD);\r
372                         if(hWndDirLocalEdit != NULL)\r
373                                 // 64ビット対応\r
374 //                              HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirLocalEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
375                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLongPtr(hWndDirLocalEdit, GWLP_WNDPROC, (LONG_PTR)HistEditBoxWndProc);\r
376 \r
377                         SendMessage(hWndDirLocal, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
378                         SendMessage(hWndDirLocal, CB_LIMITTEXT, FMAX_PATH, 0);\r
379 \r
380                         /* ドライブ名をセットしておく */\r
381                         GetLogicalDriveStrings(FMAX_PATH, Tmp);\r
382                         NoDrives = LoadHideDriveListRegistry();\r
383                         Pos = Tmp;\r
384                         while(*Pos != NUL)\r
385                         {\r
386                                 Tmp2 = toupper(*Pos) - 'A';\r
387                                 if((NoDrives & (0x00000001 << Tmp2)) == 0)\r
388                                         SetLocalDirHist(Pos);\r
389                                 Pos = strchr(Pos, NUL) + 1;\r
390                         }\r
391                         SendMessage(hWndDirLocal, CB_SETCURSEL, 0, 0);\r
392                 }\r
393         }\r
394 \r
395         /*===== ホストのツールバー =====*/\r
396 \r
397         // 高DPI対応\r
398 //      hWndTbarRemote = CreateToolbarEx(\r
399 //                              hWnd,\r
400 //                              WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
401 //                              3,\r
402 //                              2,\r
403 //                              hInst,\r
404 //                              remote_toolbar_bmp,\r
405 //                              TbarDataRemote,\r
406 //                              sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
407 //                              16,16,\r
408 //                              16,16,\r
409 //                              sizeof(TBBUTTON));\r
410         hOriginal = LoadImage(hInst, MAKEINTRESOURCE(remote_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
411         if(hOriginal != NULL)\r
412         {\r
413                 hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
414                 DeleteObject(hOriginal);\r
415         }\r
416         hWndTbarRemote = CreateToolbarEx(\r
417                                 hWnd,\r
418                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
419                                 3,\r
420                                 2,\r
421                                 NULL,\r
422                                 (UINT_PTR)hResized,\r
423                                 TbarDataRemote,\r
424                                 sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
425                                 CalcPixelX(16),CalcPixelY(16),\r
426                                 CalcPixelX(16),CalcPixelY(16),\r
427                                 sizeof(TBBUTTON));\r
428         if(hResized != NULL)\r
429                 DeleteObject(hOriginal);\r
430         hResized = NULL;\r
431 \r
432         if(hWndTbarRemote != NULL)\r
433         {\r
434                 /* 2007/09/21 sunasunamix  ここから *********************/\r
435                 // 64ビット対応\r
436 //              pOldTbarRemoteProc = (WNDPROC)SetWindowLong(hWndTbarRemote, GWL_WNDPROC, (DWORD)CountermeasureTbarRemoteProc);\r
437                 pOldTbarRemoteProc = (WNDPROC)SetWindowLongPtr(hWndTbarRemote, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarRemoteProc);\r
438                 /********************************************* ここまで */\r
439 \r
440                 // 高DPI対応\r
441 //              MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, FALSE);\r
442                 MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, AskToolWinHeight(), RemoteWidth, AskToolWinHeight(), FALSE);\r
443 \r
444                 /*===== ホストのディレクトリ名ウインドウ =====*/\r
445 \r
446                 SendMessage(hWndTbarRemote, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
447                 // 高DPI対応\r
448 //              hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
449 //                                      "COMBOBOX", "",\r
450 //                                      WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
451 //                                      Rect1.right, Rect1.top, RemoteWidth - Rect1.right, 200,\r
452 //                                      hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
453                 hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
454                                         "COMBOBOX", "",\r
455                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
456                                         Rect1.right, Rect1.top, RemoteWidth - Rect1.right, CalcPixelY(200),\r
457                                         hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
458 \r
459                 if(hWndDirRemote != NULL)\r
460                 {\r
461                         /* エディットコントロールを探す */\r
462                         hWndDirRemoteEdit = GetWindow(hWndDirRemote, GW_CHILD);\r
463                         if(hWndDirRemoteEdit != NULL)\r
464                                 // 64ビット対応\r
465 //                              HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirRemoteEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
466                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLongPtr(hWndDirRemoteEdit, GWLP_WNDPROC, (LONG_PTR)HistEditBoxWndProc);\r
467 \r
468                         SendMessage(hWndDirRemote, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
469                         SendMessage(hWndDirRemote, CB_LIMITTEXT, FMAX_PATH, 0);\r
470                         SendMessage(hWndDirRemote, CB_SETCURSEL, 0, 0);\r
471                 }\r
472         }\r
473 \r
474         Sts = FFFTP_SUCCESS;\r
475         if((hWndTbarMain == NULL) ||\r
476            (hWndTbarLocal == NULL) ||\r
477            (hWndTbarRemote == NULL) ||\r
478            (hWndDirLocal == NULL) ||\r
479            (hWndDirRemote == NULL))\r
480         {\r
481                 Sts = FFFTP_FAIL;\r
482         }\r
483         return(Sts);\r
484 }\r
485 \r
486 \r
487 \r
488 \r
489 \r
490 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
491 {\r
492         char Tmp[FMAX_PATH+1];\r
493 \r
494         switch (message)\r
495         {\r
496                 case WM_CHAR :\r
497                         if(wParam == 0x0D)              /* リターンキーが押された */\r
498                         {\r
499                                 if(hWnd == hWndDirLocalEdit)\r
500                                 {\r
501                                         SendMessage(hWndDirLocalEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
502                                         DoLocalCWD(Tmp);\r
503                                         GetLocalDirForWnd();\r
504                                 }\r
505                                 else\r
506                                 {\r
507                                         // 同時接続対応\r
508                                         CancelFlg = NO;\r
509                                         SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
510                                         if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
511                                         {\r
512                                                 if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
513                                                         GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);\r
514                                         }\r
515                                 }\r
516                         }\r
517                         else if(wParam == 0x09)         /* TABキーが押された */\r
518                         {\r
519                                 if(hWnd == hWndDirLocalEdit)\r
520                                 {\r
521                                         SetFocus(GetLocalHwnd());\r
522                                 }\r
523                                 else\r
524                                 {\r
525                                         SetFocus(GetRemoteHwnd());\r
526                                 }\r
527                         }\r
528                         else\r
529                                 return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
530                         break;\r
531 \r
532                 default :\r
533                         return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
534         }\r
535     return(0L);\r
536 }\r
537 \r
538 \r
539 \r
540 \r
541 /*----- ツールバーを削除 ------------------------------------------------------\r
542 *\r
543 *       Parameter\r
544 *               なし\r
545 *\r
546 *       Return Value\r
547 *               なし\r
548 *----------------------------------------------------------------------------*/\r
549 \r
550 void DeleteToolBarWindow(void)\r
551 {\r
552 //      if(DlgFont != NULL)\r
553 //              DeleteObject(DlgFont);\r
554 \r
555         if(hWndTbarMain != NULL)\r
556                 DestroyWindow(hWndTbarMain);\r
557         if(hWndTbarLocal != NULL)\r
558                 DestroyWindow(hWndTbarLocal);\r
559         if(hWndTbarRemote != NULL)\r
560                 DestroyWindow(hWndTbarRemote);\r
561         if(hWndDirLocal != NULL)\r
562                 DestroyWindow(hWndDirLocal);\r
563         if(hWndDirRemote != NULL)\r
564                 DestroyWindow(hWndDirRemote);\r
565         return;\r
566 }\r
567 \r
568 \r
569 /*----- メインのツールバーのウインドウハンドルを返す --------------------------\r
570 *\r
571 *       Parameter\r
572 *               なし\r
573 *\r
574 *       Return Value\r
575 *               HWND ウインドウハンドル\r
576 *----------------------------------------------------------------------------*/\r
577 \r
578 HWND GetMainTbarWnd(void)\r
579 {\r
580         return(hWndTbarMain);\r
581 }\r
582 \r
583 \r
584 /*----- ローカル側のヒストリウインドウのウインドウハンドルを返す --------------\r
585 *\r
586 *       Parameter\r
587 *               なし\r
588 *\r
589 *       Return Value\r
590 *               HWND ウインドウハンドル\r
591 *----------------------------------------------------------------------------*/\r
592 \r
593 HWND GetLocalHistHwnd(void)\r
594 {\r
595         return(hWndDirLocal);\r
596 }\r
597 \r
598 \r
599 /*----- ホスト側のヒストリウインドウのウインドウハンドルを返す ----------------\r
600 *\r
601 *       Parameter\r
602 *               なし\r
603 *\r
604 *       Return Value\r
605 *               HWND ウインドウハンドル\r
606 *----------------------------------------------------------------------------*/\r
607 \r
608 HWND GetRemoteHistHwnd(void)\r
609 {\r
610         return(hWndDirRemote);\r
611 }\r
612 \r
613 \r
614 /*----- ローカル側のヒストリエディットのウインドウハンドルを返す --------------\r
615 *\r
616 *       Parameter\r
617 *               なし\r
618 *\r
619 *       Return Value\r
620 *               HWND ウインドウハンドル\r
621 *----------------------------------------------------------------------------*/\r
622 \r
623 HWND GetLocalHistEditHwnd(void)\r
624 {\r
625         return(hWndDirLocalEdit);\r
626 }\r
627 \r
628 \r
629 /*----- ホスト側のヒストリエディットのウインドウハンドルを返す ----------------\r
630 *\r
631 *       Parameter\r
632 *               なし\r
633 *\r
634 *       Return Value\r
635 *               HWND ウインドウハンドル\r
636 *----------------------------------------------------------------------------*/\r
637 \r
638 HWND GetRemoteHistEditHwnd(void)\r
639 {\r
640         return(hWndDirRemoteEdit);\r
641 }\r
642 \r
643 \r
644 /*----- ローカル側のツールバーのウインドウハンドルを返す ----------------------\r
645 *\r
646 *       Parameter\r
647 *               なし\r
648 *\r
649 *       Return Value\r
650 *               HWND ウインドウハンドル\r
651 *----------------------------------------------------------------------------*/\r
652 \r
653 HWND GetLocalTbarWnd(void)\r
654 {\r
655         return(hWndTbarLocal);\r
656 }\r
657 \r
658 \r
659 /*----- ホスト側のツールバーのウインドウハンドルを返す ------------------------\r
660 *\r
661 *       Parameter\r
662 *               なし\r
663 *\r
664 *       Return Value\r
665 *               HWND ウインドウハンドル\r
666 *----------------------------------------------------------------------------*/\r
667 \r
668 HWND GetRemoteTbarWnd(void)\r
669 {\r
670         return(hWndTbarRemote);\r
671 }\r
672 \r
673 \r
674 /*----- HideUI の状態を返す ---------------------------------------------------\r
675 *\r
676 *       Parameter\r
677 *               なし\r
678 *\r
679 *       Return Value\r
680 *               int HideUI の状態\r
681 *----------------------------------------------------------------------------*/\r
682 \r
683 int GetHideUI(void)\r
684 {\r
685         // デッドロック対策\r
686 //      return(HideUI);\r
687         return (HideUI > 0 ? YES : NO);\r
688 }\r
689 \r
690 \r
691 /*----- ツールボタン/メニューのハイド処理 ------------------------------------\r
692 *\r
693 *       Parameter\r
694 *               なし\r
695 *\r
696 *       Return Value\r
697 *               なし\r
698 *----------------------------------------------------------------------------*/\r
699 \r
700 void MakeButtonsFocus(void)\r
701 {\r
702         HWND hWndFocus;\r
703         HWND hWndMain;\r
704         int Count;\r
705         int Win;\r
706 \r
707         // デッドロック対策\r
708 //      if(HideUI == NO)\r
709         if(HideUI == 0)\r
710         {\r
711                 hWndMain = GetMainHwnd();\r
712                 hWndFocus = GetFocus();\r
713                 Win = WIN_LOCAL;\r
714                 if(hWndFocus == GetRemoteHwnd())\r
715                         Win = WIN_REMOTE;\r
716 \r
717                 Count = GetSelectedCount(Win);\r
718 \r
719                 if(AskConnecting() == YES)\r
720                 {\r
721                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_ENABLED);\r
722                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_ENABLED);\r
723                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_ENABLED);\r
724                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_ENABLED);\r
725                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_ENABLED);\r
726                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_ENABLED);\r
727                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_ENABLED);\r
728                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_ENABLED);\r
729                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(TRUE, 0));\r
730                 }\r
731                 else\r
732                 {\r
733                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_GRAYED);\r
734                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_GRAYED);\r
735                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_GRAYED);\r
736                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_GRAYED);\r
737                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_GRAYED);\r
738                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_GRAYED);\r
739                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_GRAYED);\r
740                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_GRAYED);\r
741                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(FALSE, 0));\r
742                 }\r
743 \r
744                 if(hWndFocus == GetLocalHwnd())\r
745                 {\r
746                         if((AskConnecting() == YES) && (Count > 0))\r
747                         {\r
748                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(TRUE, 0));\r
749                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_ENABLED);\r
750                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_ENABLED);\r
751                         }\r
752                         else\r
753                         {\r
754                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
755                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
756                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
757                         }\r
758                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
759                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
760                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
761                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
762                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
763                 }\r
764 \r
765                 if(hWndFocus == GetRemoteHwnd())\r
766                 {\r
767                         if(AskConnecting() == YES)\r
768                         {\r
769                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_ENABLED);\r
770                         }\r
771                         else\r
772                         {\r
773                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
774                         }\r
775 \r
776                         if((AskConnecting() == YES) && (Count > 0))\r
777                         {\r
778                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(TRUE, 0));\r
779                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_ENABLED);\r
780                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_ENABLED);\r
781                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_ENABLED);\r
782                         }\r
783                         else\r
784                         {\r
785                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
786                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
787                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
788                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
789                         }\r
790                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
791                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
792                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
793                 }\r
794 \r
795                 if((hWndFocus == GetLocalHwnd()) || (hWndFocus == GetRemoteHwnd()))\r
796                 {\r
797                         if(Count > 0)\r
798                         {\r
799                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(TRUE, 0));\r
800                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_ENABLED);\r
801                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(TRUE, 0));\r
802                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_ENABLED);\r
803 \r
804                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_ENABLED);\r
805 \r
806                         }\r
807                         else\r
808                         {\r
809                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
810                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
811                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
812                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
813 \r
814                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
815                         }\r
816 \r
817                         if((hWndFocus == GetLocalHwnd()) || (AskConnecting() == YES))\r
818                         {\r
819                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(TRUE, 0));\r
820                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_ENABLED);\r
821                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_ENABLED);\r
822                         }\r
823                         else\r
824                         {\r
825                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
826                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
827                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
828                         }\r
829                 }\r
830                 else\r
831                 {\r
832                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
833                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
834                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
835                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
836                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
837                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
838                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
839                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
840                         EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
841                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
842                         EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
843                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
844                         EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
845                         EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
846                         EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
847                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
848                 }\r
849         }\r
850         return;\r
851 }\r
852 \r
853 \r
854 /*----- ユーザの操作を禁止する ------------------------------------------------\r
855 *\r
856 *       Parameter\r
857 *               なし\r
858 *\r
859 *       Return Value\r
860 *               なし\r
861 *----------------------------------------------------------------------------*/\r
862 \r
863 void DisableUserOpe(void)\r
864 {\r
865         int i;\r
866 \r
867         // デッドロック対策\r
868 //      HideUI = YES;\r
869         HideUI++;\r
870 \r
871         for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
872         {\r
873                 EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_GRAYED);\r
874                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
875                 SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
876                 SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
877         }\r
878 \r
879         EnableWindow(hWndDirLocal, FALSE);\r
880         EnableWindow(hWndDirRemote, FALSE);\r
881 \r
882         // 特定の操作を行うと異常終了するバグ修正\r
883         EnableWindow(GetLocalHwnd(), FALSE);\r
884         EnableWindow(GetRemoteHwnd(), FALSE);\r
885 \r
886         return;\r
887 }\r
888 \r
889 \r
890 /*----- ユーザの操作を許可する ------------------------------------------------\r
891 *\r
892 *       Parameter\r
893 *               なし\r
894 *\r
895 *       Return Value\r
896 *               なし\r
897 *----------------------------------------------------------------------------*/\r
898 \r
899 void EnableUserOpe(void)\r
900 {\r
901         int i;\r
902 \r
903         // デッドロック対策\r
904 //      if(HideUI == YES)\r
905         if(HideUI > 0)\r
906                 HideUI--;\r
907         if(HideUI == 0)\r
908         {\r
909                 for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
910                 {\r
911                         EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_ENABLED);\r
912                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
913                         SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
914                         SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
915                 }\r
916                 EnableWindow(hWndDirLocal, TRUE);\r
917                 EnableWindow(hWndDirRemote, TRUE);\r
918 \r
919                 // 特定の操作を行うと異常終了するバグ修正\r
920                 EnableWindow(GetLocalHwnd(), TRUE);\r
921                 EnableWindow(GetRemoteHwnd(), TRUE);\r
922 \r
923                 // 選択不可な漢字コードのボタンが表示されるバグを修正\r
924                 HideHostKanjiButton();\r
925                 HideLocalKanjiButton();\r
926 \r
927                 // バグ修正\r
928 //              HideUI = NO;\r
929 \r
930                 // バグ修正\r
931                 SetFocus(GetMainHwnd());\r
932 \r
933                 MakeButtonsFocus();\r
934         }\r
935         return;\r
936 }\r
937 \r
938 \r
939 /*----- ユーザの操作が禁止されているかどうかを返す ----------------------------\r
940 *\r
941 *       Parameter\r
942 *               なし\r
943 *\r
944 *       Return Value\r
945 *               int ステータス\r
946 *                       YES=禁止されている/NO\r
947 *----------------------------------------------------------------------------*/\r
948 \r
949 int AskUserOpeDisabled(void)\r
950 {\r
951         // デッドロック対策\r
952 //      return(HideUI);\r
953         return (HideUI > 0 ? YES : NO);\r
954 }\r
955 \r
956 \r
957 /*===================================================\r
958 *                       転送モード\r
959 *===================================================*/\r
960 \r
961 /*----- 転送モードを設定する --------------------------------------------------\r
962 *\r
963 *       Parameter\r
964 *               int Mode : 転送モード (TYPE_xx)\r
965 *\r
966 *       Return Value\r
967 *               なし\r
968 *----------------------------------------------------------------------------*/\r
969 \r
970 void SetTransferTypeImm(int Mode)\r
971 {\r
972         TmpTransMode = Mode;\r
973         HideHostKanjiButton();\r
974         HideLocalKanjiButton();\r
975         return;\r
976 }\r
977 \r
978 \r
979 /*----- メニューにより転送モードを設定する ------------------------------------\r
980 *\r
981 *       Parameter\r
982 *               int Type : 転送モード (MENU_xxxx)\r
983 *\r
984 *       Return Value\r
985 *               なし\r
986 *----------------------------------------------------------------------------*/\r
987 \r
988 void SetTransferType(int Type)\r
989 {\r
990         switch(Type)\r
991         {\r
992                 case MENU_TEXT :\r
993                         TmpTransMode = TYPE_A;\r
994                         break;\r
995 \r
996                 case MENU_BINARY :\r
997                         TmpTransMode = TYPE_I;\r
998                         break;\r
999 \r
1000                 default :\r
1001                         TmpTransMode = TYPE_X;\r
1002                         break;\r
1003         }\r
1004         HideHostKanjiButton();\r
1005         HideLocalKanjiButton();\r
1006         return;\r
1007 }\r
1008 \r
1009 \r
1010 /*----- 転送モードにしたがってボタンを表示する --------------------------------\r
1011 *\r
1012 *       Parameter\r
1013 *               なし\r
1014 *\r
1015 *       Return Value\r
1016 *               なし\r
1017 *----------------------------------------------------------------------------*/\r
1018 \r
1019 void DispTransferType(void)\r
1020 {\r
1021         switch(TmpTransMode)\r
1022         {\r
1023                 case TYPE_A :\r
1024                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_TEXT, MAKELONG(TRUE, 0));\r
1025                         break;\r
1026 \r
1027                 case TYPE_I :\r
1028                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_BINARY, MAKELONG(TRUE, 0));\r
1029                         break;\r
1030 \r
1031                 default :\r
1032                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_AUTO, MAKELONG(TRUE, 0));\r
1033                         break;\r
1034         }\r
1035         return;\r
1036 }\r
1037 \r
1038 \r
1039 /*----- 設定上の転送モードを返す ----------------------------------------------\r
1040 *\r
1041 *       Parameter\r
1042 *               なし\r
1043 *\r
1044 *       Return Value\r
1045 *               int 転送モード (TYPE_xx)\r
1046 *----------------------------------------------------------------------------*/\r
1047 \r
1048 int AskTransferType(void)\r
1049 {\r
1050         return(TmpTransMode);\r
1051 }\r
1052 \r
1053 \r
1054 /*----- 実際の転送モードを返す ------------------------------------------------\r
1055 *\r
1056 *       Parameter\r
1057 *               char Fname : ファイル名\r
1058 *               int Type : 設定上の転送モード (TYPE_xx)\r
1059 *\r
1060 *       Return Value\r
1061 *               int 転送モード (TYPE_xx)\r
1062 *----------------------------------------------------------------------------*/\r
1063 \r
1064 int AskTransferTypeAssoc(char *Fname, int Type)\r
1065 {\r
1066         int Ret;\r
1067         char *Pos;\r
1068         char *Name;\r
1069 \r
1070         Ret = Type;\r
1071         if(Ret == TYPE_X)\r
1072         {\r
1073                 Ret = TYPE_I;\r
1074                 if(StrMultiLen(AsciiExt) > 0)\r
1075                 {\r
1076                         Name = GetFileName(Fname);\r
1077                         Pos = AsciiExt;\r
1078                         while(*Pos != NUL)\r
1079                         {\r
1080                                 if(CheckFname(Name, Pos) == FFFTP_SUCCESS)\r
1081                                 {\r
1082                                         Ret = TYPE_A;\r
1083                                         break;\r
1084                                 }\r
1085                                 Pos += strlen(Pos) + 1;\r
1086                         }\r
1087                 }\r
1088         }\r
1089         return(Ret);\r
1090 }\r
1091 \r
1092 \r
1093 /*----- 転送モードを保存する --------------------------------------------------\r
1094 *\r
1095 *       Parameter\r
1096 *               なし\r
1097 *\r
1098 *       Return Value\r
1099 *               なし\r
1100 *\r
1101 *       Note\r
1102 *               現在の転送モードがレジストリに保存される\r
1103 *----------------------------------------------------------------------------*/\r
1104 \r
1105 void SaveTransferType(void)\r
1106 {\r
1107         TransMode = TmpTransMode;\r
1108         return;\r
1109 }\r
1110 \r
1111 \r
1112 /*===================================================\r
1113 *                       漢字モード\r
1114 *===================================================*/\r
1115 \r
1116 /*----- ホストの漢字モードをセットする ----------------------------------------\r
1117 *\r
1118 *       Parameter\r
1119 *               int Mode : 漢字モード (KANJI_xxxx)\r
1120 *\r
1121 *       Return Value\r
1122 *               なし\r
1123 *----------------------------------------------------------------------------*/\r
1124 \r
1125 void SetHostKanjiCodeImm(int Mode)\r
1126 {\r
1127         TmpHostKanjiCode = Mode;\r
1128         DispHostKanjiCode();\r
1129         HideHostKanjiButton();\r
1130         return;\r
1131 }\r
1132 \r
1133 \r
1134 /*----- メニューによりホストの漢字モードを設定する -----------------------------\r
1135 *\r
1136 *       Parameter\r
1137 *               int Type : 漢字モード (MENU_xxxx)\r
1138 *\r
1139 *       Return Value\r
1140 *               なし\r
1141 *----------------------------------------------------------------------------*/\r
1142 \r
1143 void SetHostKanjiCode(int Type)\r
1144 {\r
1145         switch(Type)\r
1146         {\r
1147                 // UTF-8対応\r
1148                 case MENU_KNJ_SJIS :\r
1149                         TmpHostKanjiCode = KANJI_SJIS;\r
1150                         break;\r
1151 \r
1152                 case MENU_KNJ_EUC :\r
1153                         TmpHostKanjiCode = KANJI_EUC;\r
1154                         break;\r
1155 \r
1156                 case MENU_KNJ_JIS :\r
1157                         TmpHostKanjiCode = KANJI_JIS;\r
1158                         break;\r
1159 \r
1160                 case MENU_KNJ_UTF8N :\r
1161                         TmpHostKanjiCode = KANJI_UTF8N;\r
1162                         break;\r
1163 \r
1164                 case MENU_KNJ_UTF8BOM :\r
1165                         TmpHostKanjiCode = KANJI_UTF8BOM;\r
1166                         break;\r
1167 \r
1168                 default :\r
1169                         TmpHostKanjiCode = KANJI_NOCNV;\r
1170                         break;\r
1171         }\r
1172         DispHostKanjiCode();\r
1173         HideHostKanjiButton();\r
1174         return;\r
1175 }\r
1176 \r
1177 \r
1178 /*----- ホストの漢字モードにしたがってボタンを表示する ------------------------\r
1179 *\r
1180 *       Parameter\r
1181 *               なし\r
1182 *\r
1183 *       Return Value\r
1184 *               なし\r
1185 *----------------------------------------------------------------------------*/\r
1186 \r
1187 void DispHostKanjiCode(void)\r
1188 {\r
1189         switch(TmpHostKanjiCode)\r
1190         {\r
1191                 // UTF-8対応\r
1192                 case KANJI_SJIS :\r
1193                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1194                         break;\r
1195 \r
1196                 case KANJI_EUC :\r
1197                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1198                         break;\r
1199 \r
1200                 case KANJI_JIS :\r
1201                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1202                         break;\r
1203 \r
1204                 case KANJI_UTF8N :\r
1205                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1206                         break;\r
1207 \r
1208                 case KANJI_UTF8BOM :\r
1209                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1210                         break;\r
1211 \r
1212                 default :\r
1213                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1214                         break;\r
1215         }\r
1216         return;\r
1217 }\r
1218 \r
1219 \r
1220 /*----- ホストの漢字モードを返す ----------------------------------------------\r
1221 *\r
1222 *       Parameter\r
1223 *               なし\r
1224 *\r
1225 *       Return Value\r
1226 *               int 漢字モード (KANJI_xxxx)\r
1227 *----------------------------------------------------------------------------*/\r
1228 \r
1229 int AskHostKanjiCode(void)\r
1230 {\r
1231         return(TmpHostKanjiCode);\r
1232 }\r
1233 \r
1234 \r
1235 /*----- 漢字モードボタンのハイド処理を行う ------------------------------------\r
1236 *\r
1237 *       Parameter\r
1238 *               なし\r
1239 *\r
1240 *       Return Value\r
1241 *               なし\r
1242 *----------------------------------------------------------------------------*/\r
1243 \r
1244 void HideHostKanjiButton(void)\r
1245 {\r
1246         switch(TmpTransMode)\r
1247         {\r
1248                 // UTF-8対応\r
1249                 case TYPE_I : \r
1250                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1251                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(FALSE, 0));\r
1252                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(FALSE, 0));\r
1253                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1254                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(FALSE, 0));\r
1255                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(FALSE, 0));\r
1256                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1257                         break;\r
1258 \r
1259                 default :\r
1260                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1261                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1262                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1263                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1264                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1265                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1266 //                      if(TmpHostKanjiCode != KANJI_NOCNV)\r
1267 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1268 //                      else\r
1269 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1270 //                      break;\r
1271                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1272                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1273                         switch(TmpHostKanjiCode)\r
1274                         {\r
1275                         case KANJI_SJIS:\r
1276                         case KANJI_JIS:\r
1277                         case KANJI_EUC:\r
1278                                 switch(TmpLocalKanjiCode)\r
1279                                 {\r
1280                                 case KANJI_SJIS:\r
1281                                 case KANJI_JIS:\r
1282                                 case KANJI_EUC:\r
1283                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1284                                         break;\r
1285                                 }\r
1286                                 break;\r
1287                         }\r
1288         }\r
1289         return;\r
1290 }\r
1291 \r
1292 \r
1293 // ローカルの漢字コード\r
1294 // テキストモード転送時に使用\r
1295 // ホスト側が無変換の時はローカルも無変換\r
1296 \r
1297 void SetLocalKanjiCodeImm(int Mode)\r
1298 {\r
1299         TmpLocalKanjiCode = Mode;\r
1300         DispLocalKanjiCode();\r
1301         HideLocalKanjiButton();\r
1302         return;\r
1303 }\r
1304 \r
1305 void SetLocalKanjiCode(int Type)\r
1306 {\r
1307         switch(Type)\r
1308         {\r
1309                 // UTF-8対応\r
1310                 case MENU_L_KNJ_SJIS :\r
1311                         TmpLocalKanjiCode = KANJI_SJIS;\r
1312                         break;\r
1313 \r
1314                 case MENU_L_KNJ_EUC :\r
1315                         TmpLocalKanjiCode = KANJI_EUC;\r
1316                         break;\r
1317 \r
1318                 case MENU_L_KNJ_JIS :\r
1319                         TmpLocalKanjiCode = KANJI_JIS;\r
1320                         break;\r
1321 \r
1322                 case MENU_L_KNJ_UTF8N :\r
1323                         TmpLocalKanjiCode = KANJI_UTF8N;\r
1324                         break;\r
1325 \r
1326                 case MENU_L_KNJ_UTF8BOM :\r
1327                         TmpLocalKanjiCode = KANJI_UTF8BOM;\r
1328                         break;\r
1329         }\r
1330         DispLocalKanjiCode();\r
1331         HideLocalKanjiButton();\r
1332         return;\r
1333 }\r
1334 \r
1335 void DispLocalKanjiCode(void)\r
1336 {\r
1337         switch(TmpLocalKanjiCode)\r
1338         {\r
1339                 // UTF-8対応\r
1340                 case KANJI_SJIS :\r
1341                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1342                         break;\r
1343 \r
1344                 case KANJI_EUC :\r
1345                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1346                         break;\r
1347 \r
1348                 case KANJI_JIS :\r
1349                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1350                         break;\r
1351 \r
1352                 case KANJI_UTF8N :\r
1353                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1354                         break;\r
1355 \r
1356                 case KANJI_UTF8BOM :\r
1357                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1358                         break;\r
1359         }\r
1360         return;\r
1361 }\r
1362 \r
1363 int AskLocalKanjiCode(void)\r
1364 {\r
1365         return(TmpLocalKanjiCode);\r
1366 }\r
1367 \r
1368 void HideLocalKanjiButton(void)\r
1369 {\r
1370         switch(TmpTransMode)\r
1371         {\r
1372                 // UTF-8対応\r
1373                 case TYPE_I : \r
1374                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1375                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(FALSE, 0));\r
1376                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(FALSE, 0));\r
1377                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1378                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(FALSE, 0));\r
1379                         break;\r
1380 \r
1381                 default :\r
1382                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1383                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1384                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1385                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1386                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1387                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1388                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1389                         switch(TmpHostKanjiCode)\r
1390                         {\r
1391                         case KANJI_SJIS:\r
1392                         case KANJI_JIS:\r
1393                         case KANJI_EUC:\r
1394                                 switch(TmpLocalKanjiCode)\r
1395                                 {\r
1396                                 case KANJI_SJIS:\r
1397                                 case KANJI_JIS:\r
1398                                 case KANJI_EUC:\r
1399                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1400                                         break;\r
1401                                 }\r
1402                                 break;\r
1403                         }\r
1404                         break;\r
1405         }\r
1406         return;\r
1407 }\r
1408 \r
1409 void SaveLocalKanjiCode(void)\r
1410 {\r
1411         LocalKanjiCode = TmpLocalKanjiCode;\r
1412         return;\r
1413 }\r
1414 \r
1415 \r
1416 /*===================================================\r
1417 *                       半角変換モード\r
1418 *===================================================*/\r
1419 \r
1420 /*----- ホストの半角変換モードを設定する --------------------------------------\r
1421 *\r
1422 *       Parameter\r
1423 *               int Mode : 半角変換モード(YES/NO)\r
1424 *\r
1425 *       Return Value\r
1426 *               なし\r
1427 *----------------------------------------------------------------------------*/\r
1428 \r
1429 void SetHostKanaCnvImm(int Mode)\r
1430 {\r
1431         TmpHostKanaCnv = Mode;\r
1432         DispHostKanaCnv();\r
1433         return;\r
1434 }\r
1435 \r
1436 \r
1437 /*----- ホストの半角変換モードを反転する --------------------------------------\r
1438 *\r
1439 *       Parameter\r
1440 *               なし\r
1441 *\r
1442 *       Return Value\r
1443 *               なし\r
1444 *----------------------------------------------------------------------------*/\r
1445 \r
1446 void SetHostKanaCnv(void)\r
1447 {\r
1448         TmpHostKanaCnv ^= 1;\r
1449         DispHostKanaCnv();\r
1450         return;\r
1451 }\r
1452 \r
1453 \r
1454 /*----- ホストの半角変換モードにしたがってボタンを表示する --------------------\r
1455 *\r
1456 *       Parameter\r
1457 *               なし\r
1458 *\r
1459 *       Return Value\r
1460 *               なし\r
1461 *----------------------------------------------------------------------------*/\r
1462 \r
1463 void DispHostKanaCnv(void)\r
1464 {\r
1465         if(TmpHostKanaCnv != 0)\r
1466                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1467         else\r
1468                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1469         return;\r
1470 }\r
1471 \r
1472 \r
1473 /*----- ホストの半角変換モードを返す ------------------------------------------\r
1474 *\r
1475 *       Parameter\r
1476 *               なし\r
1477 *\r
1478 *       Return Value\r
1479 *               int 半角変換モード\r
1480 *----------------------------------------------------------------------------*/\r
1481 \r
1482 int AskHostKanaCnv(void)\r
1483 {\r
1484         return(TmpHostKanaCnv);\r
1485 }\r
1486 \r
1487 \r
1488 /*===================================================\r
1489 *                       ソート方法\r
1490 *===================================================*/\r
1491 \r
1492 /*----- ソート方法をセットする ------------------------------------------------\r
1493 *\r
1494 *       Parameter\r
1495 *               int LFsort : ローカル側のファイルのソート方法 (SORT_xxx)\r
1496 *               int LDsort : ローカル側のディレクトリのソート方法 (SORT_xxx)\r
1497 *               int RFsort : ホスト側のファイルのソート方法 (SORT_xxx)\r
1498 *               int RDsort : ホスト側のディレクトリのソート方法 (SORT_xxx)\r
1499 *\r
1500 *       Return Value\r
1501 *               なし\r
1502 *----------------------------------------------------------------------------*/\r
1503 \r
1504 void SetSortTypeImm(int LFsort, int LDsort, int RFsort, int RDsort)\r
1505 {\r
1506         TmpLocalFileSort = LFsort;\r
1507         TmpLocalDirSort = LDsort;\r
1508         TmpRemoteFileSort = RFsort;\r
1509         TmpRemoteDirSort = RDsort;\r
1510         return;\r
1511 }\r
1512 \r
1513 \r
1514 /*----- リストビューのタブクリックによるソート方法のセット --------------------\r
1515 *\r
1516 *       Parameter\r
1517 *               int Win : ウインドウ番号\r
1518 *               int Tab : カラム番号\r
1519 *\r
1520 *       Return Value\r
1521 *               int ソート方法 (SORT_xxx)\r
1522 *----------------------------------------------------------------------------*/\r
1523 \r
1524 void SetSortTypeByColumn(int Win, int Tab)\r
1525 {\r
1526         if(Win == WIN_LOCAL)\r
1527         {\r
1528                 if((TmpLocalFileSort & SORT_MASK_ORD) == Tab)\r
1529                         TmpLocalFileSort ^= SORT_GET_ORD;\r
1530                 else\r
1531                         TmpLocalFileSort = Tab;\r
1532 \r
1533                 if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1534                         TmpLocalDirSort = TmpLocalFileSort;\r
1535                 else\r
1536                         TmpLocalDirSort = SORT_NAME;\r
1537         }\r
1538         else\r
1539         {\r
1540                 if(Tab != 4)\r
1541                 {\r
1542                         if((TmpRemoteFileSort & SORT_MASK_ORD) == Tab)\r
1543                                 TmpRemoteFileSort ^= SORT_GET_ORD;\r
1544                         else\r
1545                                 TmpRemoteFileSort = Tab;\r
1546 \r
1547                         if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1548                                 TmpRemoteDirSort = TmpRemoteFileSort;\r
1549                         else\r
1550                                 TmpRemoteDirSort = SORT_NAME;\r
1551                 }\r
1552         }\r
1553         return;\r
1554 }\r
1555 \r
1556 \r
1557 /*----- ソート方法を返す ------------------------------------------------------\r
1558 *\r
1559 *       Parameter\r
1560 *               int Name : どの部分か (ITEM_xxx)\r
1561 *\r
1562 *       Return Value\r
1563 *               int ソート方法 (SORT_xxx)\r
1564 *----------------------------------------------------------------------------*/\r
1565 \r
1566 int AskSortType(int Name)\r
1567 {\r
1568         int Ret;\r
1569 \r
1570         switch(Name)\r
1571         {\r
1572                 case ITEM_LFILE :\r
1573                         Ret = TmpLocalFileSort;\r
1574                         break;\r
1575 \r
1576                 case ITEM_LDIR :\r
1577                         Ret = TmpLocalDirSort;\r
1578                         break;\r
1579 \r
1580                 case ITEM_RFILE :\r
1581                         Ret = TmpRemoteFileSort;\r
1582                         break;\r
1583 \r
1584                 case ITEM_RDIR :\r
1585                         Ret = TmpRemoteDirSort;\r
1586                         break;\r
1587         }\r
1588         return(Ret);\r
1589 }\r
1590 \r
1591 \r
1592 /*----- ホストごとにソートを保存するかどうかをセットする-----------------------\r
1593 *\r
1594 *       Parameter\r
1595 *               int Sw : スイッチ (YES/NO)\r
1596 *\r
1597 *       Return Value\r
1598 *               なし\r
1599 *----------------------------------------------------------------------------*/\r
1600 \r
1601 void SetSaveSortToHost(int Sw)\r
1602 {\r
1603         SortSave = Sw;\r
1604         return;\r
1605 }\r
1606 \r
1607 \r
1608 /*----- ホストごとにソートを保存するかどうかを返す ----------------------------\r
1609 *\r
1610 *       Parameter\r
1611 *               なし\r
1612 *\r
1613 *       Return Value\r
1614 *               int スイッチ (YES/NO)\r
1615 *----------------------------------------------------------------------------*/\r
1616 \r
1617 int AskSaveSortToHost(void)\r
1618 {\r
1619         return(SortSave);\r
1620 }\r
1621 \r
1622 \r
1623 \r
1624 /*===================================================\r
1625 *                       リストモード\r
1626 *===================================================*/\r
1627 \r
1628 /*----- リストモードにしたがってボタンを表示する ------------------------------\r
1629 *\r
1630 *       Parameter\r
1631 *               なし\r
1632 *\r
1633 *       Return Value\r
1634 *               なし\r
1635 *----------------------------------------------------------------------------*/\r
1636 \r
1637 void DispListType(void)\r
1638 {\r
1639         HWND hWndMain;\r
1640 \r
1641         hWndMain = GetMainHwnd();\r
1642         switch(ListType)\r
1643         {\r
1644                 case LVS_LIST :\r
1645                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_LIST, MAKELONG(TRUE, 0));\r
1646                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_CHECKED);\r
1647                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_UNCHECKED);\r
1648                         break;\r
1649 \r
1650                 default :\r
1651                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_REPORT, MAKELONG(TRUE, 0));\r
1652                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_CHECKED);\r
1653                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_UNCHECKED);\r
1654                         break;\r
1655         }\r
1656         return;\r
1657 }\r
1658 \r
1659 \r
1660 /*===================================================\r
1661 *                       フォルダ同時移動モード\r
1662 *===================================================*/\r
1663 \r
1664 /*----- 転送モードを設定する --------------------------------------------------\r
1665 *\r
1666 *       Parameter\r
1667 *               int Mode : 転送モード (TYPE_xx)\r
1668 *\r
1669 *       Return Value\r
1670 *               なし\r
1671 *----------------------------------------------------------------------------*/\r
1672 \r
1673 void SetSyncMoveMode(int Mode)\r
1674 {\r
1675         SyncMove = Mode;\r
1676         DispSyncMoveMode();\r
1677         return;\r
1678 }\r
1679 \r
1680 \r
1681 /*----- フォルダ同時移動モードを切り替える ------------------------------------\r
1682 *\r
1683 *       Parameter\r
1684 *               なし\r
1685 *\r
1686 *       Return Value\r
1687 *               なし\r
1688 *----------------------------------------------------------------------------*/\r
1689 \r
1690 void ToggleSyncMoveMode(void)\r
1691 {\r
1692         SyncMove ^= 1;\r
1693         DispSyncMoveMode();\r
1694         return;\r
1695 }\r
1696 \r
1697 \r
1698 /*----- フォルダ同時移動を行うかどうかをによってメニュー/ボタンを表示 --------\r
1699 *\r
1700 *       Parameter\r
1701 *               なし\r
1702 *\r
1703 *       Return Value\r
1704 *               なし\r
1705 *----------------------------------------------------------------------------*/\r
1706 \r
1707 void DispSyncMoveMode(void)\r
1708 {\r
1709         if(SyncMove != 0)\r
1710         {\r
1711                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(TRUE, 0));\r
1712                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_CHECKED);\r
1713         }\r
1714         else\r
1715         {\r
1716                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(FALSE, 0));\r
1717                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_UNCHECKED);\r
1718         }\r
1719         return;\r
1720 }\r
1721 \r
1722 \r
1723 /*----- フォルダ同時移動モードを返す ------------------------------------------\r
1724 *\r
1725 *       Parameter\r
1726 *               なし\r
1727 *\r
1728 *       Return Value\r
1729 *               int 半角変換モード\r
1730 *----------------------------------------------------------------------------*/\r
1731 \r
1732 int AskSyncMoveMode(void)\r
1733 {\r
1734         return(SyncMove);\r
1735 }\r
1736 \r
1737 \r
1738 /*===================================================\r
1739 *                       ディレクトリヒストリ\r
1740 *===================================================*/\r
1741 \r
1742 /*----- ホスト側のヒストリ一覧ウインドウに登録 --------------------------------\r
1743 *\r
1744 *       Parameter\r
1745 *               char *Path : パス\r
1746 *\r
1747 *       Return Value\r
1748 *               なし\r
1749 *----------------------------------------------------------------------------*/\r
1750 \r
1751 void SetRemoteDirHist(char *Path)\r
1752 {\r
1753         int i;\r
1754 \r
1755         if((i = SendMessage(hWndDirRemote, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) != CB_ERR)\r
1756                 SendMessage(hWndDirRemote, CB_DELETESTRING, i, 0);\r
1757 \r
1758         SendMessage(hWndDirRemote, CB_ADDSTRING, 0, (LPARAM)Path);\r
1759         i = SendMessage(hWndDirRemote, CB_GETCOUNT, 0, 0);\r
1760         SendMessage(hWndDirRemote, CB_SETCURSEL, i-1, 0);\r
1761 \r
1762         strcpy(RemoteCurDir, Path);\r
1763         return;\r
1764 }\r
1765 \r
1766 \r
1767 /*----- ローカル側のヒストリ一覧ウインドウに登録 -------------------------------\r
1768 *\r
1769 *       Parameter\r
1770 *               char *Path : パス\r
1771 *\r
1772 *       Return Value\r
1773 *               なし\r
1774 *----------------------------------------------------------------------------*/\r
1775 \r
1776 void SetLocalDirHist(char *Path)\r
1777 {\r
1778         int i;\r
1779 \r
1780         if((i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) == CB_ERR)\r
1781                 SendMessage(hWndDirLocal, CB_ADDSTRING, 0, (LPARAM)Path);\r
1782         i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path);\r
1783         SendMessage(hWndDirLocal, CB_SETCURSEL, i, 0);\r
1784 \r
1785         strcpy(LocalCurDir, Path);\r
1786         return;\r
1787 }\r
1788 \r
1789 \r
1790 /*----- ローカルのカレントディレクトリを返す ----------------------------------\r
1791 *\r
1792 *       Parameter\r
1793 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1794 *               int Max : バッファのサイズ\r
1795 *\r
1796 *       Return Value\r
1797 *               なし\r
1798 *----------------------------------------------------------------------------*/\r
1799 \r
1800 void AskLocalCurDir(char *Buf, int Max)\r
1801 {\r
1802         memset(Buf, 0, Max);\r
1803         strncpy(Buf, LocalCurDir, Max-1);\r
1804         return;\r
1805 }\r
1806 \r
1807 \r
1808 /*----- ホストのカレントディレクトリを返す ------------------------------------\r
1809 *\r
1810 *       Parameter\r
1811 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1812 *               int Max : バッファのサイズ\r
1813 *\r
1814 *       Return Value\r
1815 *               なし\r
1816 *----------------------------------------------------------------------------*/\r
1817 \r
1818 void AskRemoteCurDir(char *Buf, int Max)\r
1819 {\r
1820         memset(Buf, 0, Max);\r
1821         strncpy(Buf, RemoteCurDir, Max-1);\r
1822         return;\r
1823 }\r
1824 \r
1825 \r
1826 /*----- カレントディレクトリを設定する ----------------------------------------\r
1827 *\r
1828 *       Parameter\r
1829 *               なし\r
1830 *\r
1831 *       Return Value\r
1832 *               なし\r
1833 *----------------------------------------------------------------------------*/\r
1834 \r
1835 void SetCurrentDirAsDirHist(void)\r
1836 {\r
1837         SetCurrentDirectory(LocalCurDir);\r
1838         return;\r
1839 }\r
1840 \r
1841 \r
1842 /*===================================================\r
1843 *                       メニュー\r
1844 *===================================================*/\r
1845 \r
1846 /*----- ドットファイルを表示するかどうかをメニューに表示する ------------------\r
1847 *\r
1848 *       Parameter\r
1849 *               なし\r
1850 *\r
1851 *       Return Value\r
1852 *               なし\r
1853 *----------------------------------------------------------------------------*/\r
1854 \r
1855 void DispDotFileMode(void)\r
1856 {\r
1857         CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_UNCHECKED);\r
1858         if(DotFile == YES)\r
1859                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_CHECKED);\r
1860         return;\r
1861 }\r
1862 \r
1863 \r
1864 /*----- ローカル側の右ボタンメニューを表示 ------------------------------------------------\r
1865 *\r
1866 *       Parameter\r
1867 *               int Pos : メニューの位置\r
1868 *                                       0=マウスカーソルの位置\r
1869 *                                       1=ウインドウの左上\r
1870 *\r
1871 *       Return Value\r
1872 *               なし\r
1873 *----------------------------------------------------------------------------*/\r
1874 \r
1875 void LocalRbuttonMenu(int Pos)\r
1876 {\r
1877         HMENU hMenu;\r
1878         POINT point;\r
1879         RECT Rect;\r
1880         UINT Flg1;\r
1881         UINT Flg2;\r
1882         UINT Flg3;\r
1883         int Count;\r
1884 \r
1885         // デッドロック対策\r
1886 //      if(HideUI == NO)\r
1887         if(HideUI == 0)\r
1888         {\r
1889                 Flg1 = 0;\r
1890                 if(AskConnecting() == NO)\r
1891                         Flg1 = MF_GRAYED;\r
1892 \r
1893                 Count = GetSelectedCount(WIN_LOCAL);\r
1894                 Flg2 = 0;\r
1895                 if(Count == 0)\r
1896                         Flg2 = MF_GRAYED;\r
1897 \r
1898                 Flg3 = 0;\r
1899                 if(Count != 1)\r
1900                         Flg3 = MF_GRAYED;\r
1901 \r
1902                 hMenu = CreatePopupMenu();\r
1903                 AddOpenMenu(hMenu, Flg3);\r
1904                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD, MSGJPN255);\r
1905                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD_AS, MSGJPN256);\r
1906                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_UPLOAD_ALL, MSGJPN257);\r
1907                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_DELETE, MSGJPN258);\r
1908                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_RENAME, MSGJPN259);\r
1909                 AppendMenu(hMenu, MF_STRING , MENU_MKDIR, MSGJPN260);\r
1910                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1911                 AppendMenu(hMenu, MF_STRING , MENU_FILESIZE, MSGJPN261);\r
1912                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1913                 AppendMenu(hMenu, MF_STRING, REFRESH_LOCAL, MSGJPN262);\r
1914 \r
1915                 if(Pos == 0)\r
1916                         GetCursorPos(&point);\r
1917                 else\r
1918                 {\r
1919                         GetWindowRect(GetLocalHwnd(), &Rect);\r
1920                         point.x = Rect.left + 20;\r
1921                         point.y = Rect.top + 20;\r
1922                 }\r
1923                 TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL);\r
1924 \r
1925                 DestroyMenu(hMenu);\r
1926         }\r
1927         return;\r
1928 }\r
1929 \r
1930 \r
1931 /*----- ホスト側の右ボタンメニューを表示 --------------------------------------\r
1932 *\r
1933 *       Parameter\r
1934 *               int Pos : メニューの位置\r
1935 *                                       0=マウスカーソルの位置\r
1936 *                                       1=ウインドウの左上\r
1937 *\r
1938 *       Return Value\r
1939 *               なし\r
1940 *----------------------------------------------------------------------------*/\r
1941 \r
1942 void RemoteRbuttonMenu(int Pos)\r
1943 {\r
1944         HMENU hMenu;\r
1945         POINT point;\r
1946         RECT Rect;\r
1947         UINT Flg1;\r
1948         UINT Flg2;\r
1949         UINT Flg3;\r
1950         int Count;\r
1951 \r
1952         // デッドロック対策\r
1953 //      if(HideUI == NO)\r
1954         if(HideUI == 0)\r
1955         {\r
1956                 Flg1 = 0;\r
1957                 if(AskConnecting() == NO)\r
1958                         Flg1 = MF_GRAYED;\r
1959 \r
1960                 Count = GetSelectedCount(WIN_REMOTE);\r
1961                 Flg2 = 0;\r
1962                 if(Count == 0)\r
1963                         Flg2 = MF_GRAYED;\r
1964 \r
1965                 Flg3 = 0;\r
1966                 if(Count != 1)\r
1967                         Flg3 = MF_GRAYED;\r
1968 \r
1969                 hMenu = CreatePopupMenu();\r
1970                 AddOpenMenu(hMenu, Flg1 | Flg3);\r
1971                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD, MSGJPN263);\r
1972                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS, MSGJPN264);\r
1973                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS_FILE, MSGJPN265);\r
1974                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_DOWNLOAD_ALL, MSGJPN266);\r
1975                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DELETE, MSGJPN267);\r
1976                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_RENAME, MSGJPN268);\r
1977 #if defined(HAVE_TANDEM)\r
1978                 /* HP NonStop Server では CHMOD の仕様が異なるため使用不可 */\r
1979                 if (AskRealHostType() != HTYPE_TANDEM)\r
1980 #endif\r
1981                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_CHMOD, MSGJPN269);\r
1982                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_MKDIR, MSGJPN270);\r
1983                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_URL_COPY, MSGJPN271);\r
1984 #if defined(HAVE_TANDEM)\r
1985                 /* OSS モードのときに表示されるように AskRealHostType() を使用する */\r
1986                 if (AskRealHostType() == HTYPE_TANDEM)\r
1987                         AppendMenu(hMenu, MF_STRING | Flg1, MENU_SWITCH_OSS, MSGJPN2001);\r
1988 #endif\r
1989                 // 上位のディレクトリへ移動対応\r
1990                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_REMOTE_MOVE_UPDIR, MSGJPN355);\r
1991                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1992                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
1993                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1994                 AppendMenu(hMenu, MF_STRING | Flg1, REFRESH_REMOTE, MSGJPN273);\r
1995 \r
1996                 if(Pos == 0)\r
1997                         GetCursorPos(&point);\r
1998                 else\r
1999                 {\r
2000                         GetWindowRect(GetRemoteHwnd(), &Rect);\r
2001                         point.x = Rect.left + 20;\r
2002                         point.y = Rect.top + 20;\r
2003                 }\r
2004                 if(TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL) == 0)\r
2005                         Count = GetLastError();\r
2006 \r
2007                 DestroyMenu(hMenu);\r
2008         }\r
2009         return;\r
2010 }\r
2011 \r
2012 \r
2013 /*----- 右ボタンメニューに「開く」を追加  -------------------------------------\r
2014 *\r
2015 *       Parameter\r
2016 *               HMENU hMenu : メニューハンドル\r
2017 *               UINT Flg : フラグ\r
2018 *\r
2019 *       Return Value\r
2020 *               なし\r
2021 *----------------------------------------------------------------------------*/\r
2022 \r
2023 static void AddOpenMenu(HMENU hMenu, UINT Flg)\r
2024 {\r
2025         static const UINT MenuID[VIEWERS] = { MENU_OPEN1, MENU_OPEN2, MENU_OPEN3 };\r
2026         char Tmp[FMAX_PATH+1];\r
2027         int i;\r
2028 \r
2029         // ローカルフォルダを開く\r
2030 //      AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
2031         AppendMenu(hMenu, MF_STRING | Flg, MENU_OPEN, MSGJPN274);\r
2032         for(i = 0; i < VIEWERS; i++)\r
2033         {\r
2034                 if(strlen(ViewerName[i]) != 0)\r
2035                 {\r
2036                         sprintf(Tmp, MSGJPN275, GetToolName(ViewerName[i]), i+1);\r
2037                         AppendMenu(hMenu, MF_STRING | Flg, MenuID[i], Tmp);\r
2038                 }\r
2039         }\r
2040         AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
2041         return;\r
2042 }\r
2043 \r
2044 /* 2007/09/21 sunasunamix  ここから *********************/\r
2045 \r
2046 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarMain用) -----------\r
2047 *       (サブクラス化を行うためのウインドウプロシージャ)\r
2048 *----------------------------------------------------------------------------*/\r
2049 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
2050 {\r
2051         switch (uMessage) {\r
2052         case WM_DESTROY :\r
2053                 // 64ビット対応\r
2054 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarMainProc);\r
2055                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarMainProc);\r
2056                 break;\r
2057         case WM_RBUTTONDBLCLK :\r
2058         case WM_RBUTTONDOWN :\r
2059         case WM_RBUTTONUP :\r
2060                 return TRUE;\r
2061         }\r
2062         return CallWindowProc(pOldTbarMainProc, hWnd, uMessage, wParam, lParam);\r
2063 }\r
2064 \r
2065 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarLocal用) ----------\r
2066 *       (サブクラス化を行うためのウインドウプロシージャ)\r
2067 *----------------------------------------------------------------------------*/\r
2068 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
2069 {\r
2070         switch (uMessage) {\r
2071         case WM_DESTROY :\r
2072                 // 64ビット対応\r
2073 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarLocalProc);\r
2074                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarLocalProc);\r
2075                 break;\r
2076         case WM_RBUTTONDBLCLK :\r
2077         case WM_RBUTTONDOWN :\r
2078         case WM_RBUTTONUP :\r
2079                 return TRUE;\r
2080         }\r
2081         return CallWindowProc(pOldTbarLocalProc, hWnd, uMessage, wParam, lParam);\r
2082 }\r
2083 \r
2084 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarRemote用) ---------\r
2085 *       (サブクラス化を行うためのウインドウプロシージャ)\r
2086 *----------------------------------------------------------------------------*/\r
2087 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
2088 {\r
2089         switch (uMessage) {\r
2090         case WM_DESTROY :\r
2091                 // 64ビット対応\r
2092 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarRemoteProc);\r
2093                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarRemoteProc);\r
2094                 break;\r
2095         case WM_RBUTTONDBLCLK :\r
2096         case WM_RBUTTONDOWN :\r
2097         case WM_RBUTTONUP :\r
2098                 return TRUE;\r
2099         }\r
2100         return CallWindowProc(pOldTbarRemoteProc, hWnd, uMessage, wParam, lParam);\r
2101 }\r
2102 /********************************************* ここまで */\r