< DDX / DDV >

MFC¿¡¼­´Â DDC/DDV¶ó°í ÇÏ´Â ±¸Á¶°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù¸¸, WTL¿¡¼­µµ DDX/DDV°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù.
´Ù¸¸ MFCÀÇ ±×°Í°ú´Â Á¶±Ý »ç¿ë ¹æ¹ýÀÌ ´Ù¸¨´Ï´Ù. ¿©±â¿¡¼­´Â WTLÀÇ DDX/DDV¿¡ ´ëÇØ¼­ ¼³¸í ÇÕ´Ï´Ù.

DDX

¡¡DDX(dialog data exchange) ´Â  ´ÙÀ̾ó·Î±× »óÀÇ ÄÁÆ®·ÑÀÇ ÃʱâÈ­¿Í ÄÁÆ®·Ñ°úÀÇ µ¥ÀÌÅÍÀÇ ±³È¯À» ´Ü¼øÈ­Çϱâ À§ÇÑ ±¸Á¶ÀÔ´Ï´Ù.

¿©±â¼­ ¸»ÇÏ´Â ÄÁÆ®·ÑÀÇ ÃʱâÈ­¶õ  ¼­ºê Ŭ·¡½ºÈ­Çϰųª À©µµ¿ì ÇÚµéÀ» ÄÁÆ®·Ñ Ŭ·¡½º·Î ¼³Á¤Çϰųª ÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ÄÁÆ®·Ñ°úÀÇ µ¥ÀÌÅÍÀÇ ±³È¯À̶õ  ÁöÁ¤ÇÑ º¯¼öÀÇ °ªÀ» ÄÁÆ®·Ñ·Î ¼³Á¤Çϰųª ÄÁÆ®·Ñ·ÎºÎÅÍ ÃëµæÇÑ °ªÀ» ÁöÁ¤ÇÑ º¯¼ö¿¡ ´ëÀÔÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌDDX¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. 1·ÎºÎÅÍ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ÀÔ·ÂÇÑ °ª±îÁöÀÇ ÃÑÈ­¸¦ ¿ä±¸ÇÕ´Ï´Ù. (¿¹¸¦ µé¸é10À» ÀÔ·ÂÇßÀ» °æ¿ì ,1+2+3+¡¤¡¤¡¤+10(À»)¸¦ °è»ê. ) µ¡ºÙ¿© °ªÀÇ »óÇÑÀº100À¸·Î ÇÕ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlctrls.h>

#include <atlddx.h>  // DDX/DDVÀ» »ç¿ëÇϱâ À§ÇØ

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>, public CWinDataExchange<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    // constructor¡¡ ¡¡

    CMainDlg() : m_nInput(1)

    {}

 

    CEdit m_edit_input;

    int m_nInput;

 

    // DDX¸Ê

    BEGIN_DDX_MAP(CMainDlg)

        DDX_CONTROL_HANDLE(IDC_EDIT_INPUT, m_edit_input)

        DDX_INT(IDC_EDIT_INPUT, m_nInput)

    END_DDX_MAP()

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDC_BUTTON_SUM, OnButtonSum)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ¼³Á¤

        DoDataExchange(FALSE);

 

        m_edit_input.LimitText(3);

 

        return TRUE;

    }

 

    void OnDataExchangeError(UINT nCtrlID, BOOL bSave){

        CString strMsg;

        strMsg.Format(_T("ÄÁÆ®·Ñ(ID:%u) °úÀÇ µ¥ÀÌÅÍ ±³È¯¿¡ ½ÇÆÐ. "), nCtrlID);

        MessageBox(strMsg, _T("DDX¿¡·¯"), MB_ICONWARNING);

 

        ::SetFocus(GetDlgItem(nCtrlID));

    }

 

    void OnButtonSum(UINT uNotifyCode, int nID, HWND hWndCtl){

        if(DoDataExchange(TRUE)){

            // Ä¡ üũ

            if(m_nInput < 1 || 100 < m_nInput){

                MessageBox(_T("1 ·ÎºÎÅÍ 100 ±îÁö ÀÇ °ªÀ» ÀÔ·ÂÇØ ÁÖ¼¼¿ä. "),

                    _T("¿¡·¯"), MB_ICONWARNING);

                return;

            }

 

            int nSum = 0;

            for(int i=1; i<=m_nInput; i++)

                nSum += i;

            CString strMsg;

            strMsg.Format(_T("1 ·ÎºÎÅÍ %d ±îÁö ÀÇ ÃÑÈ­´Â %d ÀÔ´Ï´Ù. "), m_nInput, nSum);

            MessageBox(strMsg);

        }

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      

 

// Control.cpp

#include "stdafx.h"

 

#include "resource.h"

 

#include "maindlg.h"

 

CAppModule _Module;

 

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)

{

    HRESULT hRes = ::CoInitialize(NULL);

    ATLASSERT(SUCCEEDED(hRes));

 

    ::DefWindowProc(NULL, 0, 0, 0L);

 

    AtlInitCommonControls(ICC_COOL_CLASSES | ICC_WIN95_CLASSES);

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

    // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼±  ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ¿¡µðÆ® ÄÁÆ®·Ñ°ú ¹öư ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ  ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù.  µ¡ºÙ¿© ¿¡µðÆ® ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼­´Â µðÆúÆ®¿¡ ´õÇØ [¹øÈ£]¿¡ üũ¸¦ ³Ö½À´Ï´Ù.

ÄÁÆ®·Ñ¸í

¸®¼Ò½º ID

¿¡µðÆ®

IDC_EDIT_INPUT

Ǫ½¬ ¹öư

IDC_BUTTON_SUM


¡¡
´ÙÀ½À¸·Î DDX/DDV¸¦ »ç¿ëÇϱâ À§Çؼ­ stdafx.h¾È¿¡¼­ atlddx.hÇì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.

¡¡
´ÙÀ½À¸·Î CMainDlgŬ·¡½ºÀÇ base class¿¡ CWinDataExchange Ŭ·¡½º¸¦ Ãß°¡ÇÕ´Ï´Ù. ±×¸®°í CEdit Ŭ·¡½ºÀÇ ÀνºÅϽº¿Í int ÇüÅÂÀÇ º¯¼ö¸¦ CMainDlg Ŭ·¡½ºÀÇ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù.  intÇüÅ º¯¼ö´Â CMainDlg Ŭ·¡½ºÀÇ constructor¡¡ ¡¡ À¸·Î 1 ¿¡ ÃʱâÈ­ÇÕ´Ï´Ù.

CEdit Ŭ·¡½ºÀÇ ÀνºÅϽº´Â DDX ¸ÊÀÇ DDX_CONTROL_HANDLE¸ÅÅ©·Î¿¡ ÀÇÇØ ÃʱâÈ­µË´Ï´Ù. DDX_CONTROL_HANDLE ¸ÅÅ©·Î´Â  Á¦1Àμö¿¡°Ô °Ç³×Á³´Ù IDÀÇ ÄÁÆ®·ÑÀÇ À©µµ¿ì ÇÚµéÀ» Á¦2Àμö¿¡°Ô °Ç³×Áø ¿ÀºêÁ§Æ®¿¡ ´ëÀÔÇÕ´Ï´Ù.

WTL
ÀÇDDX´Â ÄÁÆ®·ÑÀÇ ÃʱâÈ­¿ëÀ¸·Î ´ÙÀ½°ú °°Àº ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.

  • DDX_CONTROL(ID, ¿ÀºêÁ§Æ®¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·ÑÀ» ÁöÁ¤µÈ ¿ÀºêÁ§Æ®¿¡ ¼­ºê Ŭ·¡½ºÈ­ÇÕ´Ï´Ù.

 

  • DDX_CONTROL_HANDLE(ID, ¿ÀºêÁ§Æ®¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·ÑÀÇ À©µµ¿ì ÇÚµéÀ» ÁöÁ¤µÈ ¿ÀºêÁ§Æ®¿¡ ´ëÀÔÇÕ´Ï´Ù.


µ¡ºÙ¿© ÀÌ·¯ÇÑ ¸ÅÅ©·Î°¡ ½ÇÇàµÇ´Â (Áï ÄÁÆ®·Ñ Ŭ·¡½ºÀÇ ÀνºÅϽº°¡ ÃʱâÈ­µÈ´Ù ) °ÍÀº ÄÁÆ®·Ñ Ŭ·¡½ºÀÇ ÀνºÅϽº¿¡ NULL°¡ ¼³Á¤µÇ¾î ÀÖ¾î , ÇÑÆí DoDataExchange(FALSE)À» È£ÃâÇÑ ¶§¸¸ÀÔ´Ï´Ù. À§ÀÇ ¿¹¿¡¼­´Â OnInitDialog() ¾È¿¡¼­DoDataExchange(FALSE)¸¦ È£ÃâÇØ CEdit Ŭ·¡½ºÀÇ ÀνºÅϽºÀÎm_edit_input¿¡ ¿¡µðÆ® ÄÁÆ®·ÑÀÇ À©µµ¿ì ÇÚµéÀ» ¼³Á¤ÇØ ÀÖ½À´Ï´Ù. ±× ÈÄCEdit::LimitText()¸¦ È£ÃâÇØ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ 3ÀÚ¸®¼ö ¹Û¿¡ ÀÔ·ÂÇÒ ¼ö ¾ø°Ô Çϰí ÀÖ½À´Ï´Ù.

¡¡
CMainDlgŬ·¡½ºÀÇ DDX¸Ê¿¡¼­´Â ¶ÇÇÑ DDX_INT¸ÅÅ©·Î¸¦ »ç¿ëÇØ ÄÁÆ®·Ñ°úintÇüÅ º¯¼ö¸¦ °ü·ÃÁþ°í ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ´Â °Í¿¡ ÀÇÇØ ,DoDataExchange(FALSE)¸¦ È£ÃâÇßÀ» ¶§´Â ÀÚµ¿ÀûÀ¸·ÎSetDlgItemInt()¿¡ ÀÇÇØ º¯¼öÀÇ °ªÀÌ ÄÁÆ®·Ñ·Î ¼³Á¤µÇ¾î DoDataExchange(TRUE)¸¦ È£ÃâÇßÀ» ¶§´Â ÀÚµ¿ÀûÀ¸·ÎGetDlgItemInt()¿¡ ÀÇÇØ ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ ¼öÄ¡°¡ º¯¼ö¿¡ ´ëÀԵ˴ϴÙ. °ªÀÇ Ãëµæ ¶Ç´Â ¼³Á¤¿¡ ¼º°øÇßÀ» ¶§´Â ,DoDataExchange()ÀºTRUEÀ» µ¹·ÁÁÝ´Ï´Ù. ½ÇÆÐÇßÀ» ¶§´ÂFALSEÀ» µ¹·ÁÁÝ´Ï´Ù.

WTL
ÀÇDDX´Â ÄÁÆ®·Ñ°ú º¯¼ö°¡ °ü·ÃÁþ°í¿ëÀ¸·Î ´ÙÀ½°ú °°Àº ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.

  • DDX_TEXT(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈ ij¸¯ÅÍ ¶óÀÎÇü º¯¼ö(LPTSTR,BSTR,CComBSTR,CString) ¸¦ °ü·ÃÁþ½À´Ï´Ù.

 

  • DDX_INT(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÇ¾ú´Ù intÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù.

 

  • DDX_UINT(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈUINTÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù.

 

  • DDX_FLOAT(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈfloatÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù.

 

  • DDX_FLOAT_P(ID, º¯¼ö¸í, Á¤¹Ðµµ)

ÁöÁ¤µÈ IDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈfloatÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù. Á¤¹Ðµµ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

  • DDX_CHECK(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ Ã¼Å© ¹öư ÄÁÆ®·Ñ°ú ÁöÁ¤µÈintÇüÅ ¶Ç´ÂboolÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù.

 

  • DDX_RADIO(ID, º¯¼ö¸í)

ÁöÁ¤µÈ IDÀÇ ¶óµð¿À ¹öư ÄÁÆ®·Ñ°ú ÁöÁ¤µÈintÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù.


µ¡ºÙ¿© ÄÁÆ®·Ñ°ú º¯¼öÀÇ »çÀÌ¿¡ µ¥ÀÌÅÍÀÇ Ãëµæ ¶Ç´Â ¼³Á¤ÀÌ ½ÇÆÐÇßÀ» ¶§´Â  CWinDataExchange Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öÀÎ OnDataExchangeError()ÀÌ ºÒ·Á °©´Ï´Ù. CMainDlgŬ·¡½º¿¡¼­´Â ÀÌOnDataExchangeError()¸¦ ¿À¹ö¶óÀ̵å(override) ÇØ  ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇϵµ·Ï(µíÀÌ) Çϰí ÀÖ½À´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î ¹öưÀÇ Çڵ鷯 ÇÔ¼öÀÎOnButtonSum()À» Ãß°¡ÇÕ´Ï´Ù. OnButtonSum()¾È¿¡¼­´Â  ÀÔ·ÂµÈ °ªÀ» Ã¼Å©ÇØ  À¯È¿ÇÑ °ªÀ̸é 1 À¸·ÎºÎÅÍ ±× °ª±îÁöÀÇ ÃÑÈ­¸¦ °è»êÇØ ¸Þ½ÃÁö ¹Ú½º·Î Ç¥½ÃÇÕ´Ï´Ù.



DDV

¡¡DDV(dialog data validation) (Àº)´Â , ´ÙÀ̾ó·Î±×»óÀÇ ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ µ¥ÀÌÅÍÀÇ Á¤´ç¼ºÀ» üũÇϱâ À§ÇÑ ±¸Á¶ÀÔ´Ï´Ù.

¾ÕÀÇ °ÍDDXÀÇ ¿¹¿¡¼­´Â , ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ ¼öÄ¡ÀÇ ¹üÀ§ üũ¸¦ OnButtonSum()·Î ´ÙÀ½°ú °°ÀÌ °¡°í ÀÖ¾ú½À´Ï´Ù.

void OnButtonSum(UINT uNotifyCode, int nID, HWND hWndCtl){

    if(DoDataExchange(TRUE)){

        // °ª üũ

        if(m_nInput < 1 || 100 < m_nInput){

            MessageBox(_T("1 ·ÎºÎÅÍ 100 ±îÁö ÀÇ °ªÀ» ÀÔ·ÂÇØ ÁÖ¼¼¿ä. "),

                _T("¿¡·¯"), MB_ICONWARNING);

            return;

        }

        ...

        ...

                      


DDV
¸¦ »ç¿ëÇϸé(ÀÚ) , ÀÌ·¯ÇÑ °ªÀÇ Ã¼Å© 󸮸¦ °£·«È­ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀºDDVÀ» »ç¿ëÇØ °ªÀÇ Ã¼Å©¸¦ ÇÏ´Â ¿¹ÀÔ´Ï´Ù. ¾ÕÀÇ °ÍDDXÀÇ ¿¹ÀÇCMainDlgŬ·¡½º¸¸À» º¯°æÇÕ´Ï´Ù.

// maindlg.h¾È

class CMainDlg : public CDialogImpl<CMainDlg>, public CWinDataExchange<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    // constructor¡¡ ¡¡

    CMainDlg() : m_nInput(1)

    {}

 

    CEdit m_edit_input;

    int m_nInput;

 

    // DDX¸Ê

    BEGIN_DDX_MAP(CMainDlg)

        DDX_CONTROL_HANDLE(IDC_EDIT_INPUT, m_edit_input)

        DDX_INT_RANGE(IDC_EDIT_INPUT, m_nInput, 1, 100)

    END_DDX_MAP()

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDC_BUTTON_SUM, OnButtonSum)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ¼³Á¤

        DoDataExchange(FALSE);

 

        m_edit_input.LimitText(3);

 

        return TRUE;

    }

 

    void OnDataExchangeError(UINT nCtrlID, BOOL bSave){

        CString strMsg;

        strMsg.Format(_T("ÄÁÆ®·Ñ(ID:%u) °úÀÇ µ¥ÀÌÅÍ ±³È¯¿¡ ½ÇÆÐ. "), nCtrlID);

        MessageBox(strMsg, _T("DDX¿¡·¯"), MB_ICONWARNING);

 

        ::SetFocus(GetDlgItem(nCtrlID));

    }

 

    void OnDataValidateError(UINT nCtrlID, BOOL bSave, _XData& data){

        CString strMsg;

        strMsg.Format(_T("%d ·ÎºÎÅÍ %d ±îÁö ÀÇ °ªÀ» ÀÔ·ÂÇØ ÁÖ¼¼¿ä. "),

            data.intData.nMin, data.intData.nMax);

        MessageBox(strMsg, _T("DDV¿¡·¯"), MB_ICONEXCLAMATION);

 

        ::SetFocus(GetDlgItem(nCtrlID));

    }

 

    void OnButtonSum(UINT uNotifyCode, int nID, HWND hWndCtl){

        if(DoDataExchange(TRUE)){

            int nSum = 0;

            for(int i=1; i<=m_nInput; i++)

                nSum += i;

            CString strMsg;

            strMsg.Format(_T("1 ·ÎºÎÅÍ %d ±îÁö ÀÇ ÃÑÈ­´Â %d ÀÔ´Ï´Ù. "), m_nInput, nSum);

            MessageBox(strMsg);

        }

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      


¿ì¼± ,DDX¸ÊÀÇDDX_INT¸ÅÅ©·Î¸¦ ,DDX_INT_RANGE¸ÅÅ©·Î·Î º¯°æÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·ÎÀÇ Á¦1, 2Àμö´ÂDDX_INT¸ÅÅ©·Î¿Í °°ÀÌ , ÄÁÆ®·ÑÀÇ °ÍID°úintÇüÅ º¯¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. Á¦3Àμö¿¡´Â °ªÀÇ ÃÖ¼ÒÄ¡¸¦ , Á¦4Àμö¿¡´Â °ªÀÇ ÃÖ´ëÄ¡¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

ÀÌ·¸°Ô ÇÏ´Â °Í¿¡ ÀÇÇØ ,DoDataExchange()¸¦ È£ÃâÇØ ÄÁÆ®·Ñ¿¡ °ªÀ» ¼³Á¤Çϰųª ÄÁÆ®·Ñ·ÎºÎÅÍ °ªÀ» ÃëµæÇÒ ¶§¿¡ , ±× °ªÀÇ ¹üÀ§ üũ¸¦ ÇÕ´Ï´Ù. Á¤´çÇÑ °ª ¶§´Â ,DoDataExchange()ÀºTRUEÀ» µ¹·ÁÁÝ´Ï´Ù. ºÎÁ¤ÇÑ °ª ¶§´ÂFALSEÀ» µ¹·ÁÁÝ´Ï´Ù.

WTL(
Àº)´Â ´ÙÀ½°ú °°ÀºDDV±â´ÉºÎDDX¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.

  • DDX_TEXT_LEN(ID, º¯¼ö¸í, ¹®ÀÚ¼ö)

ÁöÁ¤µÇ¾ú´ÙIDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈ ij¸¯ÅÍ ¶óÀÎÇü º¯¼ö(LPTSTR,BSTR,CComBSTR,CString) ¸¦ °ü·ÃÁþ½À´Ï´Ù. ¹®ÀÚ¼ö üũ¸¦ ÇÕ´Ï´Ù.

 

  • DDX_INT_RANGE(ID, º¯¼ö¸í, ÃÖ¼ÒÄ¡, ÃÖ´ëÄ¡)

ÁöÁ¤µÇ¾ú´ÙIDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈintÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù. °ªÀÇ ¹üÀ§ üũ¸¦ ÇÕ´Ï´Ù.

 

  • DDX_UINT_RANGE(ID, º¯¼ö¸í, ÃÖ¼ÒÄ¡, ÃÖ´ëÄ¡)

ÁöÁ¤µÇ¾ú´ÙIDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈUINTÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù. °ªÀÇ ¹üÀ§ üũ¸¦ ÇÕ´Ï´Ù.

 

  • DDX_FLOAT_RANGE(ID, º¯¼ö¸í, ÃÖ¼ÒÄ¡, ÃÖ´ëÄ¡)

ÁöÁ¤µÇ¾ú´ÙIDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈfloatÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù. °ªÀÇ ¹üÀ§ üũ¸¦ ÇÕ´Ï´Ù.

 

  • DDX_FLOAT_P_RANGE(ID, º¯¼ö¸í, ÃÖ¼ÒÄ¡, ÃÖ´ëÄ¡, Á¤¹Ðµµ)

ÁöÁ¤µÇ¾ú´ÙIDÀÇ ÄÁÆ®·Ñ°ú ÁöÁ¤µÈfloatÇüÅ º¯¼ö¸¦ °ü·ÃÁþ½À´Ï´Ù. Á¤¹Ðµµ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. °ªÀÇ ¹üÀ§ üũ¸¦ ÇÕ´Ï´Ù.


DDV
¿¡ ÀÇÇØ °ªÀÌ ºÎÁ¤À̶ó°í ÆÇ´ÜµÇ¾úÀ» °æ¿ì´Â , CWinDataExchangeŬ·¡½ºÀÇ ¸â¹ö ÇÔ¼öÀÎOnDataValidateError()ÀÌ ºÒ·Á °©´Ï´Ù. CMainDlgŬ·¡½º¿¡¼­´Â ÀÌOnDataValidateError()¸¦ ¿À¹ö¶óÀ̵å(override) ÇØ , ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇϵµ·Ï(µíÀÌ) Çϰí ÀÖ½À´Ï´Ù.