OSDN Git Service

Fix bugs of drag-and-drop handling.
[ffftp/ffftp.git] / toolmenu.c
index 217e2c9..dcc408b 100644 (file)
@@ -74,6 +74,8 @@ extern int LocalWidth;
 extern char ViewerName[VIEWERS][FMAX_PATH+1];\r
 extern int TransMode;\r
 extern int SortSave;\r
+// UTF-8対応\r
+extern int LocalKanjiCode;\r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -103,7 +105,9 @@ static int TmpRemoteDirSort;
 \r
 static int SyncMove = NO;\r
 \r
-static int HideUI = NO;\r
+// デッドロック対策\r
+//static int HideUI = NO;\r
+static int HideUI = 0;\r
 \r
 \r
 /* 2007/09/21 sunasunamix  ここから *********************/\r
@@ -233,21 +237,46 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
        char *Pos;\r
        int Tmp2;\r
        DWORD NoDrives;\r
+       // 高DPI対応\r
+       HBITMAP hOriginal;\r
+       HBITMAP hResized;\r
 \r
        /*===== メインのツールバー =====*/\r
 \r
+       // 高DPI対応\r
+//     hWndTbarMain = CreateToolbarEx(\r
+//                             hWnd,\r
+//                             WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP | TBSTYLE_FLAT,\r
+//                             1,\r
+//                             27,\r
+//                             hInst,\r
+//                             main_toolbar_bmp,\r
+//                             TbarDataMain,\r
+//                             sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
+//                             16,16,\r
+//                             16,16,\r
+//                             sizeof(TBBUTTON));\r
+       hOriginal = LoadImage(hInst, MAKEINTRESOURCE(main_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
+       if(hOriginal != NULL)\r
+       {\r
+               hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
+               DeleteObject(hOriginal);\r
+       }\r
        hWndTbarMain = CreateToolbarEx(\r
                                hWnd,\r
                                WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP | TBSTYLE_FLAT,\r
                                1,\r
-                               27,\r
-                               hInst,\r
-                               main_toolbar_bmp,\r
+                               30,\r
+                               NULL,\r
+                               (UINT_PTR)hResized,\r
                                TbarDataMain,\r
                                sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
-                               16,16,\r
-                               16,16,\r
+                               CalcPixelX(16),CalcPixelY(16),\r
+                               CalcPixelX(16),CalcPixelY(16),\r
                                sizeof(TBBUTTON));\r
+       if(hResized != NULL)\r
+               DeleteObject(hOriginal);\r
+       hResized = NULL;\r
 \r
        if(hWndTbarMain != NULL)\r
        {\r
@@ -258,23 +287,47 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
                /********************************************* ここまで */\r
 \r
                GetClientRect(hWnd, &Rect1);\r
-               MoveWindow(hWndTbarMain, 0, 0, Rect1.right, TOOLWIN_HEIGHT, FALSE);\r
+               // 高DPI対応\r
+//             MoveWindow(hWndTbarMain, 0, 0, Rect1.right, TOOLWIN_HEIGHT, FALSE);\r
+               MoveWindow(hWndTbarMain, 0, 0, Rect1.right, AskToolWinHeight(), FALSE);\r
        }\r
 \r
        /*===== ローカルのツールバー =====*/\r
 \r
+       // 高DPI対応\r
+//     hWndTbarLocal = CreateToolbarEx(\r
+//                             hWnd,\r
+//                             WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
+//                             2,\r
+//                             2,\r
+//                             hInst,\r
+//                             remote_toolbar_bmp,\r
+//                             TbarDataLocal,\r
+//                             sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
+//                             16,16,\r
+//                             16,16,\r
+//                             sizeof(TBBUTTON));\r
+       hOriginal = LoadImage(hInst, MAKEINTRESOURCE(remote_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
+       if(hOriginal != NULL)\r
+       {\r
+               hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
+               DeleteObject(hOriginal);\r
+       }\r
        hWndTbarLocal = CreateToolbarEx(\r
                                hWnd,\r
                                WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
                                2,\r
                                2,\r
-                               hInst,\r
-                               remote_toolbar_bmp,\r
+                               NULL,\r
+                               (UINT_PTR)hResized,\r
                                TbarDataLocal,\r
                                sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
-                               16,16,\r
-                               16,16,\r
+                               CalcPixelX(16),CalcPixelY(16),\r
+                               CalcPixelX(16),CalcPixelY(16),\r
                                sizeof(TBBUTTON));\r
+       if(hResized != NULL)\r
+               DeleteObject(hOriginal);\r
+       hResized = NULL;\r
 \r
        if(hWndTbarLocal != NULL)\r
        {\r
@@ -284,21 +337,32 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
                pOldTbarLocalProc = (WNDPROC)SetWindowLongPtr(hWndTbarLocal, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarLocalProc);\r
                /********************************************* ここまで */\r
 \r
-               MoveWindow(hWndTbarLocal, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, FALSE);\r
+               // 高DPI対応\r
+//             MoveWindow(hWndTbarLocal, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, FALSE);\r
+               MoveWindow(hWndTbarLocal, 0, AskToolWinHeight(), LocalWidth, AskToolWinHeight(), FALSE);\r
 \r
                /*===== ローカルのディレクトリ名ウインドウ =====*/\r
 \r
                SendMessage(hWndTbarLocal, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
-#ifndef ENGLISH\r
-               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
-#else\r
-               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
-#endif\r
-\r
+               // UTF-8対応\r
+               // 高DPI対応\r
+//#ifndef FFFTP_ENGLISH\r
+//             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
+//#else\r
+//             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
+//#endif\r
+               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
+\r
+               // 高DPI対応\r
+//             hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
+//                                     "COMBOBOX", "",\r
+//                                     WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
+//                                     Rect1.right, Rect1.top, LocalWidth - Rect1.right, 200,\r
+//                                     hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
                hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
                                        "COMBOBOX", "",\r
                                        WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
-                                       Rect1.right, Rect1.top, LocalWidth - Rect1.right, 200,\r
+                                       Rect1.right, Rect1.top, LocalWidth - Rect1.right, CalcPixelY(200),\r
                                        hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
 \r
                if(hWndDirLocal != NULL)\r
@@ -315,7 +379,7 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
 \r
                        /* ドライブ名をセットしておく */\r
                        GetLogicalDriveStrings(FMAX_PATH, Tmp);\r
-                       NoDrives = LoadHideDriveListRegistory();\r
+                       NoDrives = LoadHideDriveListRegistry();\r
                        Pos = Tmp;\r
                        while(*Pos != NUL)\r
                        {\r
@@ -330,18 +394,40 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
 \r
        /*===== ホストのツールバー =====*/\r
 \r
+       // 高DPI対応\r
+//     hWndTbarRemote = CreateToolbarEx(\r
+//                             hWnd,\r
+//                             WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
+//                             3,\r
+//                             2,\r
+//                             hInst,\r
+//                             remote_toolbar_bmp,\r
+//                             TbarDataRemote,\r
+//                             sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
+//                             16,16,\r
+//                             16,16,\r
+//                             sizeof(TBBUTTON));\r
+       hOriginal = LoadImage(hInst, MAKEINTRESOURCE(remote_toolbar_bmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADMAP3DCOLORS);\r
+       if(hOriginal != NULL)\r
+       {\r
+               hResized = ResizeBitmap(hOriginal, 64, 64, 16, 64);\r
+               DeleteObject(hOriginal);\r
+       }\r
        hWndTbarRemote = CreateToolbarEx(\r
                                hWnd,\r
                                WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
                                3,\r
                                2,\r
-                               hInst,\r
-                               remote_toolbar_bmp,\r
+                               NULL,\r
+                               (UINT_PTR)hResized,\r
                                TbarDataRemote,\r
                                sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
-                               16,16,\r
-                               16,16,\r
+                               CalcPixelX(16),CalcPixelY(16),\r
+                               CalcPixelX(16),CalcPixelY(16),\r
                                sizeof(TBBUTTON));\r
+       if(hResized != NULL)\r
+               DeleteObject(hOriginal);\r
+       hResized = NULL;\r
 \r
        if(hWndTbarRemote != NULL)\r
        {\r
@@ -351,15 +437,23 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
                pOldTbarRemoteProc = (WNDPROC)SetWindowLongPtr(hWndTbarRemote, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarRemoteProc);\r
                /********************************************* ここまで */\r
 \r
-               MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, FALSE);\r
+               // 高DPI対応\r
+//             MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, FALSE);\r
+               MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, AskToolWinHeight(), RemoteWidth, AskToolWinHeight(), FALSE);\r
 \r
                /*===== ホストのディレクトリ名ウインドウ =====*/\r
 \r
                SendMessage(hWndTbarRemote, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
+               // 高DPI対応\r
+//             hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
+//                                     "COMBOBOX", "",\r
+//                                     WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
+//                                     Rect1.right, Rect1.top, RemoteWidth - Rect1.right, 200,\r
+//                                     hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
                hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
                                        "COMBOBOX", "",\r
                                        WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
-                                       Rect1.right, Rect1.top, RemoteWidth - Rect1.right, 200,\r
+                                       Rect1.right, Rect1.top, RemoteWidth - Rect1.right, CalcPixelY(200),\r
                                        hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
 \r
                if(hWndDirRemote != NULL)\r
@@ -588,7 +682,9 @@ HWND GetRemoteTbarWnd(void)
 \r
 int GetHideUI(void)\r
 {\r
-       return(HideUI);\r
+       // デッドロック対策\r
+//     return(HideUI);\r
+       return (HideUI > 0 ? YES : NO);\r
 }\r
 \r
 \r
@@ -608,7 +704,9 @@ void MakeButtonsFocus(void)
        int Count;\r
        int Win;\r
 \r
-       if(HideUI == NO)\r
+       // デッドロック対策\r
+//     if(HideUI == NO)\r
+       if(HideUI == 0)\r
        {\r
                hWndMain = GetMainHwnd();\r
                hWndFocus = GetFocus();\r
@@ -766,7 +864,9 @@ void DisableUserOpe(void)
 {\r
        int i;\r
 \r
-       HideUI = YES;\r
+       // デッドロック対策\r
+//     HideUI = YES;\r
+       HideUI++;\r
 \r
        for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
        {\r
@@ -779,6 +879,10 @@ void DisableUserOpe(void)
        EnableWindow(hWndDirLocal, FALSE);\r
        EnableWindow(hWndDirRemote, FALSE);\r
 \r
+       // 特定の操作を行うと異常終了するバグ修正\r
+       EnableWindow(GetLocalHwnd(), FALSE);\r
+       EnableWindow(GetRemoteHwnd(), FALSE);\r
+\r
        return;\r
 }\r
 \r
@@ -796,7 +900,11 @@ void EnableUserOpe(void)
 {\r
        int i;\r
 \r
-       if(HideUI == YES)\r
+       // デッドロック対策\r
+//     if(HideUI == YES)\r
+       if(HideUI > 0)\r
+               HideUI--;\r
+       if(HideUI == 0)\r
        {\r
                for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
                {\r
@@ -808,11 +916,16 @@ void EnableUserOpe(void)
                EnableWindow(hWndDirLocal, TRUE);\r
                EnableWindow(hWndDirRemote, TRUE);\r
 \r
+               // 特定の操作を行うと異常終了するバグ修正\r
+               EnableWindow(GetLocalHwnd(), TRUE);\r
+               EnableWindow(GetRemoteHwnd(), TRUE);\r
+\r
                // 選択不可な漢字コードのボタンが表示されるバグを修正\r
                HideHostKanjiButton();\r
                HideLocalKanjiButton();\r
 \r
-               HideUI = NO;\r
+               // バグ修正\r
+//             HideUI = NO;\r
 \r
                MakeButtonsFocus();\r
        }\r
@@ -832,7 +945,9 @@ void EnableUserOpe(void)
 \r
 int AskUserOpeDisabled(void)\r
 {\r
-       return(HideUI);\r
+       // デッドロック対策\r
+//     return(HideUI);\r
+       return (HideUI > 0 ? YES : NO);\r
 }\r
 \r
 \r
@@ -1288,6 +1403,12 @@ void HideLocalKanjiButton(void)
        return;\r
 }\r
 \r
+void SaveLocalKanjiCode(void)\r
+{\r
+       LocalKanjiCode = TmpLocalKanjiCode;\r
+       return;\r
+}\r
+\r
 \r
 /*===================================================\r
 *                      半角変換モード\r
@@ -1758,7 +1879,9 @@ void LocalRbuttonMenu(int Pos)
        UINT Flg3;\r
        int Count;\r
 \r
-       if(HideUI == NO)\r
+       // デッドロック対策\r
+//     if(HideUI == NO)\r
+       if(HideUI == 0)\r
        {\r
                Flg1 = 0;\r
                if(AskConnecting() == NO)\r
@@ -1823,7 +1946,9 @@ void RemoteRbuttonMenu(int Pos)
        UINT Flg3;\r
        int Count;\r
 \r
-       if(HideUI == NO)\r
+       // デッドロック対策\r
+//     if(HideUI == NO)\r
+       if(HideUI == 0)\r
        {\r
                Flg1 = 0;\r
                if(AskConnecting() == NO)\r
@@ -1858,6 +1983,8 @@ void RemoteRbuttonMenu(int Pos)
                if (AskRealHostType() == HTYPE_TANDEM)\r
                        AppendMenu(hMenu, MF_STRING | Flg1, MENU_SWITCH_OSS, MSGJPN2001);\r
 #endif\r
+               // 上位のディレクトリへ移動対応\r
+               AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_REMOTE_MOVE_UPDIR, MSGJPN355);\r
                AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
                AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
                AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
@@ -1896,7 +2023,9 @@ static void AddOpenMenu(HMENU hMenu, UINT Flg)
        char Tmp[FMAX_PATH+1];\r
        int i;\r
 \r
-       AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
+       // ローカルフォルダを開く\r
+//     AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
+       AppendMenu(hMenu, MF_STRING | Flg, MENU_OPEN, MSGJPN274);\r
        for(i = 0; i < VIEWERS; i++)\r
        {\r
                if(strlen(ViewerName[i]) != 0)\r