⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stgreg.h

📁 These listed libraries are written in WTL. But it s really hard to mix both MFC & WTL together. Obvi
💻 H
字号:
// Copyright (c) 2006
// Sergey Klimov (kidd@ukr.net)

#ifndef __WTL_DW__STGREG_H__
#define __WTL_DW__STGREG_H__

#include "stg.h"
#include <cassert>


namespace sstate{

namespace{
REGSAM ModesMap[]={KEY_READ,KEY_WRITE,KEY_ALL_ACCESS};
}

class CStgRegistry
	: public IStorge
{
public:
	CStgRegistry(HKEY key=0)
		:m_key(key)
	{

	}

	virtual ~CStgRegistry(void)
	{
		if(m_key!=0)
			::RegCloseKey(m_key);
	}

	virtual long Create(IStorge& parent,LPCTSTR name,Modes mode)
	{
		DWORD disposition;
		return RegCreateKeyEx(static_cast<CStgRegistry&>(parent).m_key,name,0,0,
								REG_OPTION_NON_VOLATILE,ModesMap[mode],0,&m_key,&disposition);
	}

	virtual long Open(IStorge& parent,LPCTSTR name,Modes mode)
	{
		return RegOpenKeyEx(static_cast<CStgRegistry&>(parent).m_key,name,0,ModesMap[mode],&m_key);
	}

	virtual long SetBinary(LPCTSTR name,const void* data,size_t size)
	{
		assert(m_key!=0);
		DWORD type=(size==sizeof(DWORD) ? REG_DWORD : REG_BINARY);
		return ::RegSetValueEx(m_key,name,0,type,static_cast<const BYTE*>(data),size);
	}

	virtual long GetBinary(LPCTSTR name,void* data,size_t& size)
	{
		assert(m_key!=0);
		DWORD type;
		DWORD cbData=DWORD(size);
		long res=::RegQueryValueEx(m_key,name,0,&type,static_cast<LPBYTE>(data),&cbData);
		size=size_t(cbData);
		return res;
	}

	virtual long SetString(LPCTSTR name,LPCTSTR data)
	{
		assert(m_key!=0);
		assert(data);
		return ::RegSetValueEx(m_key,name,0,REG_SZ,
			reinterpret_cast<const BYTE*>(data),std::char_traits<TCHAR>::length(data)*sizeof(TCHAR));
	}

	virtual long GetString(LPCTSTR name,LPTSTR data,size_t& size)
	{
		assert(m_key!=0);
		DWORD type;
		DWORD cbData=DWORD(size);
		long res=::RegQueryValueEx(m_key,name,0,&type,reinterpret_cast<LPBYTE>(data),&cbData);
		assert( res!=ERROR_SUCCESS 
				|| (type==REG_SZ)
				|| (type==REG_EXPAND_SZ)
				);
		size=size_t(cbData);
		return res;
	}

private:
	CStgRegistry(const CStgRegistry&);
	CStgRegistry& operator=(const CStgRegistry&);
private:
	HKEY m_key;
};

}//namespace sstate

#endif // __WTL_DW__STGREG_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -