Troca de dados da caixa de diálogo
Se você usar o mecanismo DDX, defina os valores iniciais das variáveis de membro do objeto de caixa de diálogo, normalmente no manipulador OnInitDialog
ou no construtor da caixa de diálogo. Imediatamente antes da caixa de diálogo ser exibida, o mecanismo DDX da estrutura transfere os valores das variáveis de membro para os controles na caixa de diálogo, em que eles aparecem quando a caixa de diálogo em si aparece em resposta a DoModal
ou Create
. A implementação padrão de OnInitDialog
em CDialog
chama a função de membro UpdateData
da classe CWnd
para inicializar os controles na caixa de diálogo.
O mesmo mecanismo transfere valores dos controles para as variáveis de membro quando o usuário clica no botão OK (ou sempre que você chama a função de membro UpdateData
com o argumento TRUE). O mecanismo de validação de dados de caixa de diálogo valida todos os itens de dados para os quais você especificou regras de validação.
A figura a seguir ilustra a troca de dados de caixa de diálogo.
Troca de dados da caixa de diálogo
UpdateData
funciona em ambas as direções, conforme especificado pelo parâmetro BOOL passado para ele. Para realizar a troca, UpdateData
configura um objeto CDataExchange
e chame a substituição da classe de diálogo da função de membro DoDataExchange
de CDialog
. DoDataExchange
usa um argumento do tipo CDataExchange
. O objeto CDataExchange
passado para UpdateData
representa o contexto da troca, definindo informações como a direção da troca.
Quando você (ou um assistente de código) substituir DoDataExchange
, especifique uma chamada para uma função DDX por membro de dados (controle). Cada função DDX sabe como trocar dados em ambas as direções com base no contexto fornecido pelo argumento CDataExchange
passado para o seu DoDataExchange
por UpdateData
.
O MFC fornece muitas funções DDX para diferentes tipos de troca. O exemplo a seguir mostra uma substituição DoDataExchange
na qual duas funções DDX e uma função DDV são chamadas:
void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
DDV_MaxChars(pDX, m_strName, 20);
}
As linhas DDX_
e DDV_
são um mapa de dados. As funções DDX e DDV de exemplo mostradas são para um controle de caixa de seleção e um controle de caixa de edição, respectivamente.
Se o usuário cancelar uma caixa de diálogo modal, a função de membro OnCancel
encerrará a caixa de diálogo e DoModal
retornará o valor IDCANCEL. Nesse caso, nenhum dado é trocado entre a caixa de diálogo e o objeto de caixa de diálogo.
Confira também
Troca e validação de dados da caixa de diálogo
Trabalhando com caixas de diálogo no MFC
Validação dos dados da caixa de diálogo