OSDN Git Service

Fix bugs of DPI conversion.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Tue, 18 Feb 2014 14:38:13 +0000 (23:38 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Tue, 18 Feb 2014 14:38:13 +0000 (23:38 +0900)
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
common.h
misc.c
statuswin.c
toolmenu.c

index 170006c..bc9f0c2 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 4931d24..54b65b9 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index b8a67af..71b557d 100644 (file)
--- a/common.h
+++ b/common.h
@@ -1902,7 +1902,7 @@ void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size);
 void QueryDisplayDPI();\r
 int CalcPixelX(int x);\r
 int CalcPixelY(int y);\r
-HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY);\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator);\r
 \r
 /*===== dlgsize.c =====*/\r
 \r
diff --git a/misc.c b/misc.c
index 7beef23..9bb301f 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -1994,7 +1994,7 @@ int CalcPixelY(int y)
        return (y * DisplayDPIY + 96 / 2) / 96;\r
 }\r
 \r
-HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator)\r
 {\r
        HBITMAP hDstBitmap;\r
        HDC hDC;\r
@@ -2003,6 +2003,8 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)
        BITMAP Bitmap;\r
        HGDIOBJ hSrcOld;\r
        HGDIOBJ hDstOld;\r
+       int Width;\r
+       int Height;\r
        hDstBitmap = NULL;\r
        if(hDC = GetDC(NULL))\r
        {\r
@@ -2012,12 +2014,18 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)
                        {\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
+                                       if(UnitSizeX == 0)\r
+                                               UnitSizeX = Bitmap.bmWidth;\r
+                                       if(UnitSizeY == 0)\r
+                                               UnitSizeY = Bitmap.bmHeight;\r
+                                       Width = (Bitmap.bmWidth / UnitSizeX) * ((CalcPixelX(UnitSizeX) * ScaleNumerator) / ScaleDenominator);\r
+                                       Height = (Bitmap.bmHeight / UnitSizeY) * ((CalcPixelY(UnitSizeY) * ScaleNumerator) / ScaleDenominator);\r
+                                       if(hDstBitmap = CreateCompatibleBitmap(hDC, Width, Height))\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
+                                               StretchBlt(hDstDC, 0, 0, Width, Height, hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);\r
                                                SelectObject(hSrcDC, hSrcOld);\r
                                                SelectObject(hDstDC, hDstOld);\r
                                        }\r
index cdb0acd..a0c5642 100644 (file)
@@ -67,6 +67,8 @@ static int SbarColWidth[5] = { 70, 230, 410, 570, -1 };
 int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst)\r
 {\r
        int Sts;\r
+       // 高DPI対応\r
+       int i;\r
 \r
        Sts = FFFTP_FAIL;\r
        hWndSbar = CreateWindowEx(0,\r
@@ -77,6 +79,9 @@ int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst)
 \r
        if(hWndSbar != NULL)\r
        {\r
+               // 高DPI対応\r
+               for(i = 0; i < sizeof(SbarColWidth) / sizeof(int); i++)\r
+                       SbarColWidth[i] = CalcPixelX(SbarColWidth[i]);\r
                SendMessage(hWndSbar, SB_SETPARTS, sizeof(SbarColWidth)/sizeof(int), (LPARAM)SbarColWidth);\r
                ShowWindow(hWndSbar, SW_SHOW);\r
                Sts = FFFTP_SUCCESS;\r
index 7025774..f9fb036 100644 (file)
@@ -259,7 +259,7 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
        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
+               hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1);\r
                DeleteObject(hOriginal);\r
        }\r
        hWndTbarMain = CreateToolbarEx(\r
@@ -310,7 +310,7 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
        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
+               hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1);\r
                DeleteObject(hOriginal);\r
        }\r
        hWndTbarLocal = CreateToolbarEx(\r
@@ -410,7 +410,7 @@ int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)
        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
+               hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1);\r
                DeleteObject(hOriginal);\r
        }\r
        hWndTbarRemote = CreateToolbarEx(\r