-
[MFC] 부모 다이얼로그에서 자식 다이얼로그 생성하기MFC/Visual C++ 2008 2021. 1. 5. 13:52반응형
부모 다이얼로그에 자식 다이얼로그 생성하기
1. 프로젝트 이름을 ‘MakeChild’라고 지어 준 뒤 ‘MFC 응용 프로그램’을 선택하고 확인을 누른다.
2. 확인을 누른 다음 화면에서는 다음을 눌러 지나간다.
3. 대화 상자 기반을 선택해준다. 대화 상자 기반을 선택해 주면 다른 값들은 Default로 그대로 두고, 공유 DLL에서 MFC 사용이 체크 되어 있는지 확인해준다. 일반적으로 Default 값으로 설정되어 있다.
4. Default 값으로 두고 다음
5. Default 값으로 두고 다음
6. 자동으로 생성되는 App 과 Dlg 소스 파일을 확인하고 마침을 눌러준다.
7. 새로운 프로젝트 생성이 완료되면 위와 같이 기본 다이얼로그가 보인다. 오늘은 부모 다이얼로그에 자식 다이얼로그를 생성해 보는 것이므로 기본 다이얼로그는 가만히 둬도 된다.
8. 이제 새로운 다이얼로그를 추가해 주기 위해서 리소스 뷰를 열어 Dialog 항목에서 오른쪽 마우스 버튼으로 세부 항목을 본다. ‘Dialog 삽입’ 또는 ‘리소스 추가’에서 Dialog 새로 만들기를 눌러서 추가해준다.
9. 새로 추가된 Dialog 상자는 위에처럼 확인과 취소 버튼만 있다. 이제 방금 만들어진 다이얼로그의 속성을 설정해주기 위해 ‘속성’을 눌러 선택해준다.
10. ‘속성’을 눌러 들어가면 IDD_DIALOG1 으로 Default 값이 ID로 설정되어 있는데, 알아보기쉽게 이름을 설정해준다. 이 다이얼로그는 자식 윈도우 역할을 할 것이므로 ‘IDD_CHILD_DIALOG’로 바꾸어 주었다.
11. 자식 다이얼로그에 도구 상자에서 ‘Static Text’ 하나를 끌어다가 올렸다. ‘Static Text’ 위에서 마우스 오른쪽을 클릭해서 세부 목록을 열고 ‘속성’을 선택해준다. 그런 뒤, ‘속성’ 보기에서 Caption을 간단하게 변경해서 자식 다이얼로그를 명시해준다.
12. 추가된 자식 다이얼로그에 ‘클래스 추가’를 한다.
13. 클래스 이름을 지어주고, (일반적으로 원하는 이름에 C를 앞에 붙여 만들어준다.) 기본 클래스를 ‘Cdialog’로 선택해준다. 그런 뒤 마침을 누르면 h 파일과 cpp 파일이 생성된다.
14. 자식 다이얼로그를 생성하는 코드를 삽입하기 위해서 ‘솔루션 탐색기’에서 프로젝트의 Dlg.cpp 파일을 열어 준다.( 프로젝트 명+Dlg.cpp)
15. 자식 다이얼로그 생성을 위해서 헤더 파일을 Dlg.cpp에 추가해준다.
16. Dlg.h으로 이동해서 CchildDlg 클래스에 대한 객체를 멤버 변수로 선언해준다.
17. Dlg.cpp로 다시 이동해서 OnInitDialog() 함수 아래 부분에 위에 처럼 코드를 삽입해준다.
18. 여기까지 한 뒤 , 빌드를 해주면 에러가 발생한다. 제일 처음에 나와있는 오류를 살펴보문 CChildDlg를 클래스로 인식하지 못해서 식별자가 앞에 없다는 오류 구문이 나옵니다. 이때는, Dlg.h 에 CchildDlg.h를 포함시켜주면 된다.
19. Dlg.h에 CchildDlg 클래스의 헤더를 포함시키고 빌드 시켜본다.
20. 실행 결과 자식 다이얼로그가 부모 다이얼로그 위로 생성된 것을 볼 수 있다.
21. 위와 같이 코드를 작성해도 결과는 같다.
**Cdilaog::Create
: Create를 호출하여 리소스의 대화 상자 템플릿을 사용하는 모달리스 대화 사아를 만든다.
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
virtual BOOL Create(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
lpszTemplateName
대화 상자 템플릿 리소스의 이름인 null로 끝나는 문자열을 포함 합니다.pParentWnd
Dialog 개체가 속한 부모 창 개체 ( CWnd형식)를 가리킵니다. NULL 인 경우에는 대화 상자 개체의 부모 창이 주 응용 프로그램 창으로 설정 됩니다.nIDTemplate
대화 상자 템플릿 리소스의 ID 번호를 포함 합니다위에 코드에서 Dialog.Create를 이용해서 자식 다이얼로그를 생성했다. 이때, Create(CchildDlg::IDD_, this) 라고 함수를 작성했는데 여기서 this포인터는 자동적으로 시스템이 만들어 주는 포인터로, 멤버가 호출될 때 그 멤버가 속한 객체를 가리킨다. 여기서는 부모 다이얼로그가 된다. 이 방법을 통해서 두 다이얼로그 간에 부모, 자식 관계가 형성된다. 이 외에도 GetParent 와 SetParent와 같은 함수를 이용하면 부모 자식 관계를 설정할 수 있다.
728x90'MFC > Visual C++ 2008' 카테고리의 다른 글
[MFC] 읽기 전용이므로 추가/제거 (0) 2021.01.12 [MFC] AfxMessageBox 알림창 띄우기 및 활용 (0) 2021.01.06 [MFC] 프로젝트 생성하기 (0) 2021.01.06 [MFC] Date Time Picker으로 선택된 날짜 받아오기 & 현재 시간 받아오기 (0) 2021.01.06 [MFC] 파일 삭제 하기 (0) 2020.11.06