다이알 로그에서 자식 다이알 로그 만들기 - 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 가 없을 것이니 이것도 만들어 준다.
===============================
뭐 많이 부족 하지만 , 일단 올 립니다.
'개발 > mfc' 카테고리의 다른 글
Visual Studio 2010 C++ code formatter (2) | 2023.10.19 |
---|---|
MFC vs2010 : Ontimer와 SetTimer, KillTimer (0) | 2023.09.06 |
mfc thread 만들기 - vs 2010, sample source (0) | 2023.09.03 |
mfc AfxMessageBox() 로, 문자, 숫자 표시 하기, sample source (0) | 2023.08.24 |
mfc vs2010 ini 파일 읽기 쓰기 간단 보기, sample source (0) | 2023.08.21 |