Шаг 213 - Работа с реестром CRegKey

Мы уже несколько раз касались работы с реестром, но ни разу не работали с классом CRegKey. А он на мой взгляд наиболее удачно сделан. Давайте создадим приложение на базе диалогового окна. Поместим туда элемент управления Edit и две кнопки для тестов. Для того, чтобы Вы могли работать с классом CRegKey Вам нужно подключить заголовочный файл.

#include "atlbase.h"

Для элемента редактирования я привязал переменную:

class CTestRegDlg : public CDialog
{
......
// Dialog Data
//{{AFX_DATA(CTestRegDlg)
enum { IDD = IDD_TESTREG_DIALOG };
	CString	m_Edit;
//}}AFX_DATA
......

Вот код для первой кнопки. По нажатию на нее Вы получите информацию из реестра.

void CTestRegDlg::OnButton1() 
{
CRegKey key;
LONG status = key.Open(HKEY_LOCAL_MACHINE, "Config\\0001\\Display\\Settings");
if (status == ERROR_SUCCESS)
{
	char setting[255];
	DWORD settingSize=sizeof(setting);
	status = key.QueryValue(setting, "Resolution", &settingSize);
	if (status == ERROR_SUCCESS)
	{
	     CString s(setting);
	     m_Edit=s;
	     UpdateData(FALSE);
	}
	else AfxMessageBox("Not Read Params");
}
else AfxMessageBox("Error Open Key");
key.Close(); 
}

Что здесь написано ??? Создаем объект класса CRegKey key;, открываем раздел реестра key.Open, если мы смогли это сделать status == ERROR_SUCCESS тогда мы можем получить значение параметров key.QueryValue. Классно и удобно. В этом коде мы получим разрешение экрана в элементе редактирования. В конце объект реестра нужно закрыть key.Close();.

Давайте посмотрим как можно создавать разделы:

void CTestRegDlg::OnButton2() 
{
CRegKey key;
LONG status = key.Create(HKEY_CURRENT_USER, "Software\\Step By Step");
if (status == ERROR_SUCCESS)
{
status = key.Create(key.m_hKey,"MFC Step by Step");
	if (status == ERROR_SUCCESS)
	{

	}
	else AfxMessageBox("Not Create Params");
}
else AfxMessageBox("Error Create Key");
key.Close(); 	
}

Опять создаем объект класса CRegKey key и создаем раздел реестра key.Create(), если создали if (status == ERROR_SUCCESS), тогда можем создать подраздел key.Create(). Вот так выглядит результат в реестре.

213.gif (1546 b)

Если провести совершенно общий обзор этого класса так как это шаги, а не подробности :-) То вот главные функции

CRegKey::Open 		Открыть раздел
CRegKey::Create 	Создать раздел
CRegKey::QueryValue 	Получить значение
CRegKey::SetValue	Установить значение
CRegKey::Close		Закрыть раздел 

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.08.2000