모달(Modal)과 모달리스(Modeless)

2021. 2. 5. 00:53·C, C++, MFC

모달 (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
'C, C++, MFC' 카테고리의 다른 글
  • 토이 프로젝트 - 캘린더 프로그램 (1)
  • 동적 링크 라이브러리(DLL) - DLL 생성과 암시적/명시적 연결
  • TCP/IP 프로그래밍 - 채팅 프로그램
  • TCP/IP 프로그래밍 - 범용 소켓 클래스
김고파
김고파
채워나가는 중
  • 김고파
    개발자 김고파
    김고파
  • 전체
    오늘
    어제
    • all
      • C, C++, MFC
        • 따배C++
      • Qt
      • OpenCV
      • Data Structure
      • Dev Tools
      • JAVA
  • 링크

    • github
    • 네이버블로그
    • BOJ
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
김고파
모달(Modal)과 모달리스(Modeless)
상단으로

티스토리툴바