모달 (Modal) 대화상자
대화상자가 출력되어 있는 동안 그 대화상자가 프로그램의 모든 제어권을 독점하고 있어 대화상자가 죵료되기 전에는 다른 작업을 할 수 없는 대화상자
모달리스 (Modeless) 대화상자
대화상자가 출력되어 있어도 이 대화상자가 프로그램의 제어권을 독점하지 않아 대화상자를 종료하지 않아도 다른 작업을 할 수 있는 대화상자
모달 생성 방법
void CModalTestView::OnBnClickedButtonModal()
{
CModalDlg dlg;
dlg.DoModal();
}
모달 대화상자는 DoModal 함수를 호출하여 생성한다. DoModal 함수는 모달 대화상자가 화면에 출력되어 있는 상황에서는 계속 실행중인 상태에 있게 되어, 이 함수가 종료되기 전에는 다음 동작을 수행할 수 없다.
모달 종료 방법
DoMoal 함수를 종료시키기 위해서는 EndDialog 함수를 호출한다. CDialog 클래스의 OnOK 멤버 함수에서는 EndDialog(IDOK)가 호출되고, OnCancel 멤버 함수에서는 EndDialog(IDCANCEL)가 호출된다.
모달리스 생성 방법
void CModalTestView::OnBnClickedButtonModeless()
{
if (m_pModelessDlg != NULL)
{
// 대화상자가 이미 출력되어 있는 경우 - 대화상자에 포커스를 줌
m_pModelessDlg->SetFocus();
}
else
{
// 대화상자가 출력되어 있지 않은 경우 - 새로운 인스턴스를 생성 후 ShowWindow
m_pModelessDlg = new CModelessDlg;
m_pModelessDlg->Create(IDD_DIALOG_MODELESS, this);
m_pModelessDlg->ShowWindow(SW_SHOW);
}
}
모달리스 대화상자는 CDialog 클래스의 Create 멤버 함수를 호출하여 생성한다.
모달리스 종료 방법
void CModelessDlg::OnBnClickedCancel()
{
DestroyWindow();
}
void CModelessDlg::PostNcDestroy()
{
((CModalTestView *)AfxGetMainWnd())->m_pModelessDlg = NULL;
delete this;
CDialogEx::PostNcDestroy();
}
모달리스 대화상자는 일반적인 윈도우를 종료시키는 것처럼, DestroyWindow 함수를 이용하여 종료한다. 그리고 동적으로 할당 받았던 메모리도 해제를 해준다. PostNcDestroy 함수는 대화상자가 완전히 소멸된 후에 호출되는 함수이므로, 여기서 인스턴스를 삭제해도 안전하다.
kimgopa/mfc_project
visual c++ mfc project. Contribute to kimgopa/mfc_project development by creating an account on GitHub.
github.com
'C, C++, MFC' 카테고리의 다른 글
| 토이 프로젝트 - 캘린더 프로그램 (1) (0) | 2021.05.31 |
|---|---|
| 동적 링크 라이브러리(DLL) - DLL 생성과 암시적/명시적 연결 (0) | 2021.02.16 |
| TCP/IP 프로그래밍 - 채팅 프로그램 (0) | 2021.01.06 |
| TCP/IP 프로그래밍 - 범용 소켓 클래스 (0) | 2020.12.31 |
| TCP/IP 프로그래밍 - 소켓 통신 (0) | 2020.12.19 |