Разработка приложений для Internet

Метод DoDataExchange


С помощью MFC ClassWizard мы привязали к органам управления диалоговой панели несколько переменных. Всю работу по связыванию этих переменных и органов управления выполняет метод DoDataExchange. В блоке AFX_DATA_MAP размещены вызовы соответствующих методов DDX:

//============================================================

// Метод DoDataExchange класса CFtpViewDlg

//============================================================

void CFtpViewDlg::DoDataExchange(CDataExchange* pDX)

{

   CDialog::DoDataExchange(pDX);

   //{{AFX_DATA_MAP(CFtpViewDlg)

   DDX_Control(pDX, IDC_STATUS, m_Status);

   DDX_Control(pDX, IDOK, m_Ok);

   DDX_Control(pDX, IDC_ON_TOP, m_OnTop);

   DDX_Control(pDX, IDC_CONNECT, m_Connect);

   DDX_Control(pDX, IDC_FTP_LIST, m_FtpList);



   DDX_Text(pDX, IDC_FTP_ADDRESS, m_FtpAddress);

   //}}AFX_DATA_MAP

}

Обратите внимание, что для большей части органов управления диалоговой панели используются обращения к методу DDX_Control. Он осуществляет привязку к органу диалоговой панели управляющего объекта соответствующего класса. Вызывая методы этого объекта можно выполнять над органом управления различные действия.

Только последний метод в блоке AFX_DATA_MAP отличается от остальных. Это метод DDX_Text, который используется для обмена данными между полем редактирования IDC_FTP_ADDRESS и строкой m_FtpAddress. Обмен выполняется при обращении к методу UpdateData.

Метод DoDataExchange класса CFtpViewDlg создается и модифицируется средствами MFC AppWizard и MFC ClassWizard. В большинстве случаев от вас не потребуется изменять этот метод вручную.


При разработке приложения мы привязали к некоторым органам управления диалоговой панели приложения соответствующие элементы данных и ввели их в состав класса CLookDlg. Чтобы обеспечить связь между этими органами управления и элементами данных класса, MFC ClassWizard добавил в блоке AFX_DATA_MAP метода DoDataExchange ряд методов DDX_:

DDX_Control(pDX, IDC_PROGRESS, m_Progress);

DDX_Control(pDX, IDC_EXPLORER, m_explorer);

DDX_Text(pDX, IDC_STATUS_TEXT, m_StatusText);

DDX_Text(pDX, IDC_TITLE_BAR, m_TitleBar);

DDX_CBString(pDX, IDC_COMBO_ADDRESS, m_address);

Линейный индикатор IDC_PROGRESS и навигатор IDC_EXPLORER связываются с элементами данных m_Progress и m_explorer при помощи методов DDX_Control. Таким образом, мы можем полностью управлять линейным индикатором и навигатором вызывая методы соответствующих классов.

Поля редактирования IDC_STATUS_TEXT и IDC_TITLE_BAR связываются со строками m_StatusText и m_TitleBar методами DDX_Text. Чтобы выполнить обмен данными между этими строками и полями редактирования мы будем обращаться к методу UpdateData.

И, наконец, последний метод в блоке DDX_CBString связывает список IDC_COMBO_ADDRESS со строкой m_address. Для того, чтобы узнать текущее состояние списка мы также будем обращаться к методу UpdateData.



Содержание раздела