It was inspired by the registry API wrapper class by
Shane Martin
which you can find
here
at codeguru.
Environment: VC6 SP3, NT4 SP5
I first used the registry class provided by Shane. But – for my purposes – I needed other functionality. So I wrote my own code.
This class now provides the capability of reading and writing any kind of object which supports archive operation (template based).
Some of these are:
- BYTE
- WORD
- int
- LONG
- DWORD
- float
- double
- SIZE and CSize
- CString
- POINT and CPoint
- RECT and CRect
- CTime and CTimeSpan
It further provides the capability to serialize object structures to the registry using the objects “Serialize(CArchive& ar)” function.
(Be sure that these structures are smaller than 2048 bytes – otherwise an *.ini file or something would be better.)
Another feature is that you can save and resore the settings of the application window(s) by simply passing a pointer to the “Read” or “Write” Function.
Usage is very simple…
CRegistry reg; CString sRegPath("YourApp\Path\Settings"); CString sString("I am a String"); CString sStringBin("I am a binary String"); int nValue = -1234567890; double dValue = -1234567890.1234; DWORD dwValue = 1234567890; DWORD dwValueBin = 1234567890; CRect rcWnd; CYourObject object; // Fill the rcWnd... GetWindowRect(rcWnd); // Check the key... if (!reg.VerifyKey(HKEY_CURRENT_USER, sRegPath)) reg.CreateKey(HKEY_CURRENT_USER, sRegPath); // Open... reg.Open(HKEY_CURRENT_USER, strRegPath); // Writing/Reading as "String"... reg.WriteString("CString", sString); reg.ReadString("CString", sString); // Writing/Reading String as "binary" (template function)... reg.WriteType("CStringBin", sStringBin); reg.ReadType("CStringBin", sStringBin); // Writing/Reading int as "binary" (template function)... reg.WriteType("int", nValue); reg.ReadType("int", nValue); // Writing/Reading double as "binary" (template function)... reg.WriteType("double", dValue); reg.ReadType("double", dValue); // Writing/Reading DWORD... reg.WriteDWORD("DWORD", dwValue); reg.ReadDWORD("DWORD", dwValue); // Writing/Reading DWORD as "binary" (template function)... reg.WriteType("DWORDBin", dwValueBin); reg.ReadType("DWORDBin", dwValueBin); // Writing/Reading CRect as "binary" (template function)... reg.WriteType("CRect", rcWnd); reg.ReadType("CRect", rcWnd); // Writing/Reading Window (WINDOWPLACEMENT)... reg.Write("Wnd", this); reg.Read("Wnd", this); // Writing/Reading CObject... reg.Write("Object", object); reg.Read("Object", object); // Not necessary (object is automatically closed at destruction) reg.Close();
For further explanation look at the sample application.
If you have any questions or some ideas how to improve this, bugs, errors, etc. feel free to send me a mail.