На этом шаге мы рассмотрим алгоритм сохранения  данных о пользователе в реестре.
На этом шаге мы научимся применять 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.