// ==========================================================================
// 					Class Specification : COXRegistryValFile
// ==========================================================================

// Header file : OXRegistryValFile.h

// Version: 9.3

// //////////////////////////////////////////////////////////////////////////

// Properties:
//	NO	Abstract class (does not have any objects)
//	YES	Derived from CMemFile

//	NO	Is a Cwnd.                     
//	YES	Two stage creation (constructor & Open())
//	NO	Has a message map
//	NO	Needs a resource (template)

//	NO	Persistent objects (saveable on disk)      
//	YES	Uses exceptions

// //////////////////////////////////////////////////////////////////////////

// Desciption :         
//  This class can be used to use MFCs file access and archive functions to
//  write to a binary registry value.

/////////////////////////////////////////////////////////////////////////////

#ifndef __OXREGISTRYVALFILE_H__
#define __OXREGISTRYVALFILE_H__

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "OXDllExt.h"


class OX_CLASS_DECL COXRegistryValFile : public CMemFile
{
	DECLARE_DYNAMIC(COXRegistryValFile)

// Data members -------------------------------------------------------------

public:

protected:
	HKEY m_key;			// stores handle to open registry key
	CString m_value;	// stores the registry value's name

private:

// Member functions ---------------------------------------------------------

public:
// Constructors
	COXRegistryValFile();
	// --- In  : 
	// --- Out : 
	// --- Returns :
	// --- Effect : Constructs the COXRegistryValFile object. Use this constructor 
	//              for two step construction. You must call the Open method to 
	//              fully initialize the COXRegistryValFile object.

	COXRegistryValFile(HKEY hkey, LPCTSTR lpszKey, LPCTSTR lpszValue);
	// --- In  : hkey : One of the following predefined reserved handle values: 
	//                  HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER,
	//                  HKEY_LOCAL_MACHINE, HKEY_USERS,
	//                  Windows NT only: HKEY_PERFORMANCE_DATA ,
	//                  Windows 95 only: HKEY_DYN_DATA 
	//           lpszKey : Points to a null-terminated string specifying the name 
	//                     of a key that this function opens or creates. This key 
	//                     must be a subkey of the key identified by the hKey 
	//                     parameter. 
	//           lpszValue : Points to a null-terminated string containing the name 
	//                       of the value to be queried.
	// --- Out : 
	// --- Returns :
	// --- Effect : Constructs the COXRegistryValFile object. Use this constructor 
	//              for single step construction. This constructor creates a fully
	//              usable open file.
	//              If the file/registry could not be opened a CFileException is
	//              thrown.

// Attributes

// Operations
	BOOL Open(HKEY hkey, LPCTSTR lpszKey, LPCTSTR lpszValue, LONG& error);
	// --- In  : hkey : One of the following predefined reserved handle values: 
	//                  HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER,
	//                  HKEY_LOCAL_MACHINE, HKEY_USERS,
	//                  Windows NT only: HKEY_PERFORMANCE_DATA ,
	//                  Windows 95 only: HKEY_DYN_DATA 
	//           lpszKey : Points to a null-terminated string specifying the name 
	//                     of a key that this function opens or creates. This key 
	//                     must be a subkey of the key identified by the hKey 
	//                     parameter. 
	//           lpszValue : Points to a null-terminated string containing the name 
	//                       of the value to be queried.
	// --- Out : error : A pointer to an existing LONG value that will receive the
	//                   status of a failed operation. If the function fails, the 
	//                   return value is either a nonzero error code defined in 
	//                   WINERROR.H. You can then use the FormatMessage function 
	//                   with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic 
	//                   description of the error. Alternatively this value may be
	//                   0, which means some other unspecified error, such as using
	//                   an existing registry value that is not binary or a low
	//                   memory condition that causes the funciton to fail.
	// --- Returns : TRUE if the file/registry could be opened, FALSE otherwise.
	//               the error contains 
	// --- Effect : Initializes the COXRegistryValFile object. Use this function 
	//              after the two-step constructor  for final initialization. This 
	//              method renders the file object fully usable.
	void Flush();
	// --- In  : 
	// --- Out : 
	// --- Returns :
	// --- Effect : Forces any data remaining in the file buffer to be written to 
	//              the file/registry. 
	//              The use of Flush does not guarantee flushing of CArchive buffers. 
	//              If you are using an archive, call CArchive::Flush first. 
	void Close();
	// --- In  : 
	// --- Out : 
	// --- Returns :
	// --- Effect : Closes the file/registry associated with this object and makes the 
	//              file/registry unavailable for reading or writing. If you have not 
	//              closed the file/registry before destroying the object, the destructor 
	//              closes it for you. 
	void Abort();
	// --- In  : 
	// --- Out : 
	// --- Returns :
	// --- Effect : Closes the file/registry associated with this object and makes the 
	//              file/registry unavailable for reading or writing. If you have not 
	//              closed the file/registry before destroying the object, the destructor 
	//              closes it for you. 
	//              When handling exceptions, COXRegistryValFile::Abort differs from 
	//              COXRegistryValFile::Close in one important way: Abort will not ASSERT 
	//              if the file/registry has not been opened or was closed previously.

// Implementation
public:
	virtual ~COXRegistryValFile();
	// --- In  : 
	// --- Out : 
	// --- Returns :
	// --- Effect : Destroys the COXRegistryValFile object. If the file/registry
	//              value is still open, any data that is not yet written is flushed
	//              to the file/registry and the file/registry is closed.
};

#endif // __OXREGISTRYVALFILE_H__
