ReactOS 0.4.16-dev-109-gf4cb10f
settings.c File Reference
#include "regedit.h"
Include dependency graph for settings.c:

Go to the source code of this file.

Classes

struct  RegistryBinaryConfig
 

Functions

DECLSPEC_IMPORT ULONG WINAPIV DbgPrint (PCCH Format,...)
 
void LoadSettings (void)
 
void SaveSettings (void)
 

Variables

const WCHAR g_szGeneralRegKey [] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit"
 

Function Documentation

◆ DbgPrint()

DECLSPEC_IMPORT ULONG WINAPIV DbgPrint ( PCCH  Format,
  ... 
)

Definition at line 428 of file debug.c.

429{
430 return 0;
431}

◆ LoadSettings()

void LoadSettings ( void  )

Definition at line 48 of file settings.c.

49{
50 HKEY hKey = NULL;
51 WCHAR szBuffer[MAX_PATH];
52
54 {
56 DWORD iBufferSize = sizeof(tConfig);
57 BOOL bVisible = FALSE;
58
59 if (RegQueryValueExW(hKey, L"View", NULL, NULL, (LPBYTE)&tConfig, &iBufferSize) == ERROR_SUCCESS)
60 {
61 if (iBufferSize == sizeof(tConfig))
62 {
63 RECT rcTemp;
64
65 /* Update status bar settings */
67 ShowWindow(hStatusBar, (tConfig.StatusBarVisible ? SW_SHOW : SW_HIDE));
68
69 /* Update listview column width */
70 (void)ListView_SetColumnWidth(g_pChildWnd->hListWnd, 0, tConfig.NameColumnSize);
71 (void)ListView_SetColumnWidth(g_pChildWnd->hListWnd, 1, tConfig.TypeColumnSize);
72 (void)ListView_SetColumnWidth(g_pChildWnd->hListWnd, 2, tConfig.DataColumnSize);
73
74 /* Update treeview (splitter) */
75 GetClientRect(hFrameWnd, &rcTemp);
76 g_pChildWnd->nSplitPos = tConfig.TreeViewSize;
77 ResizeWnd(rcTemp.right, rcTemp.bottom);
78
79 /* Apply program window settings */
80 tConfig.tPlacement.length = sizeof(WINDOWPLACEMENT);
81 bVisible = SetWindowPlacement(hFrameWnd, &tConfig.tPlacement);
82 }
83 }
84
85 /* In case we fail to restore the window, or open the key, show normal */
86 if (!bVisible)
88
89 /* Restore key position */
90 if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, L"LastKey", szBuffer, ARRAY_SIZE(szBuffer)) == ERROR_SUCCESS)
91 {
93 }
94
96 }
97 else
98 {
99 /* Failed to open key, show normal */
101 }
102}
LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
Definition: settings.c:19
const TCHAR g_szGeneralRegKey[]
Definition: settings.c:16
ChildWnd * g_pChildWnd
Definition: childwnd.c:13
HWND hFrameWnd
Definition: main.c:22
HMENU hMenuFrame
Definition: main.c:24
HWND hStatusBar
Definition: main.c:23
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
Definition: treeview.c:766
#define ARRAY_SIZE(A)
Definition: main.h:20
#define ID_VIEW_STATUSBAR
Definition: resource.h:40
#define ID_VIEW_MENU
Definition: resource.h:12
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define MAX_PATH
Definition: compat.h:34
VOID ResizeWnd(INT cx, INT cy)
Definition: eventvwr.c:3267
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define L(x)
Definition: ntvdm.h:50
#define ListView_SetColumnWidth(hwnd, iCol, cx)
Definition: commctrl.h:2653
int nSplitPos
Definition: main.h:56
HWND hTreeWnd
Definition: main.h:50
HWND hListWnd
Definition: main.h:51
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define SW_SHOWNORMAL
Definition: winuser.h:773
#define SW_HIDE
Definition: winuser.h:771
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define MF_CHECKED
Definition: winuser.h:132
#define MF_UNCHECKED
Definition: winuser.h:204
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define SW_SHOW
Definition: winuser.h:778
struct _WINDOWPLACEMENT WINDOWPLACEMENT
BOOL WINAPI SetWindowPlacement(_In_ HWND hWnd, _In_ const WINDOWPLACEMENT *)
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ SaveSettings()

void SaveSettings ( void  )

Definition at line 104 of file settings.c.

105{
106 HKEY hKey = NULL;
107
109 {
110 RegistryBinaryConfig tConfig;
111 DWORD iBufferSize = sizeof(tConfig);
112 WCHAR szBuffer[MAX_PATH]; /* FIXME: a complete registry path can be longer than that */
113 LPCWSTR keyPath, rootName;
114 HKEY hRootKey;
115
116 /* Save key position */
117 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
118 rootName = get_root_key_name(hRootKey);
119
120 /* Load "My Computer" string and complete it */
121 if (LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, ARRAY_SIZE(szBuffer)) &&
122 SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), L"\\")) &&
123 SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), rootName)) &&
124 SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), L"\\")))
125 {
126 HRESULT hr = S_OK;
127 if (keyPath)
128 hr = StringCbCatW(szBuffer, sizeof(szBuffer), keyPath);
129 if (SUCCEEDED(hr))
130 RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuffer, (DWORD)wcslen(szBuffer) * sizeof(WCHAR));
131 else
132 DbgPrint("err: (%s:%d): Buffer not big enough for '%S + %S'\n", __FILE__, __LINE__, rootName, keyPath);
133 }
134 else
135 {
136 DbgPrint("err: (%s:%d): Buffer not big enough for '%S'\n", __FILE__, __LINE__, rootName);
137 }
138
139 /* Get statusbar settings */
141
142 /* Get splitter position */
144
145 /* Get list view column width*/
149
150 /* Get program window settings */
151 tConfig.tPlacement.length = sizeof(WINDOWPLACEMENT);
153
154 /* Save all the data */
155 RegSetValueExW(hKey, L"View", 0, REG_BINARY, (LPBYTE)&tConfig, iBufferSize);
156
158 }
159}
LPCWSTR get_root_key_name(HKEY hRootKey)
Definition: childwnd.c:76
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:73
#define IDS_MY_COMPUTER
Definition: resource.h:82
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1201
HINSTANCE hInst
Definition: dxdiag.c:13
#define DbgPrint
Definition: hal.h:12
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define REG_SZ
Definition: layer.c:22
#define REG_BINARY
Definition: nt_native.h:1496
#define ListView_GetColumnWidth(hwnd, iCol)
Definition: commctrl.h:2647
HRESULT hr
Definition: shlfolder.c:183
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
WINDOWPLACEMENT tPlacement
Definition: settings.c:40
UINT WINAPI GetMenuState(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Variable Documentation

◆ g_szGeneralRegKey

const WCHAR g_szGeneralRegKey[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit"

Definition at line 11 of file settings.c.