На этом шаге мы рассмотрим алгоритм сохранения данных о пользователе в реестре.
На этом шаге мы научимся применять MFC-функции управления профилем пользователя для сохранения
в разделе HKEY_CURRENT_USER\Software\ MyCompany\MyApp параметров созданного на предыдущем шаге
приложения МуАрр. Будем ботать с диалоговым окном Connect to Data Source.
В нем есть флажок, пометив который Вы заставите приложение подключаться к источнику данных при запуске.
Перечислим те действия, которые должны выполняться при установке флажка Connect at Application Startup.
- Установка флажка Connect at Application Startup.
- Сохраните в реестре имя источника данных (Data Source Name) идентификатор пользователя (User ID), уровень доступа и
состояние флажка Attempt to connect at application startup. Эти параметры будут сохранены щелчком кнопки Connect. - Воспользуйтесь сохраненными в реестре параметрами для инициализации элементов управления диалогового окна
Connect to Data Source. - Измените функцию InitInstance() так, чтобы она определяла состояние флажка
Attempt to connect at application startup и, если он установлен, открывала диалоговое окно Connect to Data Source,
позволяя пользователю подключиться к базе данных.
Реализуем каждое из указанных действий.
- Сохранение параметров диалогового окна.
- Найдите в проекте МуАрр функцию CMyAppApp::OnDataConnect().
- В следующем операторе условного перехода:
if (aCD.DoModal() == IDOK)
сразу после вызова AfxMessageBox() добавьте такие строки:
WriteProfileString("Settings", "User ID", aCD.m_strUserID); WriteProfileInt("Settings", "Access Level", aCD.m_nAccess); WriteProfileInt("Settings", "Connect at Startup", aCD.m_bConnect ? 1 : 0); WriteProfileString("Settings", "DSN", m_strDSN);
где m_strDSN - переменная-член класса СМуАррАрр, значение которой задается в функции
CConnectDialog::OnOK().
Рис.1. Измененная функция OnDataConnect() - Инициализация элементов управления диалогового окна Connect Data Source.
- Удалите следующие строки, находящиеся в верхней части функции CMyAppApp::OnDataConnect():
aCD.m_nAccess = 1; aCD.m_bConnect = TRUE;
- Замените удаленные строки таким текстом:
aCD.m_nAccess = GetProfileInt("Settings", "Access Level", 1); aCD.m_strUserID = GetProfileString("Settings", "User ID", ""); aCD.m_bConnect = BOOL(GetProfileInt("Settings", "Connect at Startup", 0));
Полученная таким образом функция OnDataConnect() должна выглядеть так:
void СМуАррАрр::0nDataConnect() { CConnectDialog aCD; aCD.m_nAccess = GetProfileInt("Settings", "Access Level", 1); aCD.m_strUserID = GetProfileString("Settings", "User ID", ""); aCD.m_bConnect = BOOL(GetProfileInt("Settings", "Connect at Startup", 0)); if(aCD.DoModal() == IDOK) { CString strMessage; strMessage.Format("User %s logged in", aCD.m_strUserID); AfxMessageBox(strMessage); WriteProfileString("Settings", "User ID", aCD.m_strUserID); WriteProfileInt("Settings", "Access Level", aCD.m_nAccess); WriteProfileInt("Settings", "Connect at Startup", aCD.m_bConnect ? 1 : 0); WriteProfileString("Settings", "DSN", m_strDSN); } }
Рис.2. Измененная функция OnDataConnect() - Найдите функцию CConnectDialog::OnInitDialog(). Добавьте код, который выделен полужирным
начертанием:BOOL CConnectDialog::OnInitDialog() { CDialog::OnInitDialog(); m_lbDSN. AddString( "Accounts"); m_lbDSN. AddString("Admin"); m_lbDSN.AddString( "Management"); CMyAppApp * pApp = dynamic_cast<CMyAppApp *>(AfxGetApp()); ASSERT_VALID(pApp); CString strDSN = pApp->GetProfileString("Settings", "DSN", ""); int index = m_lbDSN.FindStringExact(-1, strDSN); m_lbDSN.SetCurSel(index); OnUpdateUserid(); return TRUE; // Возвращаем TRUE при условии, что не нужно устанавливать // фокус на // управляющем элементе EXCEPTION - при этом // OCX Property Pages возвратит FALSE) }
Рис.3. Измененная функция OnInitDialog()
Этот код извлекает из профиля имя источника данных и выбирает его в раскрывающемся списке. - Открытие диалогового окна Connect to Data Source (если это необходимо).
- Найдите тело функции CMyAppApp::InitInstance() и добавьте следующий код непосредственно перед
оператором return в ее конце:if (GetProfileInt("Settings", "Connect at Startup", 0)) OnDataConnect();
- Соберите и запустите приложение МуАрр.
- Выберите пункт Connect из меню Data и заполните диалоговое окно Connect to Data Source,
убедившись, что флажок Attempt to connect at application startup установлен. - Сохраните параметры, щелкнув Connect.
- Закройте и перезапустите приложение, чтобы убедиться, что окно Attempt to connect at application startup открывается
при запуске автоматически, а его параметры восстанавливаются корректно. Кроме того, Вы можете открыть редактор реестра
и проверить правильность создания профиля.
Рис.4. Размещение сохраненных данных в реестре
Текст измененного приложения можно взять здесь (146,8 Кб).
На следующем шаге мы перечислим функции работы с реестром в Win32 API.