CDataExchange class is used to pass the argument in exchange routine where data is exchanged between UI control and class member variables. We are going to discuss MFC data exchange mechanism in our next few sections and before that it is necessary to understand CDataExchange and its members. CDataExchange object primarily holds the context of dialog or window pointer, direction of data exchange and necessary functions needed for data exchange. Lets see the class members and functions of CDataExchange.

CDataExchange class

class CDataExchange

public :
  BOOL m_bSaveAndValidate;
  CWnd* m_pDlgWnd;

  HWND PrepareCtrl(int nIDC);     
  HWND PrepareEditCtrl(int nIDC); 
  void Fail();

  CDataExchange(CWnd* pDlgWnd, BOOL bSaveAndValidate);

  COleControlSite* PrepareOleCtrl(int nIDC);

    UINT m_idLastControl;
  BOOL m_bEditLastControl;

CDataExchange elements

  • CDataExchange - This is the constructor of the CDataExchange and it takes the Dialog/top window pointer and direction of data exchange.
  • m_bSaveAndValidate - Member variable to hold direction of the data exchange.
  • m_pDlgWnd - Member variable to hold Dialog/top window pointer
  • PrepareCtrl/PrepareEditCtrl - Member function to retrieve window handle of the control from the ID given in argument.
  • PrepareOleCtrl - Member function to retrieve COleControlSite handle of the control from the ID given in argument.
  • m_idLastControl - Member variable to hold last control used (for validation)
  • m_bEditLastControl - Member variable to hold if last control was an edit item
  • Fail - expection handling function

CDataExchange and data exchange

Sample code on how CDataExchange object is used in UpdateData() call and passed to DoDataExchange()

BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
   CDataExchange DX(this, bSaveAndValidate);
/* UpdateData with TRUE is called */
BOOL CDialog::OnInitDialog()
  /* called by MFC framework */
  /* Default values go to UI */

/* UpdateData with FALSE is called */
void CUserDialog::OnSubmit()
  /* called by user */
  /* UI values go to members */

About our authors: Team EQA

Further readings

Where is WinMain() function in MFC application ?

MFC hides WinMain in its framework and includes source file on WinMain(). This explains how framework calls global CWinApp::Initinstance() from entry WinMain.

What is the utility of CWinApp class?

This is constructed during global C++ objects are constructed and is already available when Windows calls the WinMain function, which is supplied by the ...

Basic steps in Win32 GUI Application with source code.

Define a custom Window class structure, Register the class name, CreateWindow, Show windows and write message get and dispatch loop statements. Define the Window CallBack procedure and write the handlers.

What is a Window CallBack procedure and what is its utility?

DispatchMessage() is a API which indirectly triggers the Window CallBack procedure. Message structure members from this function are passed to the CallBack procedure. CallBack procedure should implement event handlers depending on the need of the application.

What are LPARAM and WPARAM in window proc function?

LPARAM and WPARAM are the two parameters in Window CallBack procedure. They signifies parameters of various events. They are used in handing individual events.

What are the basic steps of a typical MFC based application?

We need to write WinMain and need to follow all these in a Win32 application. However we need not to write much if we are writing an application with MFC ...