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"));
}
}
- 버튼 숨기기 보이기
'MFC' 카테고리의 다른 글
[MFC] 스크롤바 설정(제한), Using Views in Frames (0) | 2019.11.07 |
---|---|
[MFC] Calling up mainframe, Modaless dialog (0) | 2019.11.06 |
[MFC] SetModifiedFlag, 새파일, 직렬화, 다형성을 이용한 도형그리기 (0) | 2019.11.04 |
[MFC] 메세지 맵, 상단 메뉴 사용 등 (0) | 2019.09.24 |
MFC (Microsoft Foundation Classes) (0) | 2019.09.23 |