На этом шаге мы рассмотрим алгоритм сохранения данных о пользователе в реестре.
На этом шаге мы научимся применять MFC-функции управления профилем пользователя для сохранения в разделе HKEY_CURRENT_USER\Software\ MyCompany\MyApp параметров созданного на предыдущем шаге приложения МуАрр. Будем ботать с диалоговым окном Connect to Data Source. В нем есть флажок, пометив который Вы заставите приложение подключаться к источнику данных при запуске.
Перечислим те действия, которые должны выполняться при установке флажка Connect at Application Startup.
Реализуем каждое из указанных действий.
if (aCD.DoModal() == IDOK)
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);
Рис.1. Измененная функция 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));
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()
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()
Этот код извлекает из профиля имя источника данных и выбирает его в раскрывающемся списке.
if (GetProfileInt("Settings", "Connect at Startup", 0))
OnDataConnect();
Рис.4. Размещение сохраненных данных в реестре
Текст измененного приложения можно взять здесь (146,8 Кб).
На следующем шаге мы перечислим функции работы с реестром в Win32 API.