diff --git a/base/applications/mspaint/main.cpp b/base/applications/mspaint/main.cpp index 8b0bfe7bf89..8abe4ffa41a 100644 --- a/base/applications/mspaint/main.cpp +++ b/base/applications/mspaint/main.cpp @@ -261,24 +261,66 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument if (__argc >= 2) { - HBITMAP bmNew = NULL; - LoadDIBFromFile(&bmNew, __targv[1], &fileTime, &fileSize, &fileHPPM, &fileVPPM); - if (bmNew != NULL) + WIN32_FIND_DATAW find; + HANDLE hFind = FindFirstFileW(__targv[1], &find); + if (hFind != INVALID_HANDLE_VALUE) { - TCHAR *temp; - imageModel.Insert(bmNew); - GetFullPathName(__targv[1], SIZEOF(filepathname), filepathname, &temp); - CPath pathFileName(filepathname); - pathFileName.StripPath(); - CString strTitle; - strTitle.Format(IDS_WINDOWTITLE, (LPCTSTR)pathFileName); - mainWindow.SetWindowText(strTitle); - imageModel.ClearHistory(); - isAFile = TRUE; + FindClose(hFind); + + // check the file size + if (find.nFileSizeHigh || find.nFileSizeLow) + { + // load it now + HBITMAP bmNew = NULL; + LoadDIBFromFile(&bmNew, __targv[1], &fileTime, &fileSize, &fileHPPM, &fileVPPM); + if (bmNew) + { + // valid bitmap file + GetFullPathName(__targv[1], SIZEOF(filepathname), filepathname, NULL); + imageModel.Insert(bmNew); + CPath pathFileName(filepathname); + pathFileName.StripPath(); + + CString strTitle; + strTitle.Format(IDS_WINDOWTITLE, (LPCTSTR)pathFileName); + mainWindow.SetWindowText(strTitle); + + imageModel.ClearHistory(); + + isAFile = TRUE; + registrySettings.SetMostRecentFile(filepathname); + } + else + { + // cannot open and not empty + CStringW strText; + strText.Format(IDS_LOADERRORTEXT, __targv[1]); + MessageBoxW(NULL, strText, NULL, MB_ICONERROR); + } + } + else + { + // open the empty file + GetFullPathName(__targv[1], SIZEOF(filepathname), filepathname, NULL); + CPath pathFileName(filepathname); + pathFileName.StripPath(); + + CString strTitle; + strTitle.Format(IDS_WINDOWTITLE, (LPCTSTR)pathFileName); + mainWindow.SetWindowText(strTitle); + + imageModel.ClearHistory(); + + isAFile = TRUE; + registrySettings.SetMostRecentFile(filepathname); + } } else { - exit(0); + // does not exist + CStringW strText; + strText.Format(IDS_LOADERRORTEXT, __targv[1]); + MessageBoxW(NULL, strText, NULL, MB_ICONERROR); } }