MFC - Serialização
Serializationé o processo de gravar ou ler um objeto de ou para um meio de armazenamento persistente, como um arquivo de disco. A serialização é ideal para situações em que se deseja manter o estado dos dados estruturados (como classes ou estruturas C ++) durante ou após a execução de um programa.
Ao executar o processamento de arquivo, os valores são tipicamente de tipos primitivos (char, short, int, float ou double). Da mesma forma, podemos salvar individualmente muitos valores, um de cada vez. Essa técnica não inclui um objeto criado a partir (como uma variável de) uma classe.
A biblioteca MFC possui um alto nível de suporte para serialização. Ele começa com a classe CObject que é o ancestral da maioria das classes MFC, que é equipada com uma função de membro Serialize ().
Vejamos um exemplo simples, criando um novo projeto MFC.
Step 1 - Remova a linha TODO e projete sua caixa de diálogo conforme mostrado no instantâneo a seguir.
Step 2- Adicione variáveis de valor para todos os controles de edição. Para Emp ID e Idade mencionados, o tipo de valor é um número inteiro, conforme mostrado no instantâneo a seguir.
Step 3 - Adicione o manipulador de eventos para ambos os botões.
Step 4- Vamos agora adicionar uma classe Employee simples, que precisamos serializar. Aqui está a declaração da classe Employee no arquivo de cabeçalho.
class CEmployee : public CObject {
public:
int empID;
CString empName;
int age;
CEmployee(void);
~CEmployee(void);
private:
public:
void Serialize(CArchive& ar);
DECLARE_SERIAL(CEmployee);
};
Step 5 - Aqui está a definição da classe Employee no arquivo de origem (* .cpp).
IMPLEMENT_SERIAL(CEmployee, CObject, 0)
CEmployee::CEmployee(void) {
}
CEmployee::~CEmployee(void) {
}
void CEmployee::Serialize(CArchive& ar) {
CObject::Serialize(ar);
if (ar.IsStoring())
ar << empID << empName << age;
else
ar >> empID >> empName >> age;
}
Step 6 - Aqui está a implementação do manipulador de eventos do botão Salvar.
void CMFCSerializationDlg::OnBnClickedButtonSave() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CEmployee employee;
CFile file;
file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite);
CArchive ar(&file, CArchive::store);
employee.empID = m_id;
employee.empName = m_strName;
employee.age = m_age;
employee.Serialize(ar);
ar.Close();
}
Step 7 - Aqui está a implementação do manipulador de eventos do botão Abrir.
void CMFCSerializationDlg::OnBnClickedButtonOpen() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CFile file;
file.Open(L"EmployeeInfo.hse", CFile::modeRead);
CArchive ar(&file, CArchive::load);
CEmployee employee;
employee.Serialize(ar);
m_id = employee.empID;
m_strName = employee.empName;
m_age = employee.age;
ar.Close();
file.Close();
UpdateData(FALSE);
}
Step 8 - Quando o código acima for compilado e executado, você verá a seguinte saída.
Step 9 - Insira as informações em todos os campos e clique em Salvar e feche este programa.
Step 10- Vai salvar os dados. Execute o aplicativo novamente e clique em abrir. Ele carregará as informações do funcionário.