Language & API/MFC

다이얼로그 모달리스 생성하기

강한퓨전 2022. 3. 10. 16:36

 

 

MFC 다이얼로그 생성 방식은 아래 두가지가 있습니다. 

1. 모달(MODAL) 방식

   - 열린 대화 상자의 제어권 및 포커스가 다른 대화 상자로는 이동하지 못합니다. 

   - 닫아야지만 제어권 및 포커스가 이동 합니다. 

2. 모달리스(MODALESS) 방식

   - 열린 대화 상자 뿐 아니라 다른 대화 상자에게 포커스 및 제어권을 이동할 수 있습니다. 

 

아래는 모달리스 대화 상자를 만들 때 사용했던 조건들입니다. 

1. MAIN 다이얼로그 초기화시 다이얼로그 클래스 생성 

2. 버튼을 누르면 다이얼로그 CREATE 

3. 버튼을 계속 누를시 하나의 다이얼로그만 생성 

4. 다이얼로그 위치 중앙 

5. MAIN 다이얼로그 CLOSE 시 다이얼로그 삭제

 

부모 다이얼로그 초기화 부분에 추가

 

버튼 클릭시 모달리스 다이얼로그 보여주기

 

 

부모 다이얼로그 CLOSE 시 포인트 제거

 

아래 소스 카피를 위해 소스의 일부분으로  만들어 놓았습니다.

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
 
 
BOOL CSetUpTestDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    //...
 
    m_pSetup_Dlg = new Setup_Dlg();
 
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
 
 
void CSetUpTestDlg::OnClose()
{
    if (m_pSetup_Dlg != nullptr) {
        delete m_pSetup_Dlg;
    }
 
    CDialogEx::OnClose();
}
 
 
void CSetUpTestDlg::OnBnClickedBtnSetup()
{
    if (m_pSetup_Dlg->GetSafeHwnd() == NULL)  //다이얼로그 존재 체크
    {
        m_pSetup_Dlg->Create(IDD_DL_SETUP, this);  //다이얼로그 만들기
        
    }
    else
    {
        m_pSetup_Dlg->SetActiveWindow();  //다이얼로그 활성화
    }
 
    m_pSetup_Dlg->CenterWindow(GetDesktopWindow());  //다이얼로그 센터위치
    m_pSetup_Dlg->ShowWindow(SW_SHOW);  //다이얼로그 보이기
}
 
cs