Updated with an improvement to the registry save/restore module.

svn path=/trunk/; revision=3274
This commit is contained in:
Robert Dickenson 2002-07-20 16:35:34 +00:00
parent f4629b5599
commit 51278afbc0
4 changed files with 98 additions and 23 deletions

View file

@ -1,3 +1,6 @@
#include <defines.h>
#include <reactos/resource.h>
//Microsoft Developer Studio generated resource script. //Microsoft Developer Studio generated resource script.
// //
#include "resource.h" #include "resource.h"
@ -167,6 +170,7 @@ END
// Accelerator // Accelerator
// //
#ifdef _MSC_VER
IDR_ACCELERATOR ACCELERATORS DISCARDABLE IDR_ACCELERATOR ACCELERATORS DISCARDABLE
BEGIN BEGIN
VK_F2, ID_VIEW_DEGREES, VIRTKEY, NOINVERT VK_F2, ID_VIEW_DEGREES, VIRTKEY, NOINVERT
@ -177,6 +181,50 @@ BEGIN
VK_F7, ID_VIEW_OCTAL, VIRTKEY, NOINVERT VK_F7, ID_VIEW_OCTAL, VIRTKEY, NOINVERT
VK_F8, ID_VIEW_BINARY, VIRTKEY, NOINVERT VK_F8, ID_VIEW_BINARY, VIRTKEY, NOINVERT
END END
#endif // _MSC_VER
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "Absolutely no warranties whatsoever - Use at your own risk\0"
VALUE "CompanyName", RES_STR_COMPANY_NAME
VALUE "FileDescription", "ReactOS Calculator by Robert Dickenson\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "calc\0"
VALUE "LegalCopyright", "Copyright © 2002 Robert Dickenson\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "calc.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", RES_STR_PRODUCT_NAME
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
VALUE "SpecialBuild", "Non-versioned Development Beta Release\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0xc09, 1200
END
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -187,6 +235,9 @@ END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
BEGIN BEGIN
IDS_APP_TITLE "ReactOS Calculator" IDS_APP_TITLE "ReactOS Calculator"
IDS_APP_REG_KEY "\\Calculator"
IDS_APP_REG_PATH RES_STR_ROSAPP_REGISTRY_ROOT
END END
#endif // English (Australia) resources #endif // English (Australia) resources

View file

@ -38,7 +38,7 @@ LIBS = -lgdi32 -luser32 -lkernel32 -lcomctl32
all: $(TARGET).exe all: $(TARGET).exe
$(TARGET).res: $(TARGET).rc #$(TARGET).res: $(TARGET).rc
$(TARGET).exe: $(OBJS) $(TARGET).coff $(TARGET).exe: $(OBJS) $(TARGET).coff
$(CC) -Wl,--subsystem,windows -o $(TARGET).exe $(OBJS) $(TARGET).coff $(LIBS) $(CC) -Wl,--subsystem,windows -o $(TARGET).exe $(OBJS) $(TARGET).coff $(LIBS)

View file

@ -11,6 +11,10 @@
#define IDR_CALC_SCIENTIFIC 104 #define IDR_CALC_SCIENTIFIC 104
#define IDS_APP_TITLE 105 #define IDS_APP_TITLE 105
#define IDR_ACCELERATOR 106 #define IDR_ACCELERATOR 106
#define IDS_APP_REG_KEY 107
#define IDS_APP_REG_PATH 108
#define IDC_BUTTON1 1000 #define IDC_BUTTON1 1000
#define IDC_BUTTON2 1001 #define IDC_BUTTON2 1001
#define IDC_EDIT1 1002 #define IDC_EDIT1 1002
@ -33,7 +37,7 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 107 #define _APS_NEXT_RESOURCE_VALUE 109
#define _APS_NEXT_COMMAND_VALUE 40015 #define _APS_NEXT_COMMAND_VALUE 40015
#define _APS_NEXT_CONTROL_VALUE 1003 #define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101

View file

@ -23,12 +23,14 @@
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h> #include <windows.h>
#include <tchar.h> #include <tchar.h>
#include <assert.h>
#define ASSERT assert
#include "main.h" #include "main.h"
#include "settings.h" #include "settings.h"
BOOL CheckResult(LONG error) static BOOL CheckResult(LONG error)
{ {
if (error != ERROR_SUCCESS) { if (error != ERROR_SUCCESS) {
PTSTR msg; PTSTR msg;
@ -43,46 +45,64 @@ BOOL CheckResult(LONG error)
return TRUE; return TRUE;
} }
static BOOL CreateRegistryPath(LPTSTR szRegPath, int nMaxLen)
{
LPTSTR pRegPath = szRegPath;
// Initialise registry path string from application PATH and KEY resources
int nLength = LoadString(hInst, IDS_APP_REG_PATH, szRegPath, nMaxLen);
nLength += LoadString(hInst, IDS_APP_REG_KEY, szRegPath + nLength, nMaxLen - nLength);
ASSERT(nLength < (nMaxLen - 1));
szRegPath[nLength] = _T('\\');
// walk the registry path string creating the tree if required
while (pRegPath = _tcschr(pRegPath, _T('\\'))) {
LONG result;
HKEY hKey = NULL;
*pRegPath = _T('\0');
// Open (or create) the key
result = RegCreateKeyEx(HKEY_CURRENT_USER, szRegPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
if (!CheckResult(result)) return FALSE;
RegCloseKey(hKey);
*pRegPath = _T('\\');
pRegPath = pRegPath + 1;
}
szRegPath[nLength] = _T('\0');
return TRUE;
}
void LoadSettings(void) void LoadSettings(void)
{ {
TCHAR szRegPath[MAX_LOADSTRING];
HKEY hKey; HKEY hKey;
DWORD dwSize; DWORD dwSize;
LONG result; LONG result;
char szSubKey[] = "Software\\ReactWare\\Calculator";
if (!CreateRegistryPath(szRegPath, MAX_LOADSTRING)) return;
// Open the key // Open the key
result = RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey); result = RegOpenKeyEx(HKEY_CURRENT_USER, szRegPath, 0, KEY_READ, &hKey);
if (!CheckResult(result)) return; if (!CheckResult(result)) return;
// Read the settings // Read the settings
dwSize = sizeof(CALC_TYPES); dwSize = sizeof(CALC_TYPES);
result = RegQueryValueEx(hKey, _T("Preferences"), NULL, NULL, (LPBYTE)&CalcType, &dwSize); result = RegQueryValueEx(hKey, _T("Preferences"), NULL, NULL, (LPBYTE)&CalcType, &dwSize);
if (!CheckResult(result)) goto abort;
abort:
// Close the key // Close the key
RegCloseKey(hKey); RegCloseKey(hKey);
} }
void SaveSettings(void) void SaveSettings(void)
{ {
HKEY hKey; TCHAR szRegPath[MAX_LOADSTRING];
HKEY hKey = NULL;
LONG result; LONG result;
char szSubKey1[] = "Software";
char szSubKey2[] = "Software\\ReactWare";
char szSubKey3[] = "Software\\ReactWare\\Calculator";
// Open (or create) the key if (!CreateRegistryPath(szRegPath, MAX_LOADSTRING)) return;
hKey = NULL;
result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey1, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL); // Open the key
if (!CheckResult(result)) return; result = RegOpenKeyEx(HKEY_CURRENT_USER, szRegPath, 0, KEY_WRITE, &hKey);
RegCloseKey(hKey);
hKey = NULL;
result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey2, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
if (!CheckResult(result)) return;
RegCloseKey(hKey);
hKey = NULL;
result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey3, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
if (!CheckResult(result)) return; if (!CheckResult(result)) return;
// Save the settings // Save the settings