X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=misc.c;h=7beef23f3c84772af733bf2fb2bb63921dd780a6;hb=5c65084fb7d9dc25e82ce955779787ddcaa4f2b0;hp=4b05cf1bfb81def3b653fc3655eab0ae9697722c;hpb=0f9d3240ce53f07fa03885520a3b2a7052cf2aba;p=ffftp%2Fffftp.git diff --git a/misc.c b/misc.c index 4b05cf1..7beef23 100644 --- a/misc.c +++ b/misc.c @@ -76,6 +76,9 @@ extern HWND hHelpWin; static DIALOGDATA *DialogData; /* 入力ダイアログデータ */ static int HelpPage; +// 高DPI対応 +static int DisplayDPIX; +static int DisplayDPIY; @@ -1963,3 +1966,68 @@ void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size) } } #endif + +// 高DPI対応 +void QueryDisplayDPI() +{ + HDC hDC; + if(DisplayDPIX == 0) + { + if(hDC = GetDC(NULL)) + { + DisplayDPIX = GetDeviceCaps(hDC, LOGPIXELSX); + DisplayDPIY = GetDeviceCaps(hDC, LOGPIXELSY); + ReleaseDC(NULL, hDC); + } + } +} + +int CalcPixelX(int x) +{ + QueryDisplayDPI(); + return (x * DisplayDPIX + 96 / 2) / 96; +} + +int CalcPixelY(int y) +{ + QueryDisplayDPI(); + return (y * DisplayDPIY + 96 / 2) / 96; +} + +HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY) +{ + HBITMAP hDstBitmap; + HDC hDC; + HDC hSrcDC; + HDC hDstDC; + BITMAP Bitmap; + HGDIOBJ hSrcOld; + HGDIOBJ hDstOld; + hDstBitmap = NULL; + if(hDC = GetDC(NULL)) + { + if(hSrcDC = CreateCompatibleDC(hDC)) + { + if(hDstDC = CreateCompatibleDC(hDC)) + { + if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0) + { + if(hDstBitmap = CreateCompatibleBitmap(hDC, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY))) + { + 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); + SelectObject(hSrcDC, hSrcOld); + SelectObject(hDstDC, hDstOld); + } + } + DeleteDC(hDstDC); + } + DeleteDC(hSrcDC); + } + ReleaseDC(NULL, hDC); + } + return hDstBitmap; +} +