728x90
300x250
[MFC] 도큐먼트(폼 뷰) - DDX에 관한 이야기

 

이전의 Visual Studio 2010, Visual Studio 2013, Visual Studio 2015에서는 아래처럼 따라하면, CFormView에서 변수를 생성할 수 있었다.

하지만, 최근 출시된 Visual Studio 2019에서는 달라진 점이 CFormView에서는 그냥 더블클릭 하나면 변수가 생성된다는 점이다.

이전의 주요 기능은 남아있으나 C#으로 진영이 넘어가는 것으로 보인다.

 

태스트 환경:
Microsoft Visual Studio 2019 Community
Microsoft Windows 10

 


1. 프로젝트 생성하기

 

새 프로젝트 만들기->MFC 앱을 클릭한다.

 

 

그림 1) 프로젝트 생성하기 (1단계)

 

 

 

그림 2) 프로젝트 생성하기 (2단계 - 프로젝트 이름 지정)

 

 

 

 

그림 3) 프로젝트 생성하기 (단일 문서)

 

 

그림 4) 프로젝트 생성하기 (단일 문서)

 

파일 확장명을 "txt"라고 입력 후 "다음"을 클릭한다.

 

 

그림 5) Command bar (menu/toolbar/ribbon)에서 메뉴 모음 및 도구 모음 사용을 클릭하기

 

 

그림 6) View 클래스 선택 후, 마침 누르기

 

FormView_ex에서 리소스 파일을 클릭 후 Formview_ex.rc를 더블 클릭한다.

 

 

그림 7) 완성된 프로젝트

 

 

그림 8) 완성된 프로젝트

 


2. CFormView 확인하기

 

초기에 생성된 CFormView의 모습이다.

IDD_FORMVIEW_EX_FORM의 Style은 Child로 지정한다.

 

 

그림 9) IDD_FORMVIEW_EX_FORM 스타일 설정의 예

 

IDD_FORMVIEW_EX_FORM 스타일을 Child가 아닌 Popup으로 변경할 경우, 오류가 발생한다.

 

임시로 Ctrl+F5를 눌러서 잘 동작하는지 확인을 해본다.

 

 

그림 10) 프로젝트가 동작하는 모습의 예

 

 


3. CFormView 꾸미기(실습)

 

FormViewex.rc의 IDD_FORMVIEW_EX_FORM (Dialog)를 아래처럼 컨트롤박스를 배치하여 꾸미도록 한다.

이전 버전(Visual Studio 2010, Visual Studio 2013, 2015, 2017)과 호환이 된다.

 

 

그림 11) 디자인 모습

 

그림 11처럼 도구 상자에 있는 컨트롤을 배치하도록 한다.

 

 

 

그림 12) ID 이름 변경하기

 

 

 

그림 13) IDC_EDIT_BLUE (Edit Control)의 Number 옵션 변경하기

 

그림 13처럼 Number 옵션을 True로 변경하면 항상 숫자만 입력할 수 밖에 없도록 된다.

 

 

 

그림 14) Caption 변경하는 모습

 


4. 충돌 오류 발생 - "변수 추가(B)..."

 

Visual Studio 2017, Visual Studio 2019부터 CFormView에서 변수 추가(B)로 컨트롤에 변수를 주는 것이 금지되었다.

"DoDataExchange 메서드를 업데이트할 수 없습니다."라는 오류를 발생시킨다.

 

 

그림 15) 변수 추가(B)의 모습

 

 

그림 16) 변수명을 이전 스타일(Visual Studio 2015)로 입력하는 모습의 예

 

범주(T)를 "값"으로 설정하고 이전 스타일로 입력을 하였다.

이전 버전에서는 동작할 수도 있겠으나 최신 버전(Visual Studio 2017, 2019)에서는 동작하지 않는다.

 

"DoDataExchanage 메서드를 업데이트할 수 없습니다." 라는 오류를 접하게 된다.

아래의 그림들도 마찬가지이다.

 

 

그림 17) 변수명을 이전 스타일(Visual Studio 2015)로 입력하는 모습의 예

 

 

그림 18) 변수명을 이전 스타일(Visual Studio 2015)로 입력하는 모습의 예

 


5. 다이얼 로그에서만 사용가능

 

마이크로소프트 공식 사이트에서 "대화 상자 작업"이라는 주제에 대해서 찾아보았다.

해당 관련 자료를 찾아볼 수 있었다.

https://docs.microsoft.com/ko-kr/cpp/mfc/life-cycle-of-a-dialog-box?view=vs-2019

https://docs.microsoft.com/ko-kr/cpp/mfc/dialog-data-exchange?view=vs-2019

 

그림 19) MFC 공식 메뉴얼 - 마이크로소프트

 

 

그림 20) 대화 상자 데이터 교환 - 마이크로소프트

원리, 이론적으로는 가능해보이나 Visual Studio 2019부터는 훨씬 엄격해진 것 같다.

 


결론(Conclusion)

 

CFormView에서는 DDX 메커니즘은 동작하지 않는다.

 

[첨부(Attachment)]

FormView_ex1.zip

반응형

+ Recent posts