TN026: DDX ¹× DDV ·çƾ

ÀÌ ³ëÆ®¿¡¼­´Â ´ëÈ­ »óÀÚ µ¥ÀÌÅÍ ±³È¯ (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 ¸ÞÄ¿´ÏÁòÀ» È®ÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ç½ÅÀº ÇÒ ¼ö ÀÖ¾î¿ä:

Á¶°Ç ¹®À̳ª ¸ðµç ´Ù¸¥ À¯È¿ÇÑ 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)

Index