티스토리 뷰

목표 : 모달리스 다이얼로그를 띄워서 부모 다이얼로그 안에 부착시키는 작업

소주제 : 모달리스 다이얼로그 선언하고 생성하기


Visual Studio 2012


1. MFC 프로젝트 생성 (ModelessD)


2. 다이얼로그 리소스 추가 (IDD_DIALOG1)

  - Style: Child, Border: None


3. 대화상자 클래스 추가(CDialogEx CDialog1)


4. 대화상자 변수 추가 및 선언

// ModelessDDlg.h : 헤더 파일
//
#pragma once
#include "Dialog1.h"  //Dialog 헤더 추가

static BOOL isDlgInit = FALSE; //InitDialog 실행여부 파악용 전역변수

// CModelessDDlg 대화 상자
class CModelessDDlg : public CDialogEx
{

...
public:
	CDialog1 *m_dlg1;    // 멤버변수 선언
};


5. 대화상자 멤버변수 초기화

// ModelessDDlg.cpp : 구현 파일
//

// CModelessDDlg 메시지 처리기
BOOL CModelessDDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	...
	// TODO: 여기에 추가 초기화 작업을 추가합니다.
	isDlgInit = TRUE;

	m_dlg1 = new CDialog1;
	m_dlg1->Create(IDD_DIALOG1);
	return TRUE;
}


6. 소멸자 추가하고 동적으로 생성한 메모리 해제

 * 프로젝트 - 클래스 마법사 - 클래스 이름(CModelessDDlg) - 메시지탭 - WM_DESTROY 처리기 추가

void CModelessDDlg::OnDestroy()
{
	CDialogEx::OnDestroy();

	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
	delete m_dlg1;	//메모리 할당 해제
}


7. 버튼 클릭시 다이얼로그 표시/숨김 설정

void CModelessDDlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	BOOL chk = m_dlg1->IsWindowVisible();

	if(chk)
	{
		m_dlg1->ShowWindow(SW_HIDE);
	}
	else
	{
		m_dlg1->ShowWindow(SW_SHOW);
	}
}


댓글