При работе с диалоговым окном возникает необходимость сохранять и восстанавливать данные полученные в результате действия программы.
Для этого мы используем стандартный блок диалога открытия и сохранения файлов.
Библиотека MFC содержит класс CFileDialog который отвечает за создание и работоспособность двух блоков диалога:
- первого позволяющего выбрать файл для его открытия
- второго позволяющего выбрать местоположения и имени файла при его сохранении.

Если не нужны дополнительные настройки, можно прямо использовать этот класс.При необходимости выполняются настройки элементов управления , заполняя поля структуры OPENFILENAME .

Сгенерируем начальную заготовку при помощи компилятора Visual 7. Если использывать готовый исходник, то необходимо учесть, что он настроен на применение русского интерфейса.
Проект назовём "blokstand". Поместим в диалоговом окне три строки edit , для наглядности, при помощи статического текста, между строками введём знаки + и =, а также три кнопки:
"Открыть","Сохранить" и "Результат". Кнопки "Ок" и "Отмена" полученные в результате действия компилятора можно оставить. Ещё потребуется занести три переменные, которые в данном проекте на-зываем m_x1, m_x2, m_x3 и определяем для них тип как double.
Наша программка должна складывать два числа, сохранять результат в файл, для последующего открытия.

Вот фрагмент кода который необходимо внести в файл blokstandDlg.cpp:

void CblokstandDlg::OnBnClickedButton3()
{

// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_x3=m_x1+m_x2;
UpdateData(FALSE);
}

void CblokstandDlg::OnBnClickedButton1()
{

// TODO: Add your control notification handler code here
// создание объекта и открытие файла для чтения

CFileDialog blokstandDlg(TRUE);
//настроим блок диалога открытия файлов под себя

CString str("Файлы данных (*.dat)"); str += (TCHAR)NULL;
str += "*.dat"; str += (TCHAR)NULL;
blokstandDlg.m_ofn.lpstrFilter = str;
blokstandDlg.m_ofn.nFilterIndex = 1;
TCHAR strName[_MAX_PATH];
strName[0] = (TCHAR)NULL;
blokstandDlg.m_ofn.lpstrFile = strName;
if (blokstandDlg.DoModal() == IDOK)
{

CStdioFile file(blokstandDlg.GetPathName(),CFile::modeRead|CFile::typeBinary); //создать файл
CArchive ar(&file, CArchive::load);//на его основе создать объект архив
ar >> m_x1;//извлечь данные из ранее созданного файла
ar >> m_x2;
ar >> m_x3;
UpdateData(FALSE);

ar.Close();//закрыть архив
file.Close();//закрыть файл

}
}

void CblokstandDlg::OnBnClickedButton2()
{

// TODO: Add your control notification handler code here
CFileDialog blokstandDlg(FALSE);
CString ext("dat");
blokstandDlg.m_ofn.lpstrDefExt = ext;
CString str("Файлы данных (*.dat)"); str += (TCHAR)NULL;
str += "*.dat"; str += (TCHAR)NULL;
blokstandDlg.m_ofn.lpstrFilter = str;
blokstandDlg.m_ofn.nFilterIndex = 1;
TCHAR strName[_MAX_PATH];
strName[0] = (TCHAR)NULL;
blokstandDlg.m_ofn.lpstrFile = strName;
if (blokstandDlg.DoModal() == IDOK)
{

CStdioFile file(blokstandDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

// создать файл

CArchive ar(&file, CArchive::store); // на основе него обьект архив

ar << m_x1; // записать в архив значения переменных которые
ar << m_x2; // были занесены пользователем и появились в результате
ar << m_x3; // и появились в результате вычисления
ar.Close(); // закрыть архив
file.Close(); // закрыть файл
}

}

загрузить исходник

© Goodluck Дмитрий (Cema)

От dmitry

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *