1 /* 2 * PROJECT: PAINT for ReactOS 3 * LICENSE: LGPL 4 * FILE: base/applications/mspaint/registry.cpp 5 * PURPOSE: Offering functions dealing with registry values 6 * PROGRAMMERS: Benedikt Freisen 7 */ 8 9 /* INCLUDES *********************************************************/ 10 11 #include "precomp.h" 12 13 #include <winreg.h> 14 15 /* FUNCTIONS ********************************************************/ 16 static DWORD ReadDWORD(CRegKey &key, LPCTSTR lpName, DWORD &dwValue, BOOL bCheckForDef) 17 { 18 DWORD dwPrev = dwValue; 19 20 if (key.QueryDWORDValue(lpName, dwValue) != ERROR_SUCCESS) 21 dwValue = dwPrev; 22 23 if (bCheckForDef && dwValue == 0) 24 dwValue = dwPrev; 25 26 return dwPrev; 27 } 28 29 static void ReadFileHistory(CRegKey &key, LPCTSTR lpName, CString &strFile) 30 { 31 ULONG nChars = MAX_PATH; 32 LPTSTR szFile = strFile.GetBuffer(nChars); 33 if (key.QueryStringValue(lpName, szFile, &nChars) != ERROR_SUCCESS) 34 szFile[0] = '\0'; 35 strFile.ReleaseBuffer(); 36 } 37 38 void RegistrySettings::SetWallpaper(LPCTSTR szFileName, RegistrySettings::WallpaperStyle style) 39 { 40 CRegKey desktop; 41 if (desktop.Open(HKEY_CURRENT_USER, _T("Control Panel\\Desktop")) == ERROR_SUCCESS) 42 { 43 desktop.SetStringValue(_T("Wallpaper"), szFileName); 44 45 desktop.SetStringValue(_T("WallpaperStyle"), (style == RegistrySettings::STRETCHED) ? _T("2") : _T("0")); 46 desktop.SetStringValue(_T("TileWallpaper"), (style == RegistrySettings::TILED) ? _T("1") : _T("0")); 47 } 48 49 SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) szFileName, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); 50 } 51 52 void RegistrySettings::LoadPresets() 53 { 54 BMPHeight = 300; 55 BMPWidth = 400; 56 GridExtent = 1; 57 NoStretching = 0; 58 ShowThumbnail = 0; 59 SnapToGrid = 0; 60 ThumbHeight = 100; 61 ThumbWidth = 120; 62 ThumbXPos = 180; 63 ThumbYPos = 200; 64 UnitSetting = 0; 65 const WINDOWPLACEMENT DefaultWindowPlacement = { 66 sizeof(WINDOWPLACEMENT), 67 0, 68 SW_SHOWNORMAL, 69 {0, 0}, 70 {-1, -1}, 71 {100, 100, 700, 550} 72 }; 73 WindowPlacement = DefaultWindowPlacement; 74 } 75 76 void RegistrySettings::Load() 77 { 78 LoadPresets(); 79 80 CRegKey view; 81 if (view.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View"), KEY_READ) == ERROR_SUCCESS) 82 { 83 ReadDWORD(view, _T("BMPHeight"), BMPHeight, TRUE); 84 ReadDWORD(view, _T("BMPWidth"), BMPWidth, TRUE); 85 ReadDWORD(view, _T("GridExtent"), GridExtent, FALSE); 86 ReadDWORD(view, _T("NoStretching"), NoStretching, FALSE); 87 ReadDWORD(view, _T("ShowThumbnail"), ShowThumbnail, FALSE); 88 ReadDWORD(view, _T("SnapToGrid"), SnapToGrid, FALSE); 89 ReadDWORD(view, _T("ThumbHeight"), ThumbHeight, TRUE); 90 ReadDWORD(view, _T("ThumbWidth"), ThumbWidth, TRUE); 91 ReadDWORD(view, _T("ThumbXPos"), ThumbXPos, TRUE); 92 ReadDWORD(view, _T("ThumbYPos"), ThumbYPos, TRUE); 93 ReadDWORD(view, _T("UnitSetting"), UnitSetting, FALSE); 94 95 ULONG pnBytes = sizeof(WINDOWPLACEMENT); 96 view.QueryBinaryValue(_T("WindowPlacement"), &WindowPlacement, &pnBytes); 97 } 98 99 CRegKey files; 100 if (files.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List"), KEY_READ) == ERROR_SUCCESS) 101 { 102 ReadFileHistory(files, _T("File1"), strFile1); 103 ReadFileHistory(files, _T("File2"), strFile2); 104 ReadFileHistory(files, _T("File3"), strFile3); 105 ReadFileHistory(files, _T("File4"), strFile4); 106 } 107 } 108 109 void RegistrySettings::Store() 110 { 111 CRegKey view; 112 if (view.Create(HKEY_CURRENT_USER, 113 _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View")) == ERROR_SUCCESS) 114 { 115 view.SetDWORDValue(_T("BMPHeight"), BMPHeight); 116 view.SetDWORDValue(_T("BMPWidth"), BMPWidth); 117 view.SetDWORDValue(_T("GridExtent"), GridExtent); 118 view.SetDWORDValue(_T("NoStretching"), NoStretching); 119 view.SetDWORDValue(_T("ShowThumbnail"), ShowThumbnail); 120 view.SetDWORDValue(_T("SnapToGrid"), SnapToGrid); 121 view.SetDWORDValue(_T("ThumbHeight"), ThumbHeight); 122 view.SetDWORDValue(_T("ThumbWidth"), ThumbWidth); 123 view.SetDWORDValue(_T("ThumbXPos"), ThumbXPos); 124 view.SetDWORDValue(_T("ThumbYPos"), ThumbYPos); 125 view.SetDWORDValue(_T("UnitSetting"), UnitSetting); 126 127 view.SetBinaryValue(_T("WindowPlacement"), &WindowPlacement, sizeof(WINDOWPLACEMENT)); 128 } 129 130 CRegKey files; 131 if (files.Create(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List")) == ERROR_SUCCESS) 132 { 133 if (!strFile1.IsEmpty()) 134 files.SetStringValue(_T("File1"), strFile1); 135 if (!strFile2.IsEmpty()) 136 files.SetStringValue(_T("File2"), strFile2); 137 if (!strFile3.IsEmpty()) 138 files.SetStringValue(_T("File3"), strFile3); 139 if (!strFile4.IsEmpty()) 140 files.SetStringValue(_T("File4"), strFile4); 141 } 142 } 143 144 void RegistrySettings::SetMostRecentFile(LPCTSTR szPathName) 145 { 146 if (strFile1 == szPathName) 147 { 148 // do nothing 149 } 150 else if (strFile2 == szPathName) 151 { 152 CString strTemp = strFile2; 153 strFile2 = strFile1; 154 strFile1 = strTemp; 155 } 156 else if (strFile3 == szPathName) 157 { 158 CString strTemp = strFile3; 159 strFile3 = strFile2; 160 strFile2 = strFile1; 161 strFile1 = strTemp; 162 } 163 else if (strFile4 == szPathName) 164 { 165 CString strTemp = strFile4; 166 strFile4 = strFile3; 167 strFile3 = strFile2; 168 strFile2 = strFile1; 169 strFile1 = strTemp; 170 } 171 else 172 { 173 strFile4 = strFile3; 174 strFile3 = strFile2; 175 strFile2 = strFile1; 176 strFile1 = szPathName; 177 } 178 } 179