From 74571d0428a71cc8fcb00e7aa45d8855ca13ee55 Mon Sep 17 00:00:00 2001 From: Robert Dickenson Date: Tue, 16 Jul 2002 21:54:17 +0000 Subject: [PATCH] Added save and restore of calculator mode using registry. svn path=/trunk/; revision=3240 --- rosapps/calc/calc.rc | 48 ++++++++++++++++++++++++++++++--- rosapps/calc/main.c | 56 +++++++++++++++++++++++++++++++++++++- rosapps/calc/main.h | 3 +++ rosapps/calc/resource.h | 23 ++++++++++------ rosapps/calc/settings.c | 60 ++++++++++++++++++++++++++++++++++++++++- rosapps/calc/settings.h | 1 + 6 files changed, 178 insertions(+), 13 deletions(-) diff --git a/rosapps/calc/calc.rc b/rosapps/calc/calc.rc index d346a0726dc..74c83224c6b 100644 --- a/rosapps/calc/calc.rc +++ b/rosapps/calc/calc.rc @@ -15,7 +15,6 @@ ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS - ///////////////////////////////////////////////////////////////////////////// // English (Australia) resources @@ -64,13 +63,22 @@ BEGIN MENUITEM "S&tandard", ID_VIEW_STANDARD MENUITEM "&Scientific", ID_VIEW_SCIENTIFIC, CHECKED MENUITEM SEPARATOR + MENUITEM "&Hex\tF5", ID_VIEW_HEX + MENUITEM "&Decimal\tF6", ID_VIEW_DECIMAL + MENUITEM "&Octal\tF7", ID_VIEW_OCTAL + MENUITEM "&Binary\tF8", ID_VIEW_BINARY + MENUITEM SEPARATOR + MENUITEM "D&egrees\tF2", ID_VIEW_DEGREES + MENUITEM "&Radians\tF3", ID_VIEW_RADIANS + MENUITEM "&Grads\tF4", ID_VIEW_GRADS + MENUITEM SEPARATOR MENUITEM "D&igit grouping", ID_VIEW_DIGIT_GROUPING END POPUP "&Help" BEGIN MENUITEM "&Help Topics", ID_HELP_TOPICS MENUITEM SEPARATOR - MENUITEM "&About Calculator", ID_HELP_ABOUT + MENUITEM "&About Scientific Calculator", ID_HELP_ABOUT END END @@ -92,6 +100,12 @@ BEGIN "\0" END +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + #endif // APSTUDIO_INVOKED @@ -116,7 +130,7 @@ END IDD_SCIENTIFIC DIALOG DISCARDABLE 0, 0, 325, 156 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "ReactOS Calculator" +CAPTION "ReactOS Scientific Calculator" MENU IDR_CALC_SCIENTIFIC FONT 8, "MS Sans Serif" BEGIN @@ -147,6 +161,34 @@ BEGIN END #endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_ACCELERATOR ACCELERATORS DISCARDABLE +BEGIN + VK_F2, ID_VIEW_DEGREES, VIRTKEY, NOINVERT + VK_F3, ID_VIEW_RADIANS, VIRTKEY, NOINVERT + VK_F4, ID_VIEW_GRADS, VIRTKEY, NOINVERT + VK_F5, ID_VIEW_HEX, VIRTKEY, NOINVERT + VK_F6, ID_VIEW_DECIMAL, VIRTKEY, NOINVERT + VK_F7, ID_VIEW_OCTAL, VIRTKEY, NOINVERT + VK_F8, ID_VIEW_BINARY, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "ReactOS Calculator" +END + #endif // English (Australia) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/rosapps/calc/main.c b/rosapps/calc/main.c index 1a6980bf152..559c19bf301 100644 --- a/rosapps/calc/main.c +++ b/rosapps/calc/main.c @@ -32,7 +32,9 @@ // Global Variables: HINSTANCE hInst; HWND hDlgWnd; +TCHAR szTitle[MAX_LOADSTRING]; CALC_TYPES CalcType; +HACCEL hAccel; BOOL bDigitGrouping = FALSE; @@ -95,6 +97,34 @@ void OnViewDigitGrouping(void) } } +void OnViewHex(void) +{ +} + +void OnViewDecimal(void) +{ +} + +void OnViewOctal(void) +{ +} + +void OnViewBinary(void) +{ +} + +void OnViewDegrees(void) +{ +} + +void OnViewRadians(void) +{ +} + +void OnViewGrads(void) +{ +} + void OnHelpTopics(void) { WinHelp(hDlgWnd, _T("calc"), HELP_CONTENTS, 0); @@ -137,11 +167,32 @@ LRESULT CALLBACK CalcWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar CMD_MAP_ENTRY(ID_VIEW_STANDARD, OnViewStandard) CMD_MAP_ENTRY(ID_VIEW_SCIENTIFIC, OnViewScientific) CMD_MAP_ENTRY(ID_VIEW_DIGIT_GROUPING, OnViewDigitGrouping) + CMD_MAP_ENTRY(ID_VIEW_HEX, OnViewHex) + CMD_MAP_ENTRY(ID_VIEW_DECIMAL, OnViewDecimal) + CMD_MAP_ENTRY(ID_VIEW_OCTAL, OnViewOctal) + CMD_MAP_ENTRY(ID_VIEW_BINARY, OnViewBinary) + CMD_MAP_ENTRY(ID_VIEW_DEGREES, OnViewDegrees) + CMD_MAP_ENTRY(ID_VIEW_RADIANS, OnViewRadians) + CMD_MAP_ENTRY(ID_VIEW_GRADS, OnViewGrads) CMD_MAP_ENTRY(ID_HELP_TOPICS, OnHelpTopics) CMD_MAP_ENTRY(ID_HELP_ABOUT, OnHelpAbout) END_CMD_MAP(0) break; - +/* + case WM_KEYUP: + case WM_KEYDOWN: + { + MSG msg; + msg.hwnd = hDlg; + msg.message = message; + msg.wParam = wParam; + msg.lParam = lParam; +// msg.time; +// msg.pt; + if (TranslateAccelerator(hDlg, hAccel, &msg)) return 0; + } + break; + */ case WM_NOTIFY: { int idctrl; @@ -175,10 +226,13 @@ int APIENTRY WinMain(HINSTANCE hInstance, // Initialize global variables hInst = hInstance; + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); // Load our settings from the registry LoadSettings(); + hAccel = LoadAccelerators(hInstance, (LPCTSTR)IDR_ACCELERATOR); + do { CurrentCalcType = CalcType; switch (CalcType) { diff --git a/rosapps/calc/main.h b/rosapps/calc/main.h index 72ec444961b..a5cd366fa4a 100644 --- a/rosapps/calc/main.h +++ b/rosapps/calc/main.h @@ -35,10 +35,13 @@ extern "C" { #include "resource.h" +#define MAX_LOADSTRING 100 + typedef enum _CALC_TYPES { STANDARD, SCIENTIFIC, HP42S, OTHER } CALC_TYPES; extern HINSTANCE hInst; extern HWND hDlgWnd; +extern TCHAR szTitle[]; extern CALC_TYPES CalcType; diff --git a/rosapps/calc/resource.h b/rosapps/calc/resource.h index 7baf963cec3..12bce29ffd9 100644 --- a/rosapps/calc/resource.h +++ b/rosapps/calc/resource.h @@ -9,25 +9,32 @@ #define IDD_SCIENTIFIC 102 #define IDR_CALC_STANDARD 103 #define IDR_CALC_SCIENTIFIC 104 +#define IDS_APP_TITLE 105 +#define IDR_ACCELERATOR 106 #define IDC_BUTTON1 1000 #define IDC_BUTTON2 1001 #define IDC_EDIT1 1002 -//#define ID_EDIT_COPY 40001 -//#define ID_EDIT_PASTE 40002 -#define ID_EDIT_COPY 0xE122 -#define ID_EDIT_PASTE 0xE125 #define ID_VIEW_STANDARD 40003 #define ID_VIEW_SCIENTIFIC 40004 #define ID_VIEW_DIGIT_GROUPING 40005 -#define ID_HELP_TOPICS 40006 -#define ID_HELP_ABOUT 40007 +#define ID_VIEW_HEX 40006 +#define ID_VIEW_DECIMAL 40007 +#define ID_VIEW_OCTAL 40008 +#define ID_VIEW_BINARY 40009 +#define ID_VIEW_DEGREES 40010 +#define ID_VIEW_RADIANS 40011 +#define ID_VIEW_GRADS 40012 +#define ID_HELP_TOPICS 40013 +#define ID_HELP_ABOUT 40014 +#define ID_EDIT_COPY 0xE122 +#define ID_EDIT_PASTE 0xE125 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 103 -#define _APS_NEXT_COMMAND_VALUE 40008 +#define _APS_NEXT_RESOURCE_VALUE 107 +#define _APS_NEXT_COMMAND_VALUE 40015 #define _APS_NEXT_CONTROL_VALUE 1003 #define _APS_NEXT_SYMED_VALUE 101 #endif diff --git a/rosapps/calc/settings.c b/rosapps/calc/settings.c index 0ac2a88066e..c8e86337095 100644 --- a/rosapps/calc/settings.c +++ b/rosapps/calc/settings.c @@ -22,16 +22,74 @@ #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include +#include #include "main.h" #include "settings.h" +BOOL CheckResult(LONG error) +{ + if (error != ERROR_SUCCESS) { + PTSTR msg; + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, + 0, error, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PTSTR)&msg, 0, NULL)) + MessageBox(NULL, msg, szTitle, MB_ICONERROR | MB_OK); + else + MessageBox(NULL, _T("Error"), szTitle, MB_ICONERROR | MB_OK); + LocalFree(msg); + return FALSE; + } + return TRUE; +} + void LoadSettings(void) { + HKEY hKey; + DWORD dwSize; + LONG result; + char szSubKey[] = "Software\\ReactWare\\Calculator"; + + // Open the key + result = RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey); + if (!CheckResult(result)) return; + + // Read the settings + dwSize = sizeof(CALC_TYPES); + result = RegQueryValueEx(hKey, _T("Preferences"), NULL, NULL, (LPBYTE)&CalcType, &dwSize); + if (!CheckResult(result)) goto abort; + +abort: + // Close the key + RegCloseKey(hKey); } void SaveSettings(void) { -} + HKEY hKey; + LONG result; + char szSubKey1[] = "Software"; + char szSubKey2[] = "Software\\ReactWare"; + char szSubKey3[] = "Software\\ReactWare\\Calculator"; + // Open (or create) the key + hKey = NULL; + result = RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey1, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL); + if (!CheckResult(result)) return; + 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; + + // Save the settings + result = RegSetValueEx(hKey, _T("Preferences"), 0, REG_DWORD, (LPBYTE)&CalcType, sizeof(CALC_TYPES)); + if (!CheckResult(result)) goto abort; + +abort: + // Close the key + RegCloseKey(hKey); +} diff --git a/rosapps/calc/settings.h b/rosapps/calc/settings.h index c81f014a5c5..c062130c425 100644 --- a/rosapps/calc/settings.h +++ b/rosapps/calc/settings.h @@ -32,6 +32,7 @@ extern "C" { #endif // _MSC_VER > 1000 +BOOL CheckResult(LONG error); void LoadSettings(void); void SaveSettings(void);