Condividi tramite


DDX (Dialog Data Exchange)

Se si usa il meccanismo DDX, si impostano i valori iniziali delle variabili membro dell'oggetto dialog, in genere nel OnInitDialog gestore o nel costruttore del dialogo. Immediatamente prima della visualizzazione della finestra di dialogo, il meccanismo DDX del framework trasferisce i valori delle variabili membro ai controlli nella finestra di dialogo, in cui vengono visualizzati quando la finestra di dialogo stessa viene visualizzata in risposta a DoModal o Create. L'implementazione predefinita di OnInitDialog in chiama la UpdateData funzione membro della classe CWnd per inizializzare i controlli nella CDialog finestra di dialogo.

Lo stesso meccanismo trasferisce i valori dai controlli alle variabili membro quando l'utente fa clic sul pulsante OK (o ogni volta che si chiama la UpdateData funzione membro con l'argomento TRUE). Il meccanismo di convalida dei dati della finestra di dialogo convalida tutti gli elementi di dati per i quali sono state specificate regole di convalida.

Nella figura seguente viene illustrato lo scambio di dati dei dialoghi.

Diagram of data model and on screen dialog box data exchange.
DDX (Dialog Data Exchange)

UpdateData funziona in entrambe le direzioni, come specificato dal parametro BOOL passato. Per eseguire lo scambio, UpdateData configura un CDataExchange oggetto e chiama l'override della classe del dialogo della CDialogfunzione membro.DoDataExchange DoDataExchange accetta un argomento di tipo CDataExchange. L'oggetto CDataExchange passato a UpdateData rappresenta il contesto dello scambio, definendo tali informazioni come la direzione dello scambio.

Quando si esegue l'override DoDataExchangedi (o una procedura guidata codice), si specifica una chiamata a una funzione DDX per ogni membro dati (controllo). Ogni funzione DDX sa come scambiare dati in entrambe le direzioni in base al contesto fornito dall'argomento passato all'oggetto CDataExchangeDoDataExchange da UpdateData.

MFC fornisce molte funzioni DDX per diversi tipi di scambio. L'esempio seguente mostra un DoDataExchange override in cui vengono chiamate due funzioni DDX e una funzione DDV:

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

Le DDX_ linee e DDV_ sono una mappa dati. Le funzioni DDX e DDV di esempio visualizzate sono rispettivamente per un controllo casella di controllo e un controllo casella di modifica.

Se l'utente annulla una finestra di dialogo modale, la OnCancel funzione membro termina la finestra di dialogo e DoModal restituisce il valore IDCANCEL. In tal caso, nessun dato viene scambiato tra la finestra di dialogo e l'oggetto finestra di dialogo.

Vedi anche

Convalida e DDX (Dialog Data Exchange)
Utilizzo delle finestre di dialogo in MFC
Convalida dei dati delle finestre di dialogo