OSDN Git Service

Add support for high DPI displays.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 17 Feb 2014 15:55:06 +0000 (00:55 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 17 Feb 2014 15:55:06 +0000 (00:55 +0900)
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
Resource/ffftp.exe.manifest
Resource_eng/ffftp.exe.manifest
common.h
filelist.c
main.c
misc.c
taskwin.c
toolmenu.c

index ec37352..170006c 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index d491cc3..4931d24 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 9966543..5b8ecb8 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\r
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"\r
+    xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">\r
 <assemblyIdentity\r
     version="1.0.0.0"\r
     processorArchitecture="*"\r
         <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />\r
     </application> \r
 </compatibility>\r
+<asmv3:application>\r
+    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">\r
+        <dpiAware>true</dpiAware>\r
+    </asmv3:windowsSettings>\r
+</asmv3:application>\r
 </assembly>\r
 \r
index 9966543..5b8ecb8 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\r
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"\r
+    xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">\r
 <assemblyIdentity\r
     version="1.0.0.0"\r
     processorArchitecture="*"\r
         <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />\r
     </application> \r
 </compatibility>\r
+<asmv3:application>\r
+    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">\r
+        <dpiAware>true</dpiAware>\r
+    </asmv3:windowsSettings>\r
+</asmv3:application>\r
 </assembly>\r
 \r
index 375ba63..b8a67af 100644 (file)
--- a/common.h
+++ b/common.h
@@ -1378,6 +1378,8 @@ int LoadTaskbarList3();
 void FreeTaskbarList3();\r
 int IsTaskbarList3Loaded();\r
 void UpdateTaskbarProgress();\r
+// 高DPI対応\r
+int AskToolWinHeight(void);\r
 \r
 /*===== filelist.c =====*/\r
 \r
@@ -1896,6 +1898,11 @@ char* GetAppTempPath(char* Buf);
 #if defined(HAVE_TANDEM)\r
 void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size);\r
 #endif\r
+// 高DPI対応\r
+void QueryDisplayDPI();\r
+int CalcPixelX(int x);\r
+int CalcPixelY(int y);\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY);\r
 \r
 /*===== dlgsize.c =====*/\r
 \r
index 4cd3bd4..f1ea1b4 100755 (executable)
@@ -201,10 +201,16 @@ int MakeListWin(HWND hWnd, HINSTANCE hInst)
 \r
        /*===== ローカル側のリストビュー =====*/\r
 \r
+       // 高DPI対応\r
+//     hWndListLocal = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
+//                     WC_LISTVIEWA, NULL,\r
+//                     WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
+//                     0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight,\r
+//                     GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
        hWndListLocal = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
                        WC_LISTVIEWA, NULL,\r
                        WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
-                       0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight,\r
+                       0, AskToolWinHeight()*2, LocalWidth, ListHeight,\r
                        GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
 \r
        if(hWndListLocal != NULL)\r
@@ -252,10 +258,16 @@ int MakeListWin(HWND hWnd, HINSTANCE hInst)
 \r
        /*===== ホスト側のリストビュー =====*/\r
 \r
+       // 高DPI対応\r
+//     hWndListRemote = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
+//                     WC_LISTVIEWA, NULL,\r
+//                     WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
+//                     LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight,\r
+//                     GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
        hWndListRemote = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
                        WC_LISTVIEWA, NULL,\r
                        WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
-                       LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight,\r
+                       LocalWidth + SepaWidth, AskToolWinHeight()*2, RemoteWidth, ListHeight,\r
                        GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
 \r
        if(hWndListRemote != NULL)\r
diff --git a/main.c b/main.c
index 0b66bc6..470d1d7 100644 (file)
--- a/main.c
+++ b/main.c
@@ -149,6 +149,8 @@ static int PortableVersion;
 HANDLE ChangeNotification = INVALID_HANDLE_VALUE;\r
 // タスクバー進捗表示\r
 static ITaskbarList3* pTaskbarList3;\r
+// 高DPI対応\r
+int ToolWinHeight;\r
 \r
 \r
 /*===== グローバルなワーク =====*/\r
@@ -461,6 +463,8 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
        int masterpass;\r
        // ポータブル版判定\r
        int ImportPortable;\r
+       // 高DPI対応\r
+       int i;\r
 \r
        sts = FFFTP_FAIL;\r
 \r
@@ -485,6 +489,16 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
                _mkdir(TmpPath);\r
                SetYenTail(TmpPath);\r
 \r
+               // 高DPI対応\r
+               WinWidth = CalcPixelX(WinWidth);\r
+               WinHeight = CalcPixelY(WinHeight);\r
+               LocalWidth = CalcPixelX(LocalWidth);\r
+               TaskHeight = CalcPixelY(TaskHeight);\r
+               for(i = 0; i < sizeof(LocalTabWidth) / sizeof(int); i++)\r
+                       LocalTabWidth[i] = CalcPixelX(LocalTabWidth[i]);\r
+               for(i = 0; i < sizeof(RemoteTabWidth) / sizeof(int); i++)\r
+                       RemoteTabWidth[i] = CalcPixelX(RemoteTabWidth[i]);\r
+\r
                GetModuleFileName(NULL, HelpPath, FMAX_PATH);\r
                strcpy(GetFileName(HelpPath), "ffftp.chm");\r
 \r
@@ -746,6 +760,10 @@ static int MakeAllWindows(int cmdShow)
        wClass.hIconSm       = NULL;\r
        RegisterClassEx(&wClass);\r
 \r
+       // 高DPI対応\r
+//     ToolWinHeight = TOOLWIN_HEIGHT;\r
+       ToolWinHeight = CalcPixelY(16) + 12;\r
+\r
        if(SaveWinPos == NO)\r
        {\r
                WinPosX = CW_USEDEFAULT;\r
@@ -2625,16 +2643,24 @@ static void ResizeWindowProc(void)
        SendMessage(GetSbarWnd(), WM_SIZE, SIZE_RESTORED, MAKELPARAM(Rect.right, Rect.bottom));\r
 \r
        CalcWinSize();\r
-       SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
-       SetWindowPos(GetLocalTbarWnd(), 0, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
-       SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       // 高DPI対応\r
+//     SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+//     SetWindowPos(GetLocalTbarWnd(), 0, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+//     SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetLocalTbarWnd(), 0, 0, AskToolWinHeight(), LocalWidth, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, AskToolWinHeight(), RemoteWidth, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
        SendMessage(GetLocalTbarWnd(), TB_GETITEMRECT, 3, (LPARAM)&Rect);\r
        SetWindowPos(GetLocalHistHwnd(), 0, Rect.right, Rect.top, LocalWidth - Rect.right, 200, SWP_NOACTIVATE | SWP_NOZORDER);\r
        SendMessage(GetRemoteTbarWnd(), TB_GETITEMRECT, 3, (LPARAM)&Rect);\r
        SetWindowPos(GetRemoteHistHwnd(), 0, Rect.right, Rect.top, RemoteWidth - Rect.right, 200, SWP_NOACTIVATE | SWP_NOZORDER);\r
-       SetWindowPos(GetLocalHwnd(), 0, 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
-       SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
-       SetWindowPos(GetTaskWnd(), 0, 0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       // 高DPI対応\r
+//     SetWindowPos(GetLocalHwnd(), 0, 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+//     SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+//     SetWindowPos(GetTaskWnd(), 0, 0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetLocalHwnd(), 0, 0, AskToolWinHeight()*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, AskToolWinHeight()*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+       SetWindowPos(GetTaskWnd(), 0, 0, AskToolWinHeight()*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
 #endif\r
 \r
        return;\r
@@ -2674,7 +2700,9 @@ static void CalcWinSize(void)
 \r
        GetClientRect(GetSbarWnd(), &Rect);\r
 \r
-       ListHeight = max1(0, ClientHeight - TOOLWIN_HEIGHT * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
+       // 高DPI対応\r
+//     ListHeight = max1(0, ClientHeight - TOOLWIN_HEIGHT * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
+       ListHeight = max1(0, ClientHeight - AskToolWinHeight() * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
 \r
        return;\r
 }\r
@@ -2722,8 +2750,11 @@ static void CheckResizeFrame(WPARAM Keys, int x, int y)
 \r
        if((Resizing == RESIZE_OFF) && (Keys == 0))\r
        {\r
+               // 高DPI対応\r
+//             if((x >= LocalWidth) && (x <= LocalWidth + SepaWidth) &&\r
+//                (y > TOOLWIN_HEIGHT) && (y < (TOOLWIN_HEIGHT * 2 + ListHeight)))\r
                if((x >= LocalWidth) && (x <= LocalWidth + SepaWidth) &&\r
-                  (y > TOOLWIN_HEIGHT) && (y < (TOOLWIN_HEIGHT * 2 + ListHeight)))\r
+                  (y > AskToolWinHeight()) && (y < (AskToolWinHeight() * 2 + ListHeight)))\r
                {\r
                        /* 境界位置変更用カーソルに変更 */\r
                        SetCapture(hWndFtp);\r
@@ -2732,7 +2763,9 @@ static void CheckResizeFrame(WPARAM Keys, int x, int y)
                        Resizing = RESIZE_PREPARE;\r
                        ResizePos = RESIZE_HPOS;\r
                }\r
-               else if((y >= TOOLWIN_HEIGHT*2+ListHeight) && (y <= TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))\r
+               // 高DPI対応\r
+//             else if((y >= TOOLWIN_HEIGHT*2+ListHeight) && (y <= TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))\r
+               else if((y >= AskToolWinHeight()*2+ListHeight) && (y <= AskToolWinHeight()*2+ListHeight+SepaWidth))\r
                {\r
                        /* 境界位置変更用カーソルに変更 */\r
                        SetCapture(hWndFtp);\r
@@ -2752,17 +2785,25 @@ static void CheckResizeFrame(WPARAM Keys, int x, int y)
                        GetClientRect(GetSbarWnd(), &Rect1);\r
                        Rect.left += GetSystemMetrics(SM_CXFRAME);\r
                        Rect.right -= GetSystemMetrics(SM_CXFRAME);\r
-                       Rect.top += TOOLWIN_HEIGHT*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
+                       // 高DPI対応\r
+//                     Rect.top += TOOLWIN_HEIGHT*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
+                       Rect.top += AskToolWinHeight()*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
                        Rect.bottom -= GetSystemMetrics(SM_CYFRAME) + Rect1.bottom;\r
                        ClipCursor(&Rect);\r
                }\r
                else\r
                {\r
+                       // 高DPI対応\r
+//                     if(((ResizePos == RESIZE_HPOS) &&\r
+//                             ((x < LocalWidth) || (x > LocalWidth + SepaWidth) ||\r
+//                              (y <= TOOLWIN_HEIGHT) || (y >= (TOOLWIN_HEIGHT * 2 + ListHeight)))) ||\r
+//                        ((ResizePos == RESIZE_VPOS) &&\r
+//                             ((y < TOOLWIN_HEIGHT*2+ListHeight) || (y > TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))))\r
                        if(((ResizePos == RESIZE_HPOS) &&\r
                                ((x < LocalWidth) || (x > LocalWidth + SepaWidth) ||\r
-                                (y <= TOOLWIN_HEIGHT) || (y >= (TOOLWIN_HEIGHT * 2 + ListHeight)))) ||\r
+                                (y <= AskToolWinHeight()) || (y >= (AskToolWinHeight() * 2 + ListHeight)))) ||\r
                           ((ResizePos == RESIZE_VPOS) &&\r
-                               ((y < TOOLWIN_HEIGHT*2+ListHeight) || (y > TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))))\r
+                               ((y < AskToolWinHeight()*2+ListHeight) || (y > AskToolWinHeight()*2+ListHeight+SepaWidth))))\r
                        {\r
                                /* 元のカーソルに戻す */\r
                                ReleaseCapture();\r
@@ -3467,3 +3508,9 @@ void UpdateTaskbarProgress()
                pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NOPROGRESS);\r
 }\r
 \r
+// 高DPI対応\r
+int AskToolWinHeight(void)\r
+{\r
+       return(ToolWinHeight);\r
+}\r
+\r
diff --git a/misc.c b/misc.c
index 4b05cf1..7beef23 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -76,6 +76,9 @@ extern HWND hHelpWin;
 \r
 static DIALOGDATA *DialogData;         /* 入力ダイアログデータ */\r
 static int HelpPage;\r
+// 高DPI対応\r
+static int DisplayDPIX;\r
+static int DisplayDPIY;\r
 \r
 \r
 \r
@@ -1963,3 +1966,68 @@ void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size)
        }\r
 }\r
 #endif\r
+\r
+// 高DPI対応\r
+void QueryDisplayDPI()\r
+{\r
+       HDC hDC;\r
+       if(DisplayDPIX == 0)\r
+       {\r
+               if(hDC = GetDC(NULL))\r
+               {\r
+                       DisplayDPIX = GetDeviceCaps(hDC, LOGPIXELSX);\r
+                       DisplayDPIY = GetDeviceCaps(hDC, LOGPIXELSY);\r
+                       ReleaseDC(NULL, hDC);\r
+               }\r
+       }\r
+}\r
+\r
+int CalcPixelX(int x)\r
+{\r
+       QueryDisplayDPI();\r
+       return (x * DisplayDPIX + 96 / 2) / 96;\r
+}\r
+\r
+int CalcPixelY(int y)\r
+{\r
+       QueryDisplayDPI();\r
+       return (y * DisplayDPIY + 96 / 2) / 96;\r
+}\r
+\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)\r
+{\r
+       HBITMAP hDstBitmap;\r
+       HDC hDC;\r
+       HDC hSrcDC;\r
+       HDC hDstDC;\r
+       BITMAP Bitmap;\r
+       HGDIOBJ hSrcOld;\r
+       HGDIOBJ hDstOld;\r
+       hDstBitmap = NULL;\r
+       if(hDC = GetDC(NULL))\r
+       {\r
+               if(hSrcDC = CreateCompatibleDC(hDC))\r
+               {\r
+                       if(hDstDC = CreateCompatibleDC(hDC))\r
+                       {\r
+                               if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0)\r
+                               {\r
+                                       if(hDstBitmap = CreateCompatibleBitmap(hDC, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY)))\r
+                                       {\r
+                                               hSrcOld = SelectObject(hSrcDC, hBitmap);\r
+                                               hDstOld = SelectObject(hDstDC, hDstBitmap);\r
+                                               SetStretchBltMode(hDstDC, HALFTONE);\r
+                                               StretchBlt(hDstDC, 0, 0, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY), hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);\r
+                                               SelectObject(hSrcDC, hSrcOld);\r
+                                               SelectObject(hDstDC, hDstOld);\r
+                                       }\r
+                               }\r
+                               DeleteDC(hDstDC);\r
+                       }\r
+                       DeleteDC(hSrcDC);\r
+               }\r
+               ReleaseDC(NULL, hDC);\r
+       }\r
+       return hDstBitmap;\r
+}\r
+\r
index cb05048..a8a6ae1 100644 (file)
--- a/taskwin.c
+++ b/taskwin.c
@@ -87,10 +87,16 @@ int MakeTaskWindow(HWND hWnd, HINSTANCE hInst)
        int Sts;\r
 \r
        Sts = FFFTP_FAIL;\r
+       // 高DPI対応\r
+//     hWndTask = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
+//                     "EDIT", NULL,\r
+//                     WS_CHILD | WS_BORDER | ES_AUTOVSCROLL | WS_VSCROLL | ES_MULTILINE | ES_READONLY | WS_CLIPSIBLINGS,\r
+//                     0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight,\r
+//                     hWnd, (HMENU)1500, hInst, NULL);\r
        hWndTask = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
                        "EDIT", NULL,\r
                        WS_CHILD | WS_BORDER | ES_AUTOVSCROLL | WS_VSCROLL | ES_MULTILINE | ES_READONLY | WS_CLIPSIBLINGS,\r
-                       0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight,\r
+                       0, AskToolWinHeight()*2+ListHeight+SepaWidth, ClientWidth, TaskHeight,\r
                        hWnd, (HMENU)1500, hInst, NULL);\r
 \r
        if(hWndTask != NULL)\r
index 9eba6e3..7025774 100644 (file)
@@ -237,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, 16, 16);\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
+                               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
@@ -262,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, 16, 16);\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
@@ -288,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 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
-\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
@@ -334,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, 16, 16);\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
@@ -355,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