From: s_kawamoto Date: Tue, 18 Feb 2014 14:38:13 +0000 (+0900) Subject: Fix bugs of DPI conversion. X-Git-Url: http://git.osdn.net/view?p=ffftp%2Fffftp.git;a=commitdiff_plain;h=7f6fa35585eb02a2a157b2a21377dfe39c631bf9 Fix bugs of DPI conversion. --- diff --git a/FFFTP_Eng_Release/FFFTP.exe b/FFFTP_Eng_Release/FFFTP.exe index 170006c..bc9f0c2 100644 Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ diff --git a/Release/FFFTP.exe b/Release/FFFTP.exe index 4931d24..54b65b9 100644 Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ diff --git a/common.h b/common.h index b8a67af..71b557d 100644 --- a/common.h +++ b/common.h @@ -1902,7 +1902,7 @@ void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size); void QueryDisplayDPI(); int CalcPixelX(int x); int CalcPixelY(int y); -HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY); +HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator); /*===== dlgsize.c =====*/ diff --git a/misc.c b/misc.c index 7beef23..9bb301f 100644 --- a/misc.c +++ b/misc.c @@ -1994,7 +1994,7 @@ int CalcPixelY(int y) return (y * DisplayDPIY + 96 / 2) / 96; } -HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY) +HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator) { HBITMAP hDstBitmap; HDC hDC; @@ -2003,6 +2003,8 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY) BITMAP Bitmap; HGDIOBJ hSrcOld; HGDIOBJ hDstOld; + int Width; + int Height; hDstBitmap = NULL; if(hDC = GetDC(NULL)) { @@ -2012,12 +2014,18 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY) { if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0) { - if(hDstBitmap = CreateCompatibleBitmap(hDC, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY))) + if(UnitSizeX == 0) + UnitSizeX = Bitmap.bmWidth; + if(UnitSizeY == 0) + UnitSizeY = Bitmap.bmHeight; + Width = (Bitmap.bmWidth / UnitSizeX) * ((CalcPixelX(UnitSizeX) * ScaleNumerator) / ScaleDenominator); + Height = (Bitmap.bmHeight / UnitSizeY) * ((CalcPixelY(UnitSizeY) * ScaleNumerator) / ScaleDenominator); + if(hDstBitmap = CreateCompatibleBitmap(hDC, Width, Height)) { hSrcOld = SelectObject(hSrcDC, hBitmap); hDstOld = SelectObject(hDstDC, hDstBitmap); SetStretchBltMode(hDstDC, HALFTONE); - StretchBlt(hDstDC, 0, 0, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY), hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY); + StretchBlt(hDstDC, 0, 0, Width, Height, hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY); SelectObject(hSrcDC, hSrcOld); SelectObject(hDstDC, hDstOld); } diff --git a/statuswin.c b/statuswin.c index cdb0acd..a0c5642 100644 --- a/statuswin.c +++ b/statuswin.c @@ -67,6 +67,8 @@ static int SbarColWidth[5] = { 70, 230, 410, 570, -1 }; int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst) { int Sts; + // 高DPI対応 + int i; Sts = FFFTP_FAIL; hWndSbar = CreateWindowEx(0, @@ -77,6 +79,9 @@ int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst) if(hWndSbar != NULL) { + // 高DPI対応 + for(i = 0; i < sizeof(SbarColWidth) / sizeof(int); i++) + SbarColWidth[i] = CalcPixelX(SbarColWidth[i]); SendMessage(hWndSbar, SB_SETPARTS, sizeof(SbarColWidth)/sizeof(int), (LPARAM)SbarColWidth); ShowWindow(hWndSbar, SW_SHOW); Sts = FFFTP_SUCCESS; diff --git a/toolmenu.c b/toolmenu.c index 7025774..f9fb036 100644 --- a/toolmenu.c +++ b/toolmenu.c @@ -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); if(hOriginal != NULL) { - hResized = ResizeBitmap(hOriginal, 16, 16); + hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1); DeleteObject(hOriginal); } hWndTbarMain = CreateToolbarEx( @@ -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); if(hOriginal != NULL) { - hResized = ResizeBitmap(hOriginal, 16, 16); + hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1); DeleteObject(hOriginal); } hWndTbarLocal = CreateToolbarEx( @@ -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); if(hOriginal != NULL) { - hResized = ResizeBitmap(hOriginal, 16, 16); + hResized = ResizeBitmap(hOriginal, 16, 16, 1, 1); DeleteObject(hOriginal); } hWndTbarRemote = CreateToolbarEx(