Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Microsoft Visual C++ ΠΈ MFC. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Windows 95 ΠΈ Windows NT. Π§Π°ΡΡ‚ΡŒ 2Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 51

Автор АлСксандр Π€Ρ€ΠΎΠ»ΠΎΠ²

ΠšΡ€ΠΎΠΌΠ΅ этого элСмСнта Π² классС CDaterDoc ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ конструктор, дСструктор, ΠΌΠ΅Ρ‚ΠΎΠ΄ OnNewDocument, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ AssertValid ΠΈ Dump:

class CDaterDoc : public CDocument {

protected:

 CDaterDoc();

 DECLARE_DYNCREATE(CDaterDoc)


// Attributes

public:

 CDaterSet m_daterSet;


// Operations

public:


// Overrides

 //{{AFX_VIRTUAL(CDaterDoc)

public:

 virtual BOOL OnNewDocument();

 //}}AFX_VIRTUAL


// Implementation

public:

 virtual ~CDaterDoc();

#ifdef _DEBUG

 virtual void AssertValid() const;

 virtual void Dump(CDumpContext& dc) const;

#endif


protected:

 //{{AFX_MSG(CDaterDoc)

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()

};

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор класса CDaterDoc

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор класса CMainFrame Π½Π΅ содСрТТат ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ PreCreateWindow класса CDaterDoc

ΠœΠ΅Ρ‚ΠΎΠ΄ OnNewDocument вызываСтся, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ для прилоТСния. ΠœΠ΅Ρ‚ΠΎΠ΄ OnNewDocument прилоТСния Dater Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnNewDocument Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CDocument:

BOOL CDaterDoc::OnNewDocument() {

 if (!CDocument::OnNewDocument()) return FALSE;

 // TODO:

 return TRUE;

}

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ AssertValid ΠΈ Dump класса CDaterDoc

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ AssertValid ΠΈ Dump класса CMainFrame ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ прилоТСния.

Класс ΠΎΠΊΠ½Π° просмотра прилоТСния – CDaterView

Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ интСрСс прСдставляСт класс ΠΎΠΊΠ½Π° просмотра прилоТСния CDaterView. Π’ Π½Π΅ΠΌ содСрТится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ m_pSet Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CDaterSet, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт запись Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ указатСля находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π²ΠΈΠ΄Π° //{{AFX_DATA. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ MFC ClassWizard:

class CDaterView : public CRecordView {

protected:

 CDaterView();

 DECLARE_DYNCREATE(CDaterView)


public:

 //{{AFX_DATA(CDaterView)

 enum { IDD = IDD_DATER_FORM };

 CDaterSet* m_pSet;

 //}}AFX_DATA


// Attributes

public:

 CDaterDoc* GetDocument();


// Operations

public:


// Overrides

 //{{AFX_VIRTUAL(CDaterView)

public:

 virtual CRecordset* OnGetRecordset();

 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

protected:

 virtual void DoDataExchange(CDataExchange* pDX);

 virtual void OnInitialUpdate();

 //}}AFX_VIRTUAL


// Implementation

public:

 virtual ~CDaterView();

#ifdef _DEBUG

 virtual void AssertValid() const;

 virtual void Dump(CDumpContext& dc) const;

#endif


protected:

 //{{AFX_MSG(CDaterView)

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()

};

Помимо конструктора ΠΈ дСструктора Π² классС CDaterView ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² – PreCreateWindow, GetDocument, OnGetRecordset, DoDataExchange, OnInitialUpdate, Π° Ρ‚Π°ΠΊΠΆΠ΅ AssertValid ΠΈ Dump. ОпишСм Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор класса CDaterView

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса CMainFrame Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CRecordView ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° символ IDD, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ шаблона Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ IDD_DATER_FORM, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½ΠΎΠΌ просмотра.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ CMainFrame Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π°ΠΈΠ²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ m_pSet Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL:

CDaterView::CDaterView() : CRecordView(CDaterView::IDD) {

 //{{AFX_DATA_INIT(CDaterView)

 m_pSet = NULL;

 //}}AFX_DATA_INIT

 // TODO:

}

ДСструктор класса CMainFrame Π½Π΅ содСрТит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

CDaterView::~CDaterView() {}

ΠœΠ΅Ρ‚ΠΎΠ΄ PreCreateWindow класса CDaterView

ΠœΠ΅Ρ‚ΠΎΠ΄ PreCreateWindow Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ PreCreateWindow Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CRecordView ΠΈ выполняСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

BOOL CDaterView::PreCreateWindow(CREATESTRUCT& cs) {

 // TODO:

 return CRecordView::PreCreateWindow(cs);

}

ΠœΠ΅Ρ‚ΠΎΠ΄ GetDocument класса CDaterView

ΠœΠ΅Ρ‚ΠΎΠ΄ GetDocument Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, связанный с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ просмотра. Если ΠΎΠΊΠ½ΠΎ просмотра Π½Π΅ связано Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL.

ΠœΠ΅Ρ‚ΠΎΠ΄ GetDocument ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Одна ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ вСрсии прилоТСния, Π° другая для ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия GetDocument ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° нСпосрСдствСнно послС самого класса ΠΎΠΊΠ½Π° просмотра CDaterView ΠΊΠ°ΠΊ встраиваСмый (inline) ΠΌΠ΅Ρ‚ΠΎΠ΄. Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ страницу ClassView ΠΎΠΊΠ½Π° Project Workspace, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetDocument, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΊΠΎΠ΄:

// ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия прилоТСния

#ifndef _DEBUG 

inline CDaterDoc* CDaterView::GetDocument() {

 return (CDaterDoc*)m_pDocument;

}

#endif

ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ вСрсия GetDocument располоТСна Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса ΠΎΠΊΠ½Π° просмотра DaterView.cpp. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ этот Ρ„Π°ΠΉΠ» Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π²Ρ‹Π±Ρ€Π°Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ· страницы FileView ΠΎΠΊΠ½Π° Project Workspace:

// ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ вСрсия прилоТСния

#ifdef _DEBUG

CDaterDoc* CDaterView::GetDocument() {

 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDaterDoc)));

 return (CDaterDoc*)m_pDocument;

}

#endif //_DEBUG

ΠœΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° RUNTIME_CLASS Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру CRuntimeClass, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ классС CDaterDoc. ΠœΠ΅Ρ‚ΠΎΠ΄ IsKindOf, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС CObject, провСряСт, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ m_pDocument, ΠΊ классу CDaterDoc ΠΈΠ»ΠΈ классу наслСдованному ΠΎΡ‚ CDaterDoc. Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ ошибка ΠΈ m_pDocument Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прилоТСния, ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ASSERT ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния.

ΠœΠ΅Ρ‚ΠΎΠ΄ OnGetRecordset класса CDaterView

ΠœΠ΅Ρ‚ΠΎΠ΄ OnGetRecordset класса CDaterView Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ m_pSet Π½Π° запись Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

//////////////////////////////////////////////////////////////

// ΠœΠ΅Ρ‚ΠΎΠ΄ OnGetRecordset класса CDaterView

CRecordset* CDaterView::OnGetRecordset() {

 return m_pSet;

}

ΠœΠ΅Ρ‚ΠΎΠ΄ OnInitialUpdate класса CDaterView

ΠœΠ΅Ρ‚ΠΎΠ΄ OnInitialUpdate класса ΠΎΠΊΠ½Π° просмотра CDaterView ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС CView. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся MFC ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΊΠ½Π° просмотра Π½Π° экранС:

//////////////////////////////////////////////////////////////

// ΠœΠ΅Ρ‚ΠΎΠ΄ OnInitialUpdate класса CDaterView

void CDaterView::OnInitialUpdate() {

 m_pSet = &GetDocument()->m_daterSet;

 CRecordView::OnInitialUpdate();

}

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnInitialUpdate ΠΎΠΊΠ½ΠΎ просмотра ΡƒΠΆΠ΅ связано с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° прилоТСния, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetDocument.

Π’ нашСм случаС ΠΌΠ΅Ρ‚ΠΎΠ΄ GetDocument ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ m_pSet (Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π² класс CDaterView) ΡƒΠΊΠ·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ m_daterSet класса CDaterSet, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ записи Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ входящий Π² класс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° прилоТСния β€” класс CDaterDoc.

Π—Π°Ρ‚Π΅ΠΌ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnInitialUpdate Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CRecordView.

ΠœΠ΅Ρ‚ΠΎΠ΄ DoDataExchange класса CDaterView

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoDataExchange класса CDaterView, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классС CWnd. Он слуТит для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² автоматичСского ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ – Dialog Data Exchange (DDX) ΠΈ автоматичСской ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… – Dialog Data Validation (DDV). ΠœΡ‹ рассматривали этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² 24 Ρ‚ΠΎΠΌΠ΅ сСрии β€œΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° систСмного программиста”:

//////////////////////////////////////////////////////////////

// ΠœΠ΅Ρ‚ΠΎΠ΄ DoDataExchange класса CDaterView

void CDaterView::DoDataExchange(CDataExchange* pDX) {

CRecordView::DoDataExchange(pDX);

 //{{AFX_DATA_MAP(CDaterView)

 DDX_FieldText(pDX,IDC_ADDRESS, m_pSet->m_ADDRESS, m_pSet);

 DDX_FieldText(pDX,IDC_NAME, m_pSet->m_NAME, m_pSet);

 DDX_FieldText(pDX,IDC_PHONE, m_pSet->m_PHONE, m_pSet);

 DDX_FieldText(pDX,IDC_PRIORITY, m_pSet->m_PRIORITY,m_pSet);

 //}}AFX_DATA_MAP

}

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ автоматичСского ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ привязываСт ΠΊ ΠΎΡ€Π³Π°Π½Π°ΠΌ управлСния Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… класса Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ просмотра построСно Π½Π° основС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ автоматичСского ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ€Π³Π°Π½Π°ΠΌΠΈ управлСния, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΎΠΊΠ½Π΅ просмотра, ΠΈ элСмСнтами класса ΠΎΠΊΠ½Π° просмотра. ОбмСн Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях.

ОбмСн выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ DDX_FieldText. ΠœΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DDX_FieldRadio, DDX_FieldCheck, DDX_FieldScroll. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΡ€Π³Π°Π½ΠΎΠ² управлСния Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

ВсСм функциям DDX_FieldText, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Π²Ρ‹ΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ DoDataExchange класса CDaterView ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CDataExchange. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ опрСдСляСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±ΠΌΠ΅Π½Π°, Π² Ρ‚ΠΎΠΌ числС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΡ€Π³Π°Π½Π° управлСния ΠΎΠΊΠ½Π° просмотра, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ выполняСтся ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (ΠΎΠΊΠ½ΠΎ просмотра Π΄ΠΎΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ прСдставлСно классом CRecordView). Π’ нашСм случаС это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ IDC_ADDRESS, IDC_NAME, IDC_PHONE ΠΈ IDC_PRIORITY, ΠΊΠΎΡ‚ΠΎΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΎΠΊΠ½ΠΎΠΌ просмотра.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ содСрТит ссылку Π½Π° элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… класса CDaterSet, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ нашСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π² качСствС этого ΠΏΠ°Ρ€Π°ΠΌΡ‚Π΅Ρ€Π° Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ m_pSet->m_ADDRESS, m_pSet->m_NAME, m_pSet->m_PHONE ΠΈ m_pSet->m_PRIORITY.