\r
static DIALOGDATA *DialogData; /* 入力ダイアログデータ */\r
static int HelpPage;\r
+// 高DPI対応\r
+static int DisplayDPIX;\r
+static int DisplayDPIY;\r
\r
\r
\r
}\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