Partager via


Échange de données de boîtes de dialogue

Si vous utilisez le mécanisme DDX, définissez les valeurs initiales des variables membres de l'objet de boîte de dialogue, en général dans votre gestionnaire OnInitDialog ou le constructeur de boîte de dialogue. Juste avant l’affichage de la boîte de dialogue, le mécanisme DDX de l’infrastructure transfère les valeurs des variables membres aux contrôles de la boîte de dialogue, où elles apparaissent lorsque la boîte de dialogue elle-même apparaît en réponse ou DoModalCreate. L'implémentation par défaut de OnInitDialog dans CDialog appelle la fonction membre UpdateData de la classe CWnd pour initialiser les contrôles dans la boîte de dialogue.

Le même mécanisme transfère les valeurs des contrôles aux variables membres lorsque l’utilisateur clique sur le bouton OK (ou chaque fois que vous appelez la UpdateData fonction membre avec l’argument TRUE). Le mécanisme de validation des données de boîte de dialogue valide tous les éléments de données pour lesquels vous avez spécifiés les règles de validation.

L'illustration suivante montre l'échange de données de boîte de dialogue.

Diagram of data model and on screen dialog box data exchange.
Échange de données de boîtes de dialogue

UpdateData fonctionne dans les deux directions, comme spécifié par le paramètre BOOL transmis à celui-ci. Pour effectuer l'échange, UpdateData génère un objet CDataExchange et appelle la fonction membre CDialog de la substitution de votre classe de boîte de dialogue DoDataExchange. DoDataExchange accepte un argument de type CDataExchange. L'objet CDataExchange passé à UpdateData représente le contexte de l'échange, et définit des informations telles que la direction de l'échange.

Lorsque vous (ou un Assistant Code) remplacez DoDataExchange, vous spécifiez un appel à une fonction DDX par données membres (contrôle). Chaque fonction DDX sait échanger des données dans les deux directions selon le contexte fourni par l’argument CDataExchange passé à votre DoDataExchange par UpdateData.

MFC fournit de nombreuses fonctions DDX pour différents types d'échange. L'exemple suivant illustre la substitution de DoDataExchange dans laquelle deux fonctions DDX et une fonction DDV sont appelées :

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);
}

Les lignes DDX_ et DDV_ sont une table de données. Les exemples de fonctions DDX et DDV affichés concernent respectivement un contrôle de case à cocher et un contrôle de zone d'édition.

Si l’utilisateur annule une boîte de dialogue modale, la OnCancel fonction membre met fin à la boîte de dialogue et DoModal retourne la valeur IDCANCEL. Dans ce cas, aucune donnée n'est échangée entre la boîte de dialogue et l'objet dialogue.

Voir aussi

Échange et validation de données de boîtes de dialogue
Utilisation des boîtes de dialogue dans MFC
Validation de données de boîtes de dialogue