ÀÌ ³ëÆ®¿¡¼´Â ´ëÈ »óÀÚ µ¥ÀÌÅÍ ±³È¯ (DDX) ¹× ´ëÈ µ¥ÀÌÅÍ À¯È¿¼º °Ë»ç (DDV) ¾ÆÅ°ÅØÃ³¿¡ ¼³¸íÇÕ´Ï´Ù. ¶ÇÇÑ DDX_ ¶Ç´Â DDV_ ÇÁ·Î½ÃÀú¸¦ ÀÛ¼º ÇÏ´Â ¹æ¹ý ¹× ±ÍÇÏÀÇ ·çƾÀ» »ç¿ë ÇÏ ¿© ¸¶¹ý»ç¸¦ È®Àå ÇÏ´Â ¹æ¹ýÀ» ¼³¸í ÇÕ´Ï´Ù.
´ëÈ »óÀÚ µ¥ÀÌÅÍ ±³È¯ÀÇ °³¿ä
¸ðµç ´ëÈ µ¥ÀÌÅÍ ÇÔ¼ö´Â c + + ÄÚµå¿Í ÇÔ²² ¿Ï·á µË´Ï´Ù. °Å±â¿¡ Ưº° ÇÑ ÀÚ¿ø ¶Ç´Â ¸¶¹ýÀÇ ¸ÅÅ©·Î. ¸ÞÄ¿´ÏÁòÀÇ Áß½ÉÀº ´ëÈ µ¥ÀÌÅÍ ±³È¯ ¹× À¯È¿¼º °Ë»ç¸¦ ¸ðµç ´ëÈ »óÀÚ Å¬·¡½º¿¡¼ ÀçÁ¤ÀÇ µÇ´Â °¡»ó ÇÔ¼öÀÔ´Ï´Ù. ±×°ÍÀº Ç×»óÀÌ ¾ç½Ä¿¡¼ ¹ß°ß:
void CMyDialog::DoDataExchange (CDataExchange * pDX)
{
nbsp;? CDialog::DoDataExchange(pDX);??? / / ±âº» Ŭ·¡½º È£Ãâ
//{{AFX_DATA_MAP(CMyDialog)
?????? <data_exchange_function_call>
??????
?? //}}AFX_DATA_MAP
}
Ưº° ÇÑ Çü½Ä AFX ÀÇ°ß Çã¿ë Classwizard¸¦ ã¾ÆÀÌ ÇÔ¼ö ³»ÀÇ Äڵ带 ÆíÁý ÇÕ´Ï´Ù. ÄÚµå ¸¶¹ý»ç¿Í ȣȯ µÇÁö ¾Ê´Â Ư¼ö Çü½Ä ÀǰßÀÇ ¿ÜºÎ ¹èÄ¡ µÇ¾î¾ß ÇÕ´Ï´Ù.
À§ÀÇ ¿¹¿¡¼ lt; data_exchange_function_call > ÇüÅÂÀÔ´Ï´Ù:
nbsp;???DDX_Custom (pDX, nIDC, Çʵå)(&N)
±×¸®°í lt; data_validation_function_call > ¼±ÅÃÀû À̸ç ÇüÅ·Î:
nbsp;???DDV_Custom (pDX, Çʵå,...)(&N)
Çϳª ÀÌ»óÀÇ DDX_/DDV_ ½Ö °¢ DoDataExchange ÇÔ¼ö¿¡ Æ÷ÇÔ µÉ ¼ö ÀÖ½À´Ï´Ù.
¸ðµç ´ëÈ »óÀÚ µ¥ÀÌÅÍ ±³È¯ ·çƾ ¹× MFC¿¡¼ Á¦°ø ÇÏ´Â ´ëÈ »óÀÚ µ¥ÀÌÅÍ À¯È¿¼º °Ë»ç ·çƾÀÇ ¸ñ·Ï¿¡ ´ë ÇÑ 'afxdd_.h' ÂüÁ¶¡£
´ëÈ »óÀÚ µ¥ÀÌÅÍ´Â ´ÜÁö CMyDialog Ŭ·¡½º¿¡¼-ȸ¿ø µ¥ÀÌÅÍÀÔ´Ï´Ù. ±¸Á¶Ã¼ ¶Ç´Â ¾Æ¹«°Íµµ Ưº° ÇÑ ±×·± ±×°Í ÀúÀå µÇÁö ¾Ê½À´Ï´Ù.
³ëÆ®
ºñ·ÏÀÌ "´ëÈ µ¥ÀÌÅÍ"¸¦ È£Ãâ ÇÏ °í, ¸ðµç CWnd ¿¡¼ ÆÄ»ý µÈ ¸ðµç Ŭ·¡½º¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ±â´É°ú ±×³É ´ëÈ¿¡ ±¹ÇÑ µÇÁö ¾Ê½À´Ï´Ù.
µ¥ÀÌÅÍÀÇ Ãʱ⠰ª ¼³Á¤ µÈ ºí·Ï¿¡ ÀϹÝÀûÀ¸·Î Ç¥ÁØ c + + »ý¼ºÀÚ¿¡¼ //{{AFX_DATA_INIT ¹× //}}AFX_DATA_INIT ´ñ±Û¡£
CWnd::UpdateData ´Â ¾Ê´Â ÃʱâÈ ¹× ¿À·ù ó¸® DoDataExchange ¸¦ È£Ãâ ÇÏ´Â ÀÛ¾÷¡£
¾ðÁ¦ µç Áö µ¥ÀÌÅÍ ±³È¯ ¹× À¯È¿¼º °Ë»ç¸¦ ¼öÇà ÇÏ·Á¸é CWnd::UpdateData ¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âº»ÀûÀ¸·Î UpdateData(TRUE) ±âº» CDialog::OnOK 󸮱⠶ó°í Çϸç UpdateData(FALSE) ±âº» CDialog::OnInitDialog ¿¡¼ È£Ãâ¡£
DDV_ ·çƾ Áï½Ã ÇØ´ç ÇÊµå ¿¡ ´ë ÇÑ DDX_ ·çƾÀ» µû¶ó¾ß ÇÑ´Ù¡£
±×°ÍÀº ¾î¶»°Ô ÀÛµ¿ Çմϱî?
´ëÈ »óÀÚ µ¥ÀÌÅ͸¦ »ç¿ë ÇÏ ¿© ´ÙÀ½À» ÀÌÇØ ÇØ¾ß ÇÏ´Â °ÍÀº ¾ø½À´Ï´Ù. ±×·¯³ª, Àå¸é µÚ¿¡ ÀÛµ¿ ÇÏ´Â ¹æ¹ýÀ» ÀÌÇØ Çϸé ÀÚ½ÅÀÇ ±³È¯ ¶Ç´Â À¯È¿¼º °Ë»ç ÇÁ·Î½ÃÀú¸¦ ÀÛ¼º¡£
DoDataExchange ¸â¹ö ÇÔ¼ö¸¦ »ç¿ë Çϸé Serialize ¸â¹ö ÇÔ¼ö ó·³ ¸¹Áö´Â-¿ÜºÎ ¾ç½Ä¿¡¼ Á¡Á¡ ¶Ç´Â/µ¥ÀÌÅ͸¦ ¼³Á¤ ÇÏ´Â ÀÛ¾÷À» ´ã´ç (ÀÌ °æ¿ì¿¡ ´ëÈ »óÀÚ¿¡¼ ÄÁÆ®·Ñ) ¿¡¼/ȸ¿ø µ¥ÀÌÅʹ Ŭ·¡½º¿¡ ÀÖ½À´Ï´Ù. PDX ¸Å°³ º¯¼ö µ¥ÀÌÅ͸¦ ±³È¯ ÇÏ °í ÄÁÅØ½ºÆ® À̸ç CArchive ¸Å°³ º¯¼ö CObject::Serialize¸¦ ºñ½ÁÇÕ´Ï´Ù. PDX ( CDataExchange °³Ã¼)´Â ¹æÇâ Ç÷¡±×°¡ CArchive ÀÖ´Ù ¹æÇâ Ç÷¡±× ó·³
À¯È¿¼º °Ë»ç´Â m_bSaveAndValidate À» ¼³Á¤ ÇÏ´Â °æ¿ì¿¡ ¹ß»ý ÇÕ´Ï´Ù. M_bSaveAndValidate ÀÇ °ª CWnd::UpdateData ¸¦ BOOL ¸Å°³ º¯¼ö¿¡ ÀÇÇØ °áÁ¤ µË´Ï´Ù.
°Å±â¿¡ ¼¼ °¡Áö ´Ù¸¥ Èï¹Ì·Î¿î CDataExchange ¸â¹ö:
»ç¿ëÀÚ È®Àå
¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î ±âº» DDX/DDV ¸ÞÄ¿´ÏÁòÀ» È®ÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ç½ÅÀº ÇÒ ¼ö ÀÖ¾î¿ä:
CTime
void ÆÄ½ºÄ® DDX_Time(CDataExchange* pDX, int nIDC, CTimeamp; tm)(&A)
void ÆÄ½ºÄ® DDV_TimeFuture(CDataExchange* pDX, CTime tm, BOOL bFuture);
/ / ½Ã°£Àº ¹Ì·¡ ¶Ç´Â °ú°Å¿¡ ÀÖ´ÂÁö È®ÀÎ ÇϽʽÿÀ.
DDV_MinMax (pDX, ³ªÀÌ, 0, m_maxAge)
¸Þ¸ðnbsp;??ÀÌ·¯ÇÑ ÀÓÀÇ ½Ä Classwizard´Â ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù ¹× µû¶ó¼ Ưº° ÇÑ Çü½Ä ÀÇ°ß (//{{afx_data_map(cmyclass))ÀÇ ¿ÜºÎ À̵¿ ÇØ¾ß(&N)¡£
Á¶°Ç ¹®À̳ª ¸ðµç ´Ù¸¥ À¯È¿ÇÑ c + + intermixed ±³È¯ ¹× À¯È¿¼º °Ë»ç ÇÔ¼ö È£ÃâÀ» Æ÷ÇÔ ÇÏ´Â DoDialogExchange ¸â¹ö ÇÔ¼ö¸¦°¡Áö°í¡£
//{{AFX_DATA_MAP(CMyClass)
DDX_Check (pDX, IDC_SEX, m_bFemale);
DDX_Text (pDX IDC_EDIT1, m_age);
//}}AFX_DATA_MAP
°æ¿ì (m_bFemale)
nbsp;? DDV_MinMax (pDX, ³ªÀÌ, 0, m_maxFemaleAge);
´Ù¸¥
?? DDV_MinMax (pDX, ³ªÀÌ, 0, m_maxMaleAge)(&N)
¸Þ¸ðnbsp;??À§¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ, ÀÌ·¯ÇÑ ÄÚµå ClassWizard ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù ÇÏ °í Ưº° ÇÑ Çü½Ä ´ñ±Û¸¸ ¿ÜºÎÀÇ »ç¿ë ÇØ¾ß(&N)¡£
ClassWizard Áö¿ø
ClassWizard ÀÚ½ÅÀÇ DDX_ ¹× DDV_ ·çƾ ClassWizard »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡ ÅëÇÕÇÒ ¼ö ÀÖµµ·Ï ÇÔÀ¸·Î½á DDX/DDV »ç¿ëÀÚÀÇ ÇÏÀ§ ÁýÇÕÀ» Áö¿ø ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ´Â °ÍÀº À¯ÀÏÇÑ ºñ¿ë ƯÁ¤ DDX ¹× DDV ·çƾ ¸î ¹øÀÌ °í ÇÁ·ÎÁ§Æ® ¶Ç´Â ¿©·¯ ÇÁ·ÎÁ§Æ®¿¡¼ ´Ù½Ã »ç¿ë ÇÏ·Á´Â °æ¿ì¿¡ À¯¿ë¡£
ÀÌ À§ÇØ Æ¯º° ÇÑ Ç׸ñ DDX¿¡ ¸¸µé¾îÁý´Ï´Ù.CLW (ÀÌÀü ¹öÀüÀÇ Visual c + + APSTUDIO¿¡ÀÌ Á¤º¸¸¦ ÀúÀå ÇÕ´Ï´Ù.INI) ¶Ç´Â ±ÍÇÏÀÇ ÇÁ·ÎÁ§Æ®¿¡.CLW ÆÄÀÏÀÔ´Ï´Ù. Ưº° ÇÑ Ç׸ñÀÌ µÉ ¼ö ÀÖ´Â ÇÁ·ÎÁ§Æ®ÀÇ [ÀÏ¹Ý Á¤º¸] ¼½¼Ç¿¡ ÀÔ·Â ÇÕ´Ï´Ù.CLW ÆÄÀÏÀÌ ³ª °í DDX [ExtraDDX] ¼½¼Ç¿¡¼.CLW ÆÄÀÏÀÌ \program files\microsoft Visual Studio\Visual C + + \bin µð·ºÅ͸®. DDX¸¦ ¸¸µé Çʿ䰡 ÀÖ½À´Ï´Ù.CLW ÆÄÀÏÀÌ ÀÌ¹Ì Á¸Àç ÇÏÁö ¾Ê´Â °æ¿ìÀÔ´Ï´Ù. ƯÁ¤ ÇÁ·ÎÁ§Æ®¿¡¸¸ »ç¿ëÀÚ ÁöÁ¤ DDX_/DDV_ ·çƾÀ» »ç¿ë ÇÏ·Á¸é ÇÁ·ÎÁ§Æ®ÀÇ [ÀÏ¹Ý Á¤º¸] ¼½¼Ç¿¡ Ç׸ñÀ» Ãß°¡ ÇÕ´Ï´Ù.CLW ´ë½Å ÆÄÀÏ. ¸¹Àº ÇÁ·ÎÁ§Æ®¿¡ ·çƾÀ» »ç¿ë ÇÏ·Á´Â °æ¿ì DDX [ExtraDDX] ¼½¼Ç¿¡ Ç׸ñÀ» Ãß°¡ ÇÕ´Ï´Ù.CLW¡£
ÀÌ·¯ÇÑ Æ¯º° Ç׸ñÀÇ ÀϹÝÀûÀÎ Çü½ÄÀº:
ExtraDDXCount = n
; ¿©±â¼ nÀº ExtraDDX ¹øÈ£? ¶óÀÎÀ» µû¶ó
ExtraDDX? lt; = Ű >; < vb Ű >; <prompt> <type> <initValue> <DDX_Proc> [; <DDV_Proc> <prompt1> <arg1> [<prompt2> <fmt2>]]
; ¾îµð? Á¤ÀÇ µÇ °í ¸ñ·Ï¿¡¼ DDX À¯ÇüÀ» ³ªÅ¸³»´Â ¼ýÀÚ 1-nÀ» ÀÌ´Ù¡£
°¢ Çʵå´Â ';' ¹®ÀÚ·Î ±¸ºÐ µË´Ï´Ù. ÇÊµå ¹× ±×µéÀÇ ¸ñÀûÀº ´ÙÀ½°ú °°½À´Ï´Ù.
lt; Ű & gt;
´ÜÀÏ ¹®ÀÚ´Â ´ëÈ »óÀÚ ÄÁÆ®·Ñ¿¡ ´ë ÇÑÀÌ º¯¼ö Çü½ÄÀÌ Çã¿ë µÇ´ÂÁö ³ªÅ¸³»´Â ¸ñ·Ï =¡£
E = ÆíÁý
C = 2 »óÅ ȮÀζõ
c = Æ®¶óÀÌ-½ºÅ×ÀÌÆ® È®Àζõ
R = ±×·ì¿¡¼ ù ¹øÂ° ¶óµð¿À ´ÜÃß
L = = Á¤·Ä µÇÁö ¾ÊÀº ¸ñ·Ï »óÀÚ
l = = Á¤·ÄµÈ ¸ñ·Ï »óÀÚ
M = = (ÆíÁý Ç׸ñ)¿Í ÄÞº¸ »óÀÚ
N = ºñ Á¤·Ä µå·Ó ¸ñ·Ï
n = Á¤·ÄµÈ µå·Ó ¸ñ·Ï
1 = DDX »ðÀÔ ¸Ó¸®ÀÇ ¸ñ·Ï¿¡ Ãß°¡ ÇØ¾ß ÇÏ´Â °æ¿ì (±âº»°ªÀº ²¿¸®¿¡ Ãß°¡ µÊ) nbsp; ÀÌ ¼Ó¼ºÀº ÀϹÝÀûÀ¸·Î 'Á¦¾î' ¼Ó¼ºÀ» Àü¼Û ÇÏ´Â DDX ·çƾ¿¡ »ç¿ë µË´Ï´Ù(&N).
lt; vb Ű & gt;
ÀÌ Çʵå´Â VBX ÄÁÆ®·Ñ (VBX ÄÁÆ®·ÑÀº 32 ºñÆ® Á¦Ç°¿¡¼ Áö¿ø µÇÁö ¾Ê´Â)¿¡ ´ë ÇÑ 16 ºñÆ® Á¦Ç°¿¡¸¸ »ç¿ë
lt; ÇÁ·ÒÇÁÆ® > =
¹®ÀÚ¿ ¼Ó¼º ÄÞº¸ »óÀÚÀÇ (µû¿ÈÇ¥ Á¦¿Ü)À»
lt; type > =
Çì´õ ÆÄÀÏ¿¡¼ ¹æÃâ ÇÏ´Â Çü½Ä¿¡ ´ë ÇÑ ´ÜÀÏ ½Äº°ÀÚÀÔ´Ï´Ù. ¿ì¸®ÀÇ ¿¹Á¦¿¡¼ À§ÀÇ ddx_time¿Í ÇÔ²²ÀÌ Ctime·Î ¼³Á¤ µË´Ï´Ù.
lt; vb Ű > =
ÀÌ ¹öÀü¿¡¼ »ç¿ë µÇÁö ¾ÊÀ¸¸ç Ç×»ó ºñ¾î ÀÖ¾î¾ß
lt; initValue > =
Ãʱ⠰ª-0 ¶Ç´Â °ø¹éÀÔ´Ï´Ù. ºñ¾î ÃʱâÈ ¶óÀÎ ±¸Çö ÆÄÀÏÀÇ //{{AFX_DATA_INIT ¼½¼Ç¿¡ ±â·Ï µË´Ï´Ù. ¿Ã¹Ù¸¥ Ãʱâȸ¦ º¸Àå ÇÏ´Â »ý¼ºÀÚ°¡ ÀÖ´Â c + + °³Ã¼ (¿¹: CString, CTime, ±×¸®°í ±âŸ µîµî)¿¡ ºó Ç׸ñÀ» »ç¿ë ÇØ¾ß¡£
lt; DDX_Proc > =
dDX_ ÀýÂ÷¿¡ ´ë ÇÑ ´ÜÀÏ ½Äº°ÀÚÀÔ´Ï´Ù. C + + ÇÔ¼ö À̸§À» "DDX_,"·Î ½ÃÀÛ ÇØ¾ß ÇÕ´Ï´Ù ÇÏÁö¸¸ lt; "DDX_"¸¦ Æ÷ÇÔ ÇÏÁö ¾Ê½À´Ï´Ù DDX_Proc > ½Äº°ÀÚ. À§ÀÇ ¿¹Á¦¿¡¼ <DDX_Proc> ½Äº°ÀÚ´Â ½Ã°£ÀÌ µÉ °Í ÀÌ´Ù. ClasswizardÀÇ ±¸Çö ÆÄÀÏ¿¡ ÇÔ¼ö È£ÃâÀ» ÀÛ¼º ÇÏ´Â ¶§¸¦ {{AFX_DATA_MAP ¼½¼ÇÀÌÀÌ À̸§À» Ãß°¡ ÇÕ´Ï´Ù DDX_, µû¶ó¼ ddx_time¿¡ µµÂø¡£
lt; ¸Þ¸ð > =
ÀÌ DDX »ç¿ë ÇÏ ¿© º¯¼ö ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇÒ ¼³¸íÀÔ´Ï´Ù. DDX/DDV ½Ö¿¡ ÀÇÇØ ¼öÇà µÇ´Â ÀÛ¾÷À» ¼³¸í ÇÏ´Â ¸ðµç ÅØ½ºÆ®¸¦ °Í ó·³ ¿©±â, ÀϹÝÀûÀ¸·Î ¹º°¡ Á¦°ø¡£
lt; DDV_Proc & gt;
Ç׸ñÀÇ DDV ºÎºÐ ¼±Åà »çÇ×ÀÔ´Ï´Ù. ¸ðµç DDX ·çƾ ÇØ´ç DDV ·çƾ ÀÖ´Ù. Á¾Á¾, ±×°ÍÀº Àü¼ÛÀÇ ÇʼöÀûÀÎ ºÎºÐÀ¸·Î À¯È¿¼º °Ë»ç ´Ü°è¸¦ Æ÷ÇÔ ÇÏ´Â °ÍÀÌ ´õ Æí¸® ÇÕ´Ï´Ù. À̰ÍÀº Á¾Á¾ »ç°Ç ¶§ DDV ·çƾ ClassWizard ¸Å°³ º¯¼ö ¾øÀÌ DDV ·çƾÀ» Áö¿ø ÇÏÁö ¾ÊÀ¸¹Ç·Î ¸Å°³ º¯¼ö ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù.
= DDV_ ÇÁ·Î½ÃÀú¿¡ ´ë ÇÑ ´ÜÀÏ ½Äº°ÀÚ. C + + ÇÔ¼ö À̸§À» "DDV_"·Î ½ÃÀÛ ÇØ¾ß ÇÕ´Ï´Ù ÇÏÁö¸¸ lt; "DDX_"¸¦ Æ÷ÇÔ ÇÏÁö ¾Ê½À´Ï´Ù DDX_Proc > ½Äº°ÀÚ¡£
µÚ¿¡ 1 °³ ¶Ç´Â 2 DDV args:
lt; promptX > =
Ç׸ñ ÆíÁý (¾ÚÇÁ¿Í, °¡¼Ó±â) À§¿¡ ¹èÄ¡ÇÒ ¹®ÀÚ¿(&A)
lt; fmtX > =
arg À¯Çü Áß Çϳª¿¡ ´ë ÇÑ Çü½Ä ¹®ÀÚ
d = int
u = ¼¸í
D = long int (Áï, ±ä)
U ±ä ¼¸í = (DWORD)
f = ÇÃ ·ÎÆ®
F = ´õºí
s = ¹®ÀÚ¿
»ç¿ëÀÚ ÁöÁ¤ DDXÀÇ ¿¹
¿¹¸¦ µé¾î, À¯È¿¼º °Ë»ç »ç¿ëÀÚ ÁöÁ¤ DDX MFC °í±Þ °³³ä »ùÇÿ¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù CHKBOOK. DOLLCENT¿¡¼ ddx_dollarscents¸¦ ÂüÁ¶ ÇϽʽÿÀ.»ç¿ëÀÚ ÁöÁ¤ DDX ·çƾ ¹× CHKBOOK »ùÇà ±¸Çö¿¡ ´ë ÇÑ ÅëÈ ´ç.CLW ÇØ´ç ¿¹Á¦ ExtraDDXCount ¹× CHKBOOKÀÇ [ÀÏ¹Ý Á¤º¸] ¼½¼Ç¿¡ ÀÖ´Â ExtraDDX1 Ç׸ñ¿¡ ´ë ÇÑ.CLW ÆÄÀÏ¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)