Compartilhar via


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.

Diagram of data model and on screen dialog box data exchange.
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