본문 바로가기

개발/mfc

mfc , 자식 Dialog 만들고 Class 추가하기 - sample source

반응형

다이알 로그에서 자식 다이알 로그 만들기   - Visual Studio 2010 로 작업 한 거 입니다.

===============================

 

1. Top 메뉴: VIew - Resource View [ Ctrl + Shift + E ]

===============================

 

2. Resource View의 Dialog 에서 마우스 오른쪽 버튼 - Add Resource

>    "Add Resource" 팝업 창에서 "Dialog" 선택 하고 [New]

===============================

3. 만들어진 다이알로그 이름 바꾸기, 속성 창 뛰워 이름을 아무거나 바꾼다.

> 여기서는 IDD_DLG_Task 로 하였다

> 이름을 바꾼뒤 build 를 해 주어, 바꾼 ID 를 인식 하도록 한다.

   만들어 진 자식이 DLG_Task 라 하면,

===============================

 

 

4.  IDD_DLG_Task 에 클래스 만들어 연결 하기

- Resource View 창에서 만들어진 다이알 로그 IDD_DLG_Task 를 마우스 왼쪽 버튼으로 선택 하고

- 마우스 오른쪽 버튼 - Add CLass

- 나타난 창에서 Class Name 만 DLG_Task 의 클레스라는 뜻으로 앞에 C 를 하나 더 붙인 

  CDLG_Task  넣어 주면 나머지(.h 파일 이름, .cpp 파일 이름) 는 알어서 들어간다. 

 Base Class 는 [CDialog] 나  [CDialogEx]  2개중 하나 선택 하는데,  여기서는   [CDialog] 을 선택 하는것으로 한다.

 [Finish] 를 누르면 만들어 진다.

===============================

 

 

- 그러면 Top 메뉴 - View -Solution Explorer 를 보면 DLG_Task.cpp 와 DLG_Task.h 파일 2개가 추가 된것을 확인 할 수 있다

===============================

 

 

 

5. 만들어진 다이알 로그 연결

- 부모 Dialog 의 헤더(~.h) 에 자식 다이알로그를 넣기 위해 자식 .h 를 인크루드 한다.

===============================

 

 

// CDlg_main.h
;
;
#pragma once

class CDLG_Task;		//  자식 다이알로그 부르기 위한 선언

// CDlg_main dialog
class CDlg_main : public CDialog
{
// Construction
public:
	CDlg_main(CWnd* pParent = NULL);	// standard constructor
	CDLG_Task *pDlgTask;	// 자식 다이알로그 부르기 위한 변수

// Dialog Data
	enum { IDD = IDD_DIALOG_Main };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
;
;

- 부모 Dialog 의 헤더(~.h) 에 부모 클래스에 자식 다이알로그 클래스를 멤버 변수로 추가 한다.

  일반 변수로 할 수도 있지만, 자식 창을 여러개 띄운다면 포인터로 만드는 것이 좋아서, 여기서는 포인터로 한다.

===============================

6.  자식 다이알로 그 띄우기(부르기)

-  버튼을 하나 만들어 누르면 띄우게 하여도 되지만, 일단 여기서는 프로그램 실행 되면 그냥 뜨게 한다.

 

// Dlg_main.cpp
#include "Dlg_main.h"
#include "DLG_Task.h"	// header include
;
; // 생략
;
BOOL CDlg_main::OnInitDialog()
{
	CDialog::OnInitDialog();
;
; // 생략
;
	pDlgTask = new  CDlg_Task(this);	// 변수 만들고
	pDlgTask->Create(CDlg_Task::IDD, this); 	// 다이알로그 만들어 변수에 저장
//	pDlgTask->ShowWindow(SW_HIDE);	// SW_SHOW
;
; // 생략
;

 

> 부모 Dlg.cpp에서 OnInitDialog() 함수 아래 부분에  자식 다이알로그 만드는 코드를 삽입해준다.

> 뭐 꼭 여기( OnInitDialog )가 아니라도, 필요 한데 넣으면 된다. 

===============================

7. 자식 DIalog 에 부모 Dialog 연결

> 자식 dialog Header file  Dlg_Task.h 에 

class CDlg_main;

public: // 부모 다이알 로그 부르기 위한 변수
CDlg_main *m_pDlg;

을 추가 한다.

//
;
;
class CDlg_main;	// 추가한 부모 클래스 

class CDlg_Task : public CDialogEx
{
	DECLARE_DYNAMIC(CDlg_Task)

public:
	CDlg_Task(CWnd* pParent = NULL);   // standard constructor
	virtual ~CDlg_Task();

public:		
	CDlg_main *m_pDlg;  // 추가한 부모 다이알 로그 부르기 위한 변수
;
;

 

8.  Dlg_Task.cpp 에 부모 Dialog 링크 변수 값 설정

#include "Dlg_main.h"

m_pDlg =  (CDlg_main*) pParent;

두 줄을 추가 한다.

// ~.cpp
#include "Dlg_main.h"	// 부모 해더 파일 인크루드
;
;
CDlg_Task::CDlg_Task(CWnd* pParent /*=NULL*/)
	: CDialogEx(CDlg_Task::IDD, pParent)
{
	m_pDlg =  (CDlg_main*) pParent;		// 부모 연결 변수 값 설정
}

 

7. 컴파일하여 프로그램 실행 시키면, 자식 다이알 로그가 같이 뜨는것을 볼 수 있다.

 

===============================

8. 혹시 위 6 에서 OnInitDialog()  가 부모 다이알 로그에 없다면,

- 메뉴 - view -class view 로 class view 창 띄우고

- 부모 클래스 ( CDLG_Main ) 선택, 마우스 오른쪽 버튼  - property 

- Overrides 선택 - [OnInitDialog] 선택 - Add   하면 만들어 준다.

- 사실 부모 다이알 로그는 OnInitDiag 가 있을 것이고 방금 만들어준 자식 Dlg_Task 가 없을 것이니 이것도 만들어  준다.

 

===============================

 

뭐 많이 부족 하지만 , 일단 올 립니다.

 

반응형