[MSPAINT] Fix interpretation of command line (#707)
[reactos.git] / base / applications / mspaint / main.cpp
index 8b0bfe7..8abe4ff 100644 (file)
@@ -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);
         }
     }