OSDN Git Service

Fix bugs of drag-and-drop handling.
[ffftp/ffftp.git] / misc.c
diff --git a/misc.c b/misc.c
index 05f9e0a..a6f89ee 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
@@ -259,6 +262,27 @@ INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LP
 }\r
 \r
 \r
+// 全設定暗号化対応\r
+// 何らかのボタンが押されたときに終了\r
+INT_PTR CALLBACK AnyButtonDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+       switch (message)\r
+       {\r
+               case WM_INITDIALOG :\r
+                       return(TRUE);\r
+\r
+               case WM_COMMAND :\r
+                       switch(GET_WM_COMMAND_CMD(wParam, lParam))\r
+                       {\r
+                               case BN_CLICKED :\r
+                                       EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam));\r
+                                       break;\r
+                       }\r
+                       return(TRUE);\r
+       }\r
+    return(FALSE);\r
+}\r
+\r
 /*----- 文字列の最後に "\" を付ける -------------------------------------------\r
 *\r
 *      Parameter\r
@@ -805,18 +829,44 @@ int AskDirLevel(char *Path)
 \r
 void MakeSizeString(double Size, char *Buf)\r
 {\r
-       if(Size >= (1024*1024))\r
-       {\r
-               Size /= (1024*1024);\r
-               sprintf(Buf, "%.2fM Bytes", Size);\r
-       }\r
-       else if (Size >= 1024)\r
+       // 修正\r
+//     if(Size >= (1024*1024))\r
+//     {\r
+//             Size /= (1024*1024);\r
+//             sprintf(Buf, "%.2fM Bytes", Size);\r
+//     }\r
+//     else if (Size >= 1024)\r
+//     {\r
+//             Size /= 1024;\r
+//             sprintf(Buf, "%.2fK Bytes", Size);\r
+//     }\r
+//     else\r
+//             sprintf(Buf, "%.0f Bytes", Size);\r
+       if(Size >= 1024.0)\r
        {\r
-               Size /= 1024;\r
-               sprintf(Buf, "%.2fK Bytes", Size);\r
+               Size /= 1024.0;\r
+               if(Size >= 1024.0)\r
+               {\r
+                       Size /= 1024.0;\r
+                       if(Size >= 1024.0)\r
+                       {\r
+                               Size /= 1024.0;\r
+                               if(Size >= 1024.0)\r
+                               {\r
+                                       Size /= 1024.0;\r
+                                       sprintf(Buf, "%.2lfT Bytes", Size);\r
+                               }\r
+                               else\r
+                                       sprintf(Buf, "%.2lfG Bytes", Size);\r
+                       }\r
+                       else\r
+                               sprintf(Buf, "%.2lfM Bytes", Size);\r
+               }\r
+               else\r
+                       sprintf(Buf, "%.2lfK Bytes", Size);\r
        }\r
        else\r
-               sprintf(Buf, "%.0f Bytes", Size);\r
+               sprintf(Buf, "%.0lf Bytes", Size);\r
 \r
        return;\r
 }\r
@@ -1393,7 +1443,7 @@ void FormatIniString(char *Str)
 \r
        while(*Str != NUL)\r
        {\r
-               if((*Str != 0x22) && (*Str != '\n'))\r
+               if((*Str != '\"') && (*Str != '\n'))\r
                        *Put++ = *Str;\r
                Str++;\r
        }\r
@@ -1937,3 +1987,87 @@ 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, int ScaleNumerator, int ScaleDenominator)\r
+{\r
+       HBITMAP hDstBitmap;\r
+       HDC hDC;\r
+       HDC hSrcDC;\r
+       HDC hDstDC;\r
+       BITMAP Bitmap;\r
+       HGDIOBJ hSrcOld;\r
+       HGDIOBJ hDstOld;\r
+       int Width;\r
+       int Height;\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(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, COLORONCOLOR);\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
+                               }\r
+                               DeleteDC(hDstDC);\r
+                       }\r
+                       DeleteDC(hSrcDC);\r
+               }\r
+               ReleaseDC(NULL, hDC);\r
+       }\r
+       return hDstBitmap;\r
+}\r
+\r
+// ソフトウェア自動更新\r
+void DecodeLineFeed(char* Str)\r
+{\r
+       char* p;\r
+       p = Str;\r
+       while(p = strstr(p, "\\n"))\r
+       {\r
+               strncpy(p, "\r\n", 2);\r
+       }\r
+}\r
+\r