[MSPAINT] Save paletteWindow visibility (#5167)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sat, 18 Mar 2023 08:12:28 +0000 (17:12 +0900)
committerGitHub <noreply@github.com>
Sat, 18 Mar 2023 08:12:28 +0000 (17:12 +0900)
According to my registry analysis, HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Paint\General-Bar4:Visible is the target value.
- Improve ReadDWORD helper function.
- Add ShowPalette registry setting.
- Simplify RegistrySettings::Load and RegistrySettings::Store.
CORE-18867

base/applications/mspaint/main.cpp
base/applications/mspaint/registry.cpp
base/applications/mspaint/registry.h
base/applications/mspaint/winproc.cpp

index 2df191a..75e8075 100644 (file)
@@ -200,7 +200,9 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
 
     /* creating the palette child window */
     RECT paletteWindowPos = {56, 9, 56 + 255, 9 + 32};
-    paletteWindow.Create(hwnd, paletteWindowPos, NULL, WS_CHILD | WS_VISIBLE, WS_EX_STATICEDGE);
+    paletteWindow.Create(hwnd, paletteWindowPos, NULL, WS_CHILD, WS_EX_STATICEDGE);
+    if (registrySettings.ShowPalette)
+        paletteWindow.ShowWindow(SW_SHOWNOACTIVATE);
 
     // creating the canvas
     RECT canvasWindowPos = {0, 0, 0 + 500, 0 + 500};
index 4611998..f23ce12 100644 (file)
 #include <shlobj.h>
 
 /* FUNCTIONS ********************************************************/
-static DWORD ReadDWORD(CRegKey &key, LPCTSTR lpName, DWORD &dwValue, BOOL bCheckForDef)
+static void ReadDWORD(CRegKey &key, LPCTSTR lpName, DWORD &dwValue)
 {
-    DWORD dwPrev = dwValue;
-
-    if (key.QueryDWORDValue(lpName, dwValue) != ERROR_SUCCESS || (bCheckForDef && dwValue == 0))
-        dwValue = dwPrev;
-
-    return dwPrev;
+    DWORD dwTemp;
+    if (key.QueryDWORDValue(lpName, dwTemp) == ERROR_SUCCESS)
+        dwValue = dwTemp;
 }
 
 static void ReadString(CRegKey &key, LPCTSTR lpName, CString &strValue, LPCTSTR lpDefault = TEXT(""))
@@ -75,6 +72,7 @@ void RegistrySettings::LoadPresets(INT nCmdShow)
     FontsPositionY = 0;
     ShowTextTool = TRUE;
     ShowStatusBar = TRUE;
+    ShowPalette = TRUE;
 
     LOGFONT lf;
     GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
@@ -92,28 +90,32 @@ void RegistrySettings::Load(INT nCmdShow)
 {
     LoadPresets(nCmdShow);
 
+    CRegKey paint;
+    if (paint.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint"), KEY_READ) != ERROR_SUCCESS)
+        return;
+
     CRegKey view;
-    if (view.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View"), KEY_READ) == ERROR_SUCCESS)
+    if (view.Open(paint, _T("View"), KEY_READ) == ERROR_SUCCESS)
     {
-        ReadDWORD(view, _T("BMPHeight"),     BMPHeight,     TRUE);
-        ReadDWORD(view, _T("BMPWidth"),      BMPWidth,      TRUE);
-        ReadDWORD(view, _T("GridExtent"),    GridExtent,    FALSE);
-        ReadDWORD(view, _T("NoStretching"),  NoStretching,  FALSE);
-        ReadDWORD(view, _T("ShowThumbnail"), ShowThumbnail, FALSE);
-        ReadDWORD(view, _T("SnapToGrid"),    SnapToGrid,    FALSE);
-        ReadDWORD(view, _T("ThumbHeight"),   ThumbHeight,   TRUE);
-        ReadDWORD(view, _T("ThumbWidth"),    ThumbWidth,    TRUE);
-        ReadDWORD(view, _T("ThumbXPos"),     ThumbXPos,     TRUE);
-        ReadDWORD(view, _T("ThumbYPos"),     ThumbYPos,     TRUE);
-        ReadDWORD(view, _T("UnitSetting"),   UnitSetting,   FALSE);
-        ReadDWORD(view, _T("ShowStatusBar"), ShowStatusBar, FALSE);
+        ReadDWORD(view, _T("BMPHeight"),     BMPHeight);
+        ReadDWORD(view, _T("BMPWidth"),      BMPWidth);
+        ReadDWORD(view, _T("GridExtent"),    GridExtent);
+        ReadDWORD(view, _T("NoStretching"),  NoStretching);
+        ReadDWORD(view, _T("ShowThumbnail"), ShowThumbnail);
+        ReadDWORD(view, _T("SnapToGrid"),    SnapToGrid);
+        ReadDWORD(view, _T("ThumbHeight"),   ThumbHeight);
+        ReadDWORD(view, _T("ThumbWidth"),    ThumbWidth);
+        ReadDWORD(view, _T("ThumbXPos"),     ThumbXPos);
+        ReadDWORD(view, _T("ThumbYPos"),     ThumbYPos);
+        ReadDWORD(view, _T("UnitSetting"),   UnitSetting);
+        ReadDWORD(view, _T("ShowStatusBar"), ShowStatusBar);
 
         ULONG pnBytes = sizeof(WINDOWPLACEMENT);
         view.QueryBinaryValue(_T("WindowPlacement"), &WindowPlacement, &pnBytes);
     }
 
     CRegKey files;
-    if (files.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List"), KEY_READ) == ERROR_SUCCESS)
+    if (files.Open(paint, _T("Recent File List"), KEY_READ) == ERROR_SUCCESS)
     {
         TCHAR szName[64];
         for (INT i = 0; i < MAX_RECENT_FILES; ++i)
@@ -124,19 +126,25 @@ void RegistrySettings::Load(INT nCmdShow)
     }
 
     CRegKey text;
-    if (text.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Text"), KEY_READ) == ERROR_SUCCESS)
+    if (text.Open(paint, _T("Text"), KEY_READ) == ERROR_SUCCESS)
     {
-        ReadDWORD(text, _T("Bold"),         Bold,           FALSE);
-        ReadDWORD(text, _T("Italic"),       Italic,         FALSE);
-        ReadDWORD(text, _T("Underline"),    Underline,      FALSE);
-        ReadDWORD(text, _T("CharSet"),      CharSet,        FALSE);
-        ReadDWORD(text, _T("PointSize"),    PointSize,      FALSE);
-        ReadDWORD(text, _T("PositionX"),    FontsPositionX, FALSE);
-        ReadDWORD(text, _T("PositionY"),    FontsPositionY, FALSE);
-        ReadDWORD(text, _T("ShowTextTool"), ShowTextTool,   FALSE);
+        ReadDWORD(text, _T("Bold"),         Bold);
+        ReadDWORD(text, _T("Italic"),       Italic);
+        ReadDWORD(text, _T("Underline"),    Underline);
+        ReadDWORD(text, _T("CharSet"),      CharSet);
+        ReadDWORD(text, _T("PointSize"),    PointSize);
+        ReadDWORD(text, _T("PositionX"),    FontsPositionX);
+        ReadDWORD(text, _T("PositionY"),    FontsPositionY);
+        ReadDWORD(text, _T("ShowTextTool"), ShowTextTool);
         ReadString(text, _T("TypeFaceName"), strFontName, strFontName);
     }
 
+    CRegKey bar4;
+    if (bar4.Open(paint, _T("General-Bar4"), KEY_READ) == ERROR_SUCCESS)
+    {
+        ReadDWORD(bar4, _T("Visible"), ShowPalette);
+    }
+
     // Fix the bitmap size if too large
     if (BMPWidth > 5000)
         BMPWidth = (GetSystemMetrics(SM_CXSCREEN) * 6) / 10;
@@ -146,9 +154,12 @@ void RegistrySettings::Load(INT nCmdShow)
 
 void RegistrySettings::Store()
 {
+    CRegKey paint;
+    if (paint.Create(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint")) != ERROR_SUCCESS)
+        return;
+
     CRegKey view;
-    if (view.Create(HKEY_CURRENT_USER,
-                     _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View")) == ERROR_SUCCESS)
+    if (view.Create(paint, _T("View")) == ERROR_SUCCESS)
     {
         view.SetDWORDValue(_T("BMPHeight"),     BMPHeight);
         view.SetDWORDValue(_T("BMPWidth"),      BMPWidth);
@@ -167,7 +178,7 @@ void RegistrySettings::Store()
     }
 
     CRegKey files;
-    if (files.Create(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List")) == ERROR_SUCCESS)
+    if (files.Create(paint, _T("Recent File List")) == ERROR_SUCCESS)
     {
         TCHAR szName[64];
         for (INT iFile = 0; iFile < MAX_RECENT_FILES; ++iFile)
@@ -178,7 +189,7 @@ void RegistrySettings::Store()
     }
 
     CRegKey text;
-    if (text.Create(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Text")) == ERROR_SUCCESS)
+    if (text.Create(paint, _T("Text")) == ERROR_SUCCESS)
     {
         text.SetDWORDValue(_T("Bold"),          Bold);
         text.SetDWORDValue(_T("Italic"),        Italic);
@@ -190,6 +201,12 @@ void RegistrySettings::Store()
         text.SetDWORDValue(_T("ShowTextTool"),  ShowTextTool);
         text.SetStringValue(_T("TypeFaceName"), strFontName);
     }
+
+    CRegKey bar4;
+    if (bar4.Create(paint, _T("General-Bar4")) == ERROR_SUCCESS)
+    {
+        bar4.SetDWORDValue(_T("Visible"), ShowPalette);
+    }
 }
 
 void RegistrySettings::SetMostRecentFile(LPCTSTR szPathName)
index b891d52..ce932a1 100644 (file)
@@ -41,6 +41,7 @@ public:
     DWORD FontsPositionY;
     DWORD ShowTextTool;
     DWORD ShowStatusBar;
+    DWORD ShowPalette;
 
     enum WallpaperStyle {
         TILED,
index 471853b..fc99822 100644 (file)
@@ -753,7 +753,8 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
             alignChildrenToMainWindow();
             break;
         case IDM_VIEWCOLORPALETTE:
-            paletteWindow.ShowWindow(::IsWindowVisible(paletteWindow) ? SW_HIDE : SW_SHOW);
+            registrySettings.ShowPalette = !paletteWindow.IsWindowVisible();
+            paletteWindow.ShowWindow(registrySettings.ShowPalette ? SW_SHOWNOACTIVATE : SW_HIDE);
             alignChildrenToMainWindow();
             break;
         case IDM_VIEWSTATUSBAR: