https://git.reactos.org/?p=reactos.git;a=commitdiff;h=036206a1c36738584c8df57f6dcd76c725ae7f45

commit 036206a1c36738584c8df57f6dcd76c725ae7f45
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Wed Apr 29 07:44:18 2020 +0900
Commit:     GitHub <[email protected]>
CommitDate: Wed Apr 29 07:44:18 2020 +0900

    [MSPAINT] Refactor loading/saving image file (#2686)
    
    - Add DoLoadImageFile, CreateWhiteDIB, and CMainWindow::ConfirmSave 
functions.
    - Replace LoadDIBFromFile function with DoLoadImageFile.
    - Fix the empty file loading.
    - Delete UpdateApplicationProperties function.
    - Rewrite SaveDIBToFile function.
    CORE-16982, CORE-16979
---
 base/applications/mspaint/dib.cpp     | 170 +++++++++++++++++++++++++---------
 base/applications/mspaint/dib.h       |   8 +-
 base/applications/mspaint/globalvar.h |   1 +
 base/applications/mspaint/history.cpp |   3 +-
 base/applications/mspaint/history.h   |   2 -
 base/applications/mspaint/main.cpp    |  63 +------------
 base/applications/mspaint/winproc.cpp | 158 ++++++++++---------------------
 base/applications/mspaint/winproc.h   |   2 +-
 8 files changed, 184 insertions(+), 223 deletions(-)

diff --git a/base/applications/mspaint/dib.cpp 
b/base/applications/mspaint/dib.cpp
index ce74c093bd8..58c4c83e82f 100644
--- a/base/applications/mspaint/dib.cpp
+++ b/base/applications/mspaint/dib.cpp
@@ -26,6 +26,29 @@ CreateDIBWithProperties(int width, int height)
     return CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
 }
 
+HBITMAP
+CreateColorDIB(int width, int height, COLORREF rgb)
+{
+    HBITMAP ret = CreateDIBWithProperties(width, height);
+    if (!ret)
+        return NULL;
+
+    if (rgb)
+    {
+        HDC hdc = CreateCompatibleDC(NULL);
+        HGDIOBJ hbmOld = SelectObject(hdc, ret);
+        RECT rc;
+        SetRect(&rc, 0, 0, width, height);
+        HBRUSH hbr = CreateSolidBrush(rgb);
+        FillRect(hdc, &rc, hbr);
+        DeleteObject(hbr);
+        SelectObject(hdc, hbmOld);
+        DeleteDC(hdc);
+    }
+
+    return ret;
+}
+
 int
 GetDIBWidth(HBITMAP hBitmap)
 {
@@ -42,35 +65,32 @@ GetDIBHeight(HBITMAP hBitmap)
     return bm.bmHeight;
 }
 
-void
-SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC, LPSYSTEMTIME time, 
int *size, int hRes, int vRes)
+BOOL SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC)
 {
     CImage img;
     img.Attach(hBitmap);
     img.Save(FileName);  // TODO: error handling
     img.Detach();
 
-    // update time and size
-
-    HANDLE hFile =
-        CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, 
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
-    if (hFile == INVALID_HANDLE_VALUE)
-        return;
+    WIN32_FIND_DATA find;
+    HANDLE hFind = FindFirstFile(FileName, &find);
+    if (hFind == INVALID_HANDLE_VALUE)
+        return FALSE;
+    FindClose(hFind);
 
-    if (time)
-    {
-        FILETIME ft;
-        GetFileTime(hFile, NULL, NULL, &ft);
-        FileTimeToSystemTime(&ft, time);
-    }
-    if (size)
-        *size = GetFileSize(hFile, NULL);
+    // update time and size
+    FILETIME ft;
+    FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
+    FileTimeToSystemTime(&ft, &fileTime);
+    fileSize = find.nFileSizeLow;
 
     // TODO: update hRes and vRes
 
-    CloseHandle(hFile);
-
     registrySettings.SetMostRecentFile(FileName);
+
+    isAFile = TRUE;
+    imageSaved = TRUE;
+    return TRUE;
 }
 
 void ShowFileLoadError(LPCTSTR name)
@@ -82,41 +102,105 @@ void ShowFileLoadError(LPCTSTR name)
     mainWindow.MessageBox(strText, strProgramName, MB_OK | MB_ICONEXCLAMATION);
 }
 
-void
-LoadDIBFromFile(HBITMAP * hBitmap, LPCTSTR name, LPSYSTEMTIME time, int *size, 
int *hRes, int *vRes)
+HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCTSTR name, DWORD dwFileSize, BOOL 
isFile)
 {
-    CImage img;
-    img.Load(name);
-    *hBitmap = img.Detach();
+    if (hBitmap == NULL)
+    {
+        COLORREF white = RGB(255, 255, 255);
+        hBitmap = CreateColorDIB(registrySettings.BMPWidth,
+                                 registrySettings.BMPHeight, white);
+        if (hBitmap == NULL)
+            return FALSE;
+
+        fileHPPM = fileVPPM = 2834;
+        ZeroMemory(&fileTime, sizeof(fileTime));
+    }
+    else
+    {
+        // update PPMs
+        HDC hScreenDC = GetDC(NULL);
+        fileHPPM = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSX) * 1000 / 25.4);
+        fileVPPM = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSY) * 1000 / 25.4);
+        ReleaseDC(NULL, hScreenDC);
+    }
+
+    // update image
+    imageModel.Insert(hBitmap);
+    imageModel.ClearHistory();
+
+    // update fileSize
+    fileSize = dwFileSize;
+
+    // update filepathname
+    if (name && name[0])
+        GetFullPathName(name, SIZEOF(filepathname), filepathname, NULL);
+    else
+        LoadString(hProgInstance, IDS_DEFAULTFILENAME, filepathname, 
SIZEOF(filepathname));
+
+    // set title
+    CString strTitle;
+    strTitle.Format(IDS_WINDOWTITLE, PathFindFileName(filepathname));
+    mainWindow.SetWindowText(strTitle);
+
+    // update file info and recent
+    isAFile = isFile;
+    if (isAFile)
+        registrySettings.SetMostRecentFile(filepathname);
+
+    imageSaved = TRUE;
+
+    return hBitmap;
+}
 
-    if (!hBitmap)
+HBITMAP DoLoadImageFile(HWND hwnd, LPCTSTR name, BOOL fIsMainFile)
+{
+    // find the file
+    WIN32_FIND_DATA find;
+    HANDLE hFind = FindFirstFile(name, &find);
+    if (hFind == INVALID_HANDLE_VALUE)
     {
-        ShowFileLoadError(name);
-        return;
+        // does not exist
+        CStringW strText;
+        strText.Format(IDS_LOADERRORTEXT, name);
+        MessageBoxW(hwnd, strText, NULL, MB_ICONERROR);
+        return NULL;
     }
+    DWORD dwFileSize = find.nFileSizeLow; // get file size
+    FindClose(hFind);
 
-    // update time and size
-    HANDLE hFile =
-        CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
-    if (hFile == INVALID_HANDLE_VALUE)
+    // is file empty?
+    if (dwFileSize == 0)
     {
-        ShowFileLoadError(name);
-        return;
+        if (fIsMainFile)
+        {
+            FILETIME ft;
+            FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
+            FileTimeToSystemTime(&ft, &fileTime);
+            return SetBitmapAndInfo(NULL, name, dwFileSize, TRUE);
+        }
     }
 
-    if (time)
+    // load the image
+    CImage img;
+    img.Load(name);
+    HBITMAP hBitmap = img.Detach();
+
+    if (hBitmap == NULL)
     {
-        FILETIME ft;
-        GetFileTime(hFile, NULL, NULL, &ft);
-        FileTimeToSystemTime(&ft, time);
+        // cannot open
+        CStringW strText;
+        strText.Format(IDS_LOADERRORTEXT, name);
+        MessageBoxW(hwnd, strText, NULL, MB_ICONERROR);
+        return NULL;
     }
-    if (size)
-        *size = GetFileSize(hFile, NULL);
 
-    HDC hScreenDC = GetDC(NULL);
-    *hRes = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSX) * 1000 / 25.4);
-    *vRes = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSY) * 1000 / 25.4);
-    ReleaseDC(NULL, hScreenDC);
+    if (fIsMainFile)
+    {
+        FILETIME ft;
+        FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
+        FileTimeToSystemTime(&ft, &fileTime);
+        SetBitmapAndInfo(hBitmap, name, dwFileSize, TRUE);
+    }
 
-    CloseHandle(hFile);
+    return hBitmap;
 }
diff --git a/base/applications/mspaint/dib.h b/base/applications/mspaint/dib.h
index 743c2e8e6ad..6bbb56d9c6d 100644
--- a/base/applications/mspaint/dib.h
+++ b/base/applications/mspaint/dib.h
@@ -9,14 +9,16 @@
 #pragma once
 
 HBITMAP CreateDIBWithProperties(int width, int height);
+HBITMAP CreateColorDIB(int width, int height, COLORREF rgb);
 
 int GetDIBWidth(HBITMAP hbm);
 
 int GetDIBHeight(HBITMAP hbm);
 
-void SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC, LPSYSTEMTIME 
time, int *size, int hRes,
-                   int vRes);
+BOOL SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC);
 
-void LoadDIBFromFile(HBITMAP *hBitmap, LPCTSTR name, LPSYSTEMTIME time, int 
*size, int *hRes, int *vRes);
+HBITMAP DoLoadImageFile(HWND hwnd, LPCTSTR name, BOOL fIsMainFile);
 
 void ShowFileLoadError(LPCTSTR name);
+
+HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCTSTR name, DWORD dwFileSize, BOOL 
isFile);
diff --git a/base/applications/mspaint/globalvar.h 
b/base/applications/mspaint/globalvar.h
index ab42977518d..cd427c86b05 100644
--- a/base/applications/mspaint/globalvar.h
+++ b/base/applications/mspaint/globalvar.h
@@ -53,6 +53,7 @@ extern HINSTANCE hProgInstance;
 
 extern TCHAR filepathname[1000];
 extern BOOL isAFile;
+extern BOOL imageSaved;
 extern int fileSize;
 extern int fileHPPM;
 extern int fileVPPM;
diff --git a/base/applications/mspaint/history.cpp 
b/base/applications/mspaint/history.cpp
index abe03bf6318..b9f206cb165 100644
--- a/base/applications/mspaint/history.cpp
+++ b/base/applications/mspaint/history.cpp
@@ -161,8 +161,7 @@ void ImageModel::Crop(int nWidth, int nHeight, int 
nOffsetX, int nOffsetY)
 
 void ImageModel::SaveImage(LPTSTR lpFileName)
 {
-    SaveDIBToFile(hBms[currInd], lpFileName, hDrawingDC, &fileTime, &fileSize, 
fileHPPM, fileVPPM);
-    imageSaved = TRUE;
+    SaveDIBToFile(hBms[currInd], lpFileName, hDrawingDC);
 }
 
 BOOL ImageModel::IsImageSaved()
diff --git a/base/applications/mspaint/history.h 
b/base/applications/mspaint/history.h
index 7ed0409cfe1..1c5110f7306 100644
--- a/base/applications/mspaint/history.h
+++ b/base/applications/mspaint/history.h
@@ -21,8 +21,6 @@ private:
     int undoSteps;
     int redoSteps;
 public:
-    BOOL imageSaved;
-
     ImageModel();
     void CopyPrevious(void);
     void Undo(void);
diff --git a/base/applications/mspaint/main.cpp 
b/base/applications/mspaint/main.cpp
index 2b89afe9417..927eb7fa99f 100644
--- a/base/applications/mspaint/main.cpp
+++ b/base/applications/mspaint/main.cpp
@@ -51,6 +51,7 @@ HINSTANCE hProgInstance;
 
 TCHAR filepathname[1000];
 BOOL isAFile = FALSE;
+BOOL imageSaved = FALSE;
 int fileSize;
 int fileHPPM = 2834;
 int fileVPPM = 2834;
@@ -252,67 +253,7 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE 
hPrevInstance, LPTSTR lpszArgument
 
     if (__argc >= 2)
     {
-        WIN32_FIND_DATAW find;
-        HANDLE hFind = FindFirstFileW(__targv[1], &find);
-        if (hFind != INVALID_HANDLE_VALUE)
-        {
-            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
-        {
-            // does not exist
-            CStringW strText;
-            strText.Format(IDS_LOADERRORTEXT, __targv[1]);
-            MessageBoxW(NULL, strText, NULL, MB_ICONERROR);
-        }
+        DoLoadImageFile(mainWindow, __targv[1], TRUE);
     }
 
     /* initializing the CHOOSECOLOR structure for use with ChooseColor */
diff --git a/base/applications/mspaint/winproc.cpp 
b/base/applications/mspaint/winproc.cpp
index 51ba366fe08..928c21b9e59 100644
--- a/base/applications/mspaint/winproc.cpp
+++ b/base/applications/mspaint/winproc.cpp
@@ -102,21 +102,6 @@ void CMainWindow::saveImage(BOOL overwrite)
     }
 }
 
-void CMainWindow::UpdateApplicationProperties(HBITMAP bitmap, LPCTSTR 
newfilepathname)
-{
-    imageModel.Insert(bitmap);
-    CopyMemory(filepathname, newfilepathname, sizeof(filepathname));
-    CPath pathFileName(newfilepathname);
-    pathFileName.StripPath();
-    CString strTitle;
-    strTitle.Format(IDS_WINDOWTITLE, (LPCTSTR)pathFileName);
-    SetWindowText(strTitle);
-    imageModel.ClearHistory();
-    isAFile = TRUE;
-
-    registrySettings.SetMostRecentFile(newfilepathname);
-}
-
 void CMainWindow::InsertSelectionFromHBITMAP(HBITMAP bitmap, HWND window)
 {
     int width = GetDIBWidth(bitmap); 
@@ -174,17 +159,14 @@ void CMainWindow::InsertSelectionFromHBITMAP(HBITMAP 
bitmap, HWND window)
 
 LRESULT CMainWindow::OnDropFiles(UINT nMsg, WPARAM wParam, LPARAM lParam, 
BOOL& bHandled)
 {
-    HDROP drophandle;
     TCHAR droppedfile[MAX_PATH];
-    HBITMAP bmNew = NULL;
-    drophandle = (HDROP)wParam;
-    DragQueryFile(drophandle, 0, droppedfile, SIZEOF(droppedfile));
-    DragFinish(drophandle);
-    LoadDIBFromFile(&bmNew, droppedfile, &fileTime, &fileSize, &fileHPPM, 
&fileVPPM);
-    if (bmNew != NULL)
-    {
-        UpdateApplicationProperties(bmNew, droppedfile);
-    }
+
+    HDROP hDrop = (HDROP)wParam;
+    DragQueryFile(hDrop, 0, droppedfile, SIZEOF(droppedfile));
+    DragFinish(hDrop);
+
+    ConfirmSave() && DoLoadImageFile(m_hWnd, droppedfile, TRUE);
+
     return 0;
 }
 
@@ -202,29 +184,34 @@ LRESULT CMainWindow::OnDestroy(UINT nMsg, WPARAM wParam, 
LPARAM lParam, BOOL& bH
     return 0;
 }
 
-LRESULT CMainWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& 
bHandled)
+BOOL CMainWindow::ConfirmSave()
 {
-    if (!imageModel.IsImageSaved())
+    if (imageModel.IsImageSaved())
+        return TRUE;
+
+    CString strProgramName;
+    strProgramName.LoadString(IDS_PROGRAMNAME);
+
+    CString strSavePromptText;
+    strSavePromptText.Format(IDS_SAVEPROMPTTEXT, 
PathFindFileName(filepathname));
+
+    switch (MessageBox(strSavePromptText, strProgramName, MB_YESNOCANCEL | 
MB_ICONQUESTION))
     {
-        CString strProgramName;
-        strProgramName.LoadString(IDS_PROGRAMNAME);
-        CPath pathFileName(filepathname);
-        pathFileName.StripPath();
-        CString strSavePromptText;
-        strSavePromptText.Format(IDS_SAVEPROMPTTEXT, (LPCTSTR)pathFileName);
-        switch (MessageBox(strSavePromptText, strProgramName, MB_YESNOCANCEL | 
MB_ICONQUESTION))
-        {
-            case IDNO:
-                DestroyWindow();
-                break;
-            case IDYES:
-                saveImage(FALSE);
-                if (imageModel.IsImageSaved())
-                    DestroyWindow();
-                break;
-        }
+        case IDYES:
+            saveImage(TRUE);
+            return imageModel.IsImageSaved();
+        case IDNO:
+            return TRUE;
+        case IDCANCEL:
+            return FALSE;
     }
-    else
+
+    return TRUE;
+}
+
+LRESULT CMainWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& 
bHandled)
+{
+    if (ConfirmSave())
     {
         DestroyWindow();
     }
@@ -404,45 +391,15 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, 
LPARAM lParam, BOOL& bH
             SendMessage(WM_CLOSE, wParam, lParam);
             break;
         case IDM_FILENEW:
-        {
-            BOOL reset = TRUE;
-            if (!imageModel.IsImageSaved())
+            if (ConfirmSave())
             {
-                CString strProgramName;
-                strProgramName.LoadString(IDS_PROGRAMNAME);
-                CPath pathFileName(filepathname);
-                pathFileName.StripPath();
-                CString strSavePromptText;
-                strSavePromptText.Format(IDS_SAVEPROMPTTEXT, 
(LPCTSTR)pathFileName);
-                switch (MessageBox(strSavePromptText, strProgramName, 
MB_YESNOCANCEL | MB_ICONQUESTION))
-                {
-                    case IDNO:
-                        imageModel.imageSaved = TRUE; //TODO: move to 
ImageModel
-                        break;
-                    case IDYES:
-                        saveImage(FALSE);
-                        break;
-                    case IDCANCEL:
-                        reset = FALSE;
-                        break;
-                }
-            }
-            if (reset && imageModel.IsImageSaved()) //TODO: move to ImageModel
-            {
-                imageModel.Clear();
-                imageModel.ClearHistory();
+                SetBitmapAndInfo(NULL, NULL, 0, FALSE);
             }
             break;
-        }
         case IDM_FILEOPEN:
-            if (GetOpenFileName(&ofn) != 0)
+            if (ConfirmSave() && GetOpenFileName(&ofn))
             {
-                HBITMAP bmNew = NULL;
-                LoadDIBFromFile(&bmNew, ofn.lpstrFile, &fileTime, &fileSize, 
&fileHPPM, &fileVPPM);
-                if (bmNew != NULL)
-                {
-                    UpdateApplicationProperties(bmNew, ofn.lpstrFile);
-                }
+                DoLoadImageFile(m_hWnd, ofn.lpstrFile, TRUE);
             }
             break;
         case IDM_FILESAVE:
@@ -494,42 +451,22 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, 
LPARAM lParam, BOOL& bH
             break;
         case IDM_FILE1:
         {
-            HBITMAP bmNew = NULL;
-            LoadDIBFromFile(&bmNew, registrySettings.strFile1, &fileTime, 
&fileSize, &fileHPPM, &fileVPPM);
-            if (bmNew != NULL)
-            {
-                UpdateApplicationProperties(bmNew, registrySettings.strFile1);
-            }
+            ConfirmSave() && DoLoadImageFile(m_hWnd, 
registrySettings.strFile1, TRUE);
             break;
         }
         case IDM_FILE2:
         {
-            HBITMAP bmNew = NULL;
-            LoadDIBFromFile(&bmNew, registrySettings.strFile2, &fileTime, 
&fileSize, &fileHPPM, &fileVPPM);
-            if (bmNew != NULL)
-            {
-                UpdateApplicationProperties(bmNew, registrySettings.strFile2);
-            }
+            ConfirmSave() && DoLoadImageFile(m_hWnd, 
registrySettings.strFile2, TRUE);
             break;
         }
         case IDM_FILE3:
         {
-            HBITMAP bmNew = NULL;
-            LoadDIBFromFile(&bmNew, registrySettings.strFile3, &fileTime, 
&fileSize, &fileHPPM, &fileVPPM);
-            if (bmNew != NULL)
-            {
-                UpdateApplicationProperties(bmNew, registrySettings.strFile3);
-            }
+            ConfirmSave() && DoLoadImageFile(m_hWnd, 
registrySettings.strFile3, TRUE);
             break;
         }
         case IDM_FILE4:
         {
-            HBITMAP bmNew = NULL;
-            LoadDIBFromFile(&bmNew, registrySettings.strFile4, &fileTime, 
&fileSize, &fileHPPM, &fileVPPM);
-            if (bmNew != NULL)
-            {
-                UpdateApplicationProperties(bmNew, registrySettings.strFile4);
-            }
+            ConfirmSave() && DoLoadImageFile(m_hWnd, 
registrySettings.strFile4, TRUE);
             break;
         }
         case IDM_EDITUNDO:
@@ -578,18 +515,17 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, 
LPARAM lParam, BOOL& bH
             break;
         }
         case IDM_EDITCOPYTO:
-            if (GetSaveFileName(&ofn) != 0)
-                SaveDIBToFile(selectionModel.GetBitmap(), ofn.lpstrFile, 
imageModel.GetDC(), NULL, NULL, fileHPPM, fileVPPM);
+            if (GetSaveFileName(&ofn))
+                SaveDIBToFile(selectionModel.GetBitmap(), ofn.lpstrFile, 
imageModel.GetDC());
             break;
         case IDM_EDITPASTEFROM:
-            if (GetOpenFileName(&ofn) != 0)
+            if (GetOpenFileName(&ofn))
             {
-                HBITMAP bmNew = NULL;
-                LoadDIBFromFile(&bmNew, ofn.lpstrFile, &fileTime, &fileSize, 
&fileHPPM, &fileVPPM);
-                if (bmNew != NULL)
+                HBITMAP hbmNew = DoLoadImageFile(m_hWnd, ofn.lpstrFile, FALSE);
+                if (hbmNew)
                 {
-                    InsertSelectionFromHBITMAP(bmNew, m_hWnd);
-                    DeleteObject(bmNew);
+                    InsertSelectionFromHBITMAP(hbmNew, m_hWnd);
+                    DeleteObject(hbmNew);
                 }
             }
             break;
diff --git a/base/applications/mspaint/winproc.h 
b/base/applications/mspaint/winproc.h
index 6b212f619b0..0c4a4e799c9 100644
--- a/base/applications/mspaint/winproc.h
+++ b/base/applications/mspaint/winproc.h
@@ -42,6 +42,6 @@ public:
 
     void alignChildrenToMainWindow();
     void saveImage(BOOL overwrite);
-    void UpdateApplicationProperties(HBITMAP bitmap, LPCTSTR newfilepathname);
     void InsertSelectionFromHBITMAP(HBITMAP bitmap, HWND window);
+    BOOL ConfirmSave();
 };

Reply via email to