티스토리 뷰

프로그래밍/MFC

MFC 대화상자 DDX/DDV

에어버스 2016. 7. 2. 11:58

DDX/DDV

DDX : Dialog Data eXchange
멤버변수와 컨트롤의 값을 연결시켜준다.
UpdateData(FALSE) : 멤버변수 값을 컨트롤에 전달
UpdateData(TRUE) : 컨트롤의 값을 멤버변수로 전달 (멤버변수를 기준으로 TRUE면 값을 가져옴)

DDV : Dialog Data Validation
컨트롤에 입력한 값의 타당성을 검사

다이얼로그 추가 (ID = IDD_DIALOG1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class CMyDialog : public CDialog
{
...
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DIALOG1 };
#endif
public:
    afx_msg void OnBnClickedClrscr();
    CString m_str;
    int m_color;
    virtual BOOL OnInitDialog();
    afx_msg void OnBnClickedOk();
};
 
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_BN_CLICKED(IDC_CLRSCR, &CMyDialog::OnBnClickedClrscr)
    ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk)
END_MESSAGE_MAP()
 
void CMyDialog::OnBnClickedClrscr()
{
    EndDialog(100);
}
 
BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    SetDlgItemText(IDC_STR, m_str);
    SetDlgItemInt(IDC_COLOR, m_color);
 
    return TRUE;  // return TRUE unless you set the focus to a control
                  // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
 
void CMyDialog::OnBnClickedOk()
{
    GetDlgItemText(IDC_STR, m_str);
    m_color = GetDlgItemInt(IDC_COLOR);
    CDialog::OnOK();
}
 
#include "MyDialog.h"
void CMFCApplication6View::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    CMyDialog dlg;
    dlg.m_str = m_str;
    dlg.m_color = m_color;
    int result = dlg.DoModal();
    if (result == IDOK)
    {
        m_str = dlg.m_str;
        m_color = dlg.m_color;
        Invalidate();
    }
    else if (result == 100)
    {
        m_str = L"";
        m_color = 0;
        Invalidate();
    }
 
    CView::OnLButtonDblClk(nFlags, point);
}
cs

 <문자열은 10문자, 숫자는 0~255 숫자 범위로 제한하는 DDX/DDV 자동 구현> - 수동으로는 안되네?

위 코드에서 m_str과 m_color 변수를 지우고 아래 처럼 클래스 마법사로 추가한다.

1
2
3
4
5
6
7
8
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
...
    DDX_Text(pDX, IDC_STR, m_str);
    DDV_MaxChars(pDX, m_str, 10);
    DDX_Text(pDX, IDC_COLOR, m_color);
    DDV_MinMaxInt(pDX, m_color, 0255);
}
cs

한글은 유니코드는 10자, 멀티바이트는 5자로 제한된다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31