X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=misc.c;h=02355e32bbdec637ad8c41ce35c6a57bc3a946b6;hb=5befc7d950367d9e43888d1e7003cfa49da7b90b;hp=67ccd911528605c5c240f7a022cd95ff6b83b011;hpb=39f0540ffea6b6efa919f16d0560442496af180d;p=ffftp%2Fffftp.git diff --git a/misc.c b/misc.c index 67ccd91..02355e3 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; @@ -145,6 +148,8 @@ static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa switch (iMessage) { case WM_INITDIALOG : + // プロセス保護 + ProtectAllEditControls(hDlg); if(strlen(DialogData->Title) != 0) SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)DialogData->Title); SendDlgItemMessage(hDlg, INP_INPSTR, EM_LIMITTEXT, DialogData->MaxLen-1, 0); @@ -257,6 +262,27 @@ INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LP } +// 全設定暗号化対応 +// 何らかのボタンが押されたときに終了 +INT_PTR CALLBACK AnyButtonDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG : + return(TRUE); + + case WM_COMMAND : + switch(GET_WM_COMMAND_CMD(wParam, lParam)) + { + case BN_CLICKED : + EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam)); + break; + } + return(TRUE); + } + return(FALSE); +} + /*----- 文字列の最後に "\" を付ける ------------------------------------------- * * Parameter @@ -803,18 +829,44 @@ int AskDirLevel(char *Path) void MakeSizeString(double Size, char *Buf) { - if(Size >= (1024*1024)) - { - Size /= (1024*1024); - sprintf(Buf, "%.2fM Bytes", Size); - } - else if (Size >= 1024) + // 修正 +// if(Size >= (1024*1024)) +// { +// Size /= (1024*1024); +// sprintf(Buf, "%.2fM Bytes", Size); +// } +// else if (Size >= 1024) +// { +// Size /= 1024; +// sprintf(Buf, "%.2fK Bytes", Size); +// } +// else +// sprintf(Buf, "%.0f Bytes", Size); + if(Size >= 1024.0) { - Size /= 1024; - sprintf(Buf, "%.2fK Bytes", Size); + Size /= 1024.0; + if(Size >= 1024.0) + { + Size /= 1024.0; + if(Size >= 1024.0) + { + Size /= 1024.0; + if(Size >= 1024.0) + { + Size /= 1024.0; + sprintf(Buf, "%.2lfT Bytes", Size); + } + else + sprintf(Buf, "%.2lfG Bytes", Size); + } + else + sprintf(Buf, "%.2lfM Bytes", Size); + } + else + sprintf(Buf, "%.2lfK Bytes", Size); } else - sprintf(Buf, "%.0f Bytes", Size); + sprintf(Buf, "%.0lf Bytes", Size); return; } @@ -1108,7 +1160,12 @@ int TimeString2FileTime(char *Time, FILETIME *Buf) else sTime.wHour = atoi(Time + 12); sTime.wMinute = atoi(Time + 14); - sTime.wSecond = 0; + // タイムスタンプのバグ修正 +// sTime.wSecond = 0; + if(strlen(Time) >= 19) + sTime.wSecond = atoi(Time + 17); + else + sTime.wSecond = 0; sTime.wMilliseconds = 0; SystemTimeToFileTime(&sTime, &fTime); @@ -1130,7 +1187,9 @@ int TimeString2FileTime(char *Time, FILETIME *Buf) * なし *----------------------------------------------------------------------------*/ -void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist) +// タイムスタンプのバグ修正 +//void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist) +void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist, int ShowSeconds) { SYSTEMTIME sTime; FILETIME fTime; @@ -1140,19 +1199,45 @@ void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist) if((Time->dwLowDateTime == 0) && (Time->dwHighDateTime == 0)) InfoExist = 0; - /* "yyyy/mm/dd hh:mm" */ + // タイムスタンプのバグ修正 +// /* "yyyy/mm/dd hh:mm" */ + /* "yyyy/mm/dd hh:mm:ss" */ FileTimeToLocalFileTime(Time, &fTime); FileTimeToSystemTime(&fTime, &sTime); - if(InfoExist & FINFO_DATE) - sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay); - else - sprintf(Buf, " "); - - if(InfoExist & FINFO_TIME) - sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute); + // タイムスタンプのバグ修正 +// if(InfoExist & FINFO_DATE) +// sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay); +// else +// sprintf(Buf, " "); +// +// if(InfoExist & FINFO_TIME) +// sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute); +// else +// sprintf(Buf+11, " "); + if(InfoExist & (FINFO_DATE | FINFO_TIME)) + { + if(InfoExist & FINFO_DATE) + sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay); + else + sprintf(Buf, " "); + if(ShowSeconds == YES) + { + if(InfoExist & FINFO_TIME) + sprintf(Buf+11, "%2d:%02d:%02d", sTime.wHour, sTime.wMinute, sTime.wSecond); + else + sprintf(Buf+11, " "); + } + else + { + if(InfoExist & FINFO_TIME) + sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute); + else + sprintf(Buf+11, " "); + } + } else - sprintf(Buf+11, " "); + Buf[0] = NUL; } else { @@ -1205,28 +1290,59 @@ int AttrString2Value(char *Str) Ret = 0; memset(Tmp, 0, 10); - strncpy(Tmp, Str, 9); - - if(Tmp[0] != '-') - Ret |= 0x400; - if(Tmp[1] != '-') - Ret |= 0x200; - if(Tmp[2] != '-') - Ret |= 0x100; - - if(Tmp[3] != '-') - Ret |= 0x40; - if(Tmp[4] != '-') - Ret |= 0x20; - if(Tmp[5] != '-') - Ret |= 0x10; - - if(Tmp[6] != '-') - Ret |= 0x4; - if(Tmp[7] != '-') - Ret |= 0x2; - if(Tmp[8] != '-') - Ret |= 0x1; + // ファイルの属性を数字で表示 +// strncpy(Tmp, Str, 9); +// +// if(Tmp[0] != '-') +// Ret |= 0x400; +// if(Tmp[1] != '-') +// Ret |= 0x200; +// if(Tmp[2] != '-') +// Ret |= 0x100; +// +// if(Tmp[3] != '-') +// Ret |= 0x40; +// if(Tmp[4] != '-') +// Ret |= 0x20; +// if(Tmp[5] != '-') +// Ret |= 0x10; +// +// if(Tmp[6] != '-') +// Ret |= 0x4; +// if(Tmp[7] != '-') +// Ret |= 0x2; +// if(Tmp[8] != '-') +// Ret |= 0x1; + if(strlen(Str) >= 9) + { + strncpy(Tmp, Str, 9); + + if(Tmp[0] != '-') + Ret |= 0x400; + if(Tmp[1] != '-') + Ret |= 0x200; + if(Tmp[2] != '-') + Ret |= 0x100; + + if(Tmp[3] != '-') + Ret |= 0x40; + if(Tmp[4] != '-') + Ret |= 0x20; + if(Tmp[5] != '-') + Ret |= 0x10; + + if(Tmp[6] != '-') + Ret |= 0x4; + if(Tmp[7] != '-') + Ret |= 0x2; + if(Tmp[8] != '-') + Ret |= 0x1; + } + else if(strlen(Str) >= 3) + { + strncpy(Tmp, Str, 3); + Ret = strtol(Tmp, NULL, 16); + } return(Ret); } @@ -1242,30 +1358,62 @@ int AttrString2Value(char *Str) * int 値 *----------------------------------------------------------------------------*/ -void AttrValue2String(int Attr, char *Buf) +// ファイルの属性を数字で表示 +//void AttrValue2String(int Attr, char *Buf) +void AttrValue2String(int Attr, char *Buf, int ShowNumber) { - strcpy(Buf, "---------"); - - if(Attr & 0x400) - Buf[0] = 'r'; - if(Attr & 0x200) - Buf[1] = 'w'; - if(Attr & 0x100) - Buf[2] = 'x'; - - if(Attr & 0x40) - Buf[3] = 'r'; - if(Attr & 0x20) - Buf[4] = 'w'; - if(Attr & 0x10) - Buf[5] = 'x'; - - if(Attr & 0x4) - Buf[6] = 'r'; - if(Attr & 0x2) - Buf[7] = 'w'; - if(Attr & 0x1) - Buf[8] = 'x'; + // ファイルの属性を数字で表示 +// strcpy(Buf, "---------"); +// +// if(Attr & 0x400) +// Buf[0] = 'r'; +// if(Attr & 0x200) +// Buf[1] = 'w'; +// if(Attr & 0x100) +// Buf[2] = 'x'; +// +// if(Attr & 0x40) +// Buf[3] = 'r'; +// if(Attr & 0x20) +// Buf[4] = 'w'; +// if(Attr & 0x10) +// Buf[5] = 'x'; +// +// if(Attr & 0x4) +// Buf[6] = 'r'; +// if(Attr & 0x2) +// Buf[7] = 'w'; +// if(Attr & 0x1) +// Buf[8] = 'x'; + if(ShowNumber == YES) + { + sprintf(Buf, "%03x", Attr); + } + else + { + strcpy(Buf, "---------"); + + if(Attr & 0x400) + Buf[0] = 'r'; + if(Attr & 0x200) + Buf[1] = 'w'; + if(Attr & 0x100) + Buf[2] = 'x'; + + if(Attr & 0x40) + Buf[3] = 'r'; + if(Attr & 0x20) + Buf[4] = 'w'; + if(Attr & 0x10) + Buf[5] = 'x'; + + if(Attr & 0x4) + Buf[6] = 'r'; + if(Attr & 0x2) + Buf[7] = 'w'; + if(Attr & 0x1) + Buf[8] = 'x'; + } return; } @@ -1295,7 +1443,7 @@ void FormatIniString(char *Str) while(*Str != NUL) { - if((*Str != 0x22) && (*Str != '\n')) + if((*Str != '\"') && (*Str != '\n')) *Put++ = *Str; Str++; } @@ -1331,6 +1479,8 @@ int SelectFile(HWND hWnd, char *Fname, char *Title, char *Filters, char *Ext, in GetCurrentDirectory(FMAX_PATH, Cur); strcpy(Tmp, Fname); + // 変数が未初期化のバグ修正 + memset(&OpenFile, 0, sizeof(OPENFILENAME)); OpenFile.lStructSize = sizeof(OPENFILENAME); OpenFile.hwndOwner = hWnd; OpenFile.hInstance = 0; @@ -1837,3 +1987,76 @@ 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, int ScaleNumerator, int ScaleDenominator) +{ + HBITMAP hDstBitmap; + HDC hDC; + HDC hSrcDC; + HDC hDstDC; + BITMAP Bitmap; + HGDIOBJ hSrcOld; + HGDIOBJ hDstOld; + int Width; + int Height; + hDstBitmap = NULL; + if(hDC = GetDC(NULL)) + { + if(hSrcDC = CreateCompatibleDC(hDC)) + { + if(hDstDC = CreateCompatibleDC(hDC)) + { + if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0) + { + 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, COLORONCOLOR); + StretchBlt(hDstDC, 0, 0, Width, Height, hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY); + SelectObject(hSrcDC, hSrcOld); + SelectObject(hDstDC, hDstOld); + } + } + DeleteDC(hDstDC); + } + DeleteDC(hSrcDC); + } + ReleaseDC(NULL, hDC); + } + return hDstBitmap; +} +