티스토리 뷰

MFC

[MFC] Modal Dialog, Databinding 직접해주기

열혈허슬러 상추님 2019. 11. 5. 10:59
190717-1
 
컨트롤 베이스

 
리소스의 클래스를 만들어야한다.(자동)
 
다이얼로그 리소스 생성 -> 오른쪽 마우스 클래스 생성
(모달 다이얼로그를 띄우는 코드)
이벤트 처리기 추가 -> 헤더 include후 사용.
 
void CCBDoc::OnModal()
{
    CTestDlg dlg; // 객체 생성
    if (dlg.DoModal() == IDOK)
        AfxMessageBox(_T("OK 누름"));
    else
        AfxMessageBox(_T("CANCEL 누름"));
}
- 버튼 클릭시 처리하기
 
- 모달리스 다이얼로그 : 모달 다이얼로그 보다는 복잡하다. (이는 잠시후에 해보겠다.)
 
- 안에 있는 텍스트박스, 버튼의 부모는 다이얼로그다.
버튼 두번 클릭시 자동으로 가장 많이 사용되는 Clicked 처리기가 추가된다.
 
[첫 번째 방법]
void CTestDlg::OnBnClickedCopy()
{
    TCHAR buf[500];
    ::GetDlgItemText(GetSafeHwnd(), IDC_SOURCE, buf, 500);
    ::SetDlgItemText(GetSafeHwnd(), IDC_TARGET, buf);
}
- 위 다이얼로그에서 복사하는 코드 (WIN32 api코드)
 
[두 번째 방법]
void CTestDlg::OnBnClickedCopy()
{
    CString buf;
    CEdit* pEditSrc = (CEdit*)this->GetDlgItem(IDC_SOURCE);
    CEdit* pEditTar = (CEdit * )this->GetDlgItem(IDC_TARGET);
    
    pEditSrc->GetWindowText(buf);
    pEditTar->SetWindowText(buf);
}
- 또다른 코드. 객체를 사용한다. 
(그러나 실제로는 위방법들을 사용하진 않는다.)
모델-뷰 방법을 사용하여 뷰(컨트롤)와 연결된 변수를 만들고 복사를 해야한다.
 
MFC에서의 컨트롤 : 사용자 인터페이스 요소
2가지로 분류한다.
1. 값
2. 제어(컨트롤) - 제어시에는 해당 컨트롤을 윈도우처럼 다루어여한다.
 
연결 변수
1. value type
2. control type
 
 
 
 
MFC에서는 바인딩이 없다. (WPF의 바인딩)
직접해주어야한다.
 
UpdateData()
 
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_SOURCE, m_strSource);
    DDX_Text(pDX, IDC_TARGET, m_strTarget);
}
void CTestDlg::OnBnClickedCopy()
{
    UpdateData(TRUE); // 컨트롤의 값을 변수로 전송
    m_strTarget = m_strSource;
    UpdateData(FALSE); //변수의 값을 컨트롤로 전송
}
 
void CTestDlg::OnBnClickedCtrlbtn()
{
    CString str;
    m_ctrlButton.GetWindowText(str);
    if (str == _T("Hide"))
    {
        m_ctrlSource.ShowWindow(SW_HIDE);
        m_ctrlTarget.ShowWindow(SW_HIDE);
        m_ctrlButton.SetWindowTextW(_T("Show"));
    }
    else {
        m_ctrlSource.ShowWindow(SW_SHOW);
        m_ctrlTarget.ShowWindow(SW_SHOW);
        m_ctrlButton.SetWindowTextW(_T("Hide"));
    }
    
}
- 버튼 숨기기 보이기
공유하기 링크
TAG
댓글
댓글쓰기 폼
네이버 이웃추가
«   2020/08   »
            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          
글 보관함