[MFC] 모달 , 모달리스 대화상자 설명 및 사용법

[MFC] 모달, 모달리스 대화상자 기본 설명 및 사용방법


 

이번 포스팅에서는 MFC에서 모달 대화상자와 모달리스 대화상자에 대해서 서로 각각의 설명 및 차이점, 그리고 실제 어떻게 코드를 이용하여 사용하는지에 대하여 알아보도록 하겠습니다.

 

흔히 대화상자의 종류는 크게 모달(Modal) 대화상자와 모달리스(Modaless) 대화상자로 나뉩니다.

 

모달 대화상자란?


모달 대화상자는 대화상자가 출력되면 사용자가 대화상자를 닫기 전까지 해당 응용 프로그램에서 다른 작업을 할 수 없는 대화상자를 나타냅니다. , 모달 대화상자를 닫아야만 응용 프로그램 내의 다른 윈도우에 포커스를 둘 수 있습니다.

 

모달리스 대화상자란?


모달리스 대화상자는 대화상자를 닫지 않은 채 즉, 대화상자가 화면에 출력되어 있는 채로 사용자가 얼마든지 응용 프로그램에서 다른 작업을 할 수 있는 대화상자를 나타냅니다.

 

그럼 실제 MFC 환경에서 서로 어떻게 코드로 작성하고 선언하는지에 대하여 알아보도록 하겠습니다.


그럼 먼저 MFC 대화상자 기반의 프로젝트를 아래와 같이 생성해 주시기 바랍니다.



 

그리고 위의 static변수 및 버튼 컨트롤을 지워 주시고 아래와 같이 두 개의 버튼을 배치해 주시기 바랍니다.




여기까지 진행을 하셨다면 이제 리소스 뷰에서 두 개의 Dialog를 삽입해 주시기 바랍니다. 리소스 뷰에서 새 다이얼로그를 생성하는 방법은 아래와 같이 하시면 됩니다.



 

위와 같은 방법을 이용하여 총 두 개의 다이얼로그를 생성해 주시기 바랍니다.



 

그리고 위와 같이 static 컨트롤을 배치해 주시기 바랍니다.

 

여기까지 진행 하셨다면 이제 위 두 개의 폼에 마우스를 가져다 대주시고 우 클릭을 하여 각각의 폼에 대한 클래스를 선언해 주시기 바랍니다. 저 같은 경우는 CModalDlg, CModalessDlg 클래스 두 개를 선언하였습니다.

 

그리고 아래와 같이 코드를 작성해 주시기 바랍니다.


 

[testDlg.h]


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

 

// testDlg.h : 헤더 파일

//

 

#pragma once

 

 

// CtestDlg 대화 상자

class CtestDlg : public CDialogEx

{

// 생성입니다.

public:

    CtestDlg(CWnd* pParent = NULL);    // 표준 생성자입니다.

 

    CModalDlg dlg; //모달창  객체 선언

    CModalless *m_pDlg; //모달리스  객체 선언

 

 

// 대화 상자 데이터입니다.

    enum { IDD = IDD_TEST_DIALOG };

 

    protected:

    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.

 

 

// 구현입니다.

protected:

    HICON m_hIcon;

 

    // 생성된 메시지  함수

    virtual BOOL OnInitDialog();

    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

    afx_msg void OnPaint();

    afx_msg HCURSOR OnQueryDragIcon();

    DECLARE_MESSAGE_MAP()

public:

    afx_msg void OnBnClickedButtonModal();

    afx_msg void OnBnClickedButtonModalless();

    afx_msg void OnDestroy();

};

 

Colored by Color Scripter

cs

 

[testDlg.cpp]


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

//모달  열기

void CtestDlg::OnBnClickedButtonModal()

{

    //모달  호출

    dlg.DoModal();

}

 

 

//모달리스  열기

void CtestDlg::OnBnClickedButtonModalless()

{

    //m_pDlg 변수값이 NULL이면 아직 객체가 생성된 것이 아니므로

    if(m_pDlg == NULL)

    {

        //동적 메모리 할당을  후에

        m_pDlg = new CModalless(this);

 

        //모달리스 대화상자를 생성하고

        m_pDlg->Create(IDD_DIALOG_MODALLESS, this);

 

        //화면에 나타내기 위해 ShowWindow() 함수를 호출

        m_pDlg->ShowWindow(SW_SHOW);

 

    }

}

Colored by Color Scripter

cs

 

이렇게 코드를 작성하고나서 프로그램을 실행시켜 보시면 모달 창 버튼을 클릭할 시에는 해당 모달 창이 닫힐 때까지는 그 어떠한 응용 프로그램도 이용할 수 없는 것을 확인하실 수 있습니다.


그와는 반대로 모달리스 창 버튼을 클릭하시고 모달리스 창이 띄어 졌을 때, 해당 응용 프로그램을 이용 가능하다는 것을 확인 하실 수 있습니다.

 

이로써 간단히 모달과 모달리스 대화상자에 대해서 알아보았습니다.

 

감사합니다.


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY